Arch: chore

This commit is contained in:
2025-06-20 12:48:16 +03:00
parent 537c87bc48
commit 970aa9b9e2
27 changed files with 735 additions and 55252 deletions

View File

@ -7,10 +7,11 @@
- $j$ зависит по данным от $k$ и $k$ зависит по данным от $i$ (цепочка конфликтов RAW).
**Пример зависимости по данным:**
```assembly
Loop: LD [R1], F0
```armasm
Loop:
LD [R1], F0
DADD F2, F0, F4
ST F4, [R1]
ST F4, [R1]
```
**Зависимость по именам** возникает, когда 2 инструкции используют один и тот же регистр или место в памяти, т.е. общее имя места.
@ -32,13 +33,13 @@ $i$, $j$ пишут по одинаковому имени. Тогда $j$ за
Изменение относительного порядка исполнения $i$, $j$ нарушает эту зависимость по именам и приводит к конфликту WAW и некорректному исполнению.
**Пример:**
```assembly
1 LD F0, [R1]
2 DADD F2, F0, F4
3 ST F4, [R1]
4 LD F0, [R1-8]
5 DADD F2, F0, F4
6 ST F4, [R1-8]
```armasm
LD F0, [R1] ; 1
DADD F2, F0, F4 ; 2
ST F4, [R1] ; 3
LD F0, [R1-8] ; 4
DADD F2, F0, F4 ; 5
ST F4, [R1-8] ; 6
```
В графе можем переупорядочивать инструкции только если сохраняется порядок стрелок.

View File

@ -1,17 +1,22 @@
#### Зависимость по управлению.
Определяют порядок инструкции с учетом инструкций перехода.
Каждая инструкция в программе кроме тех, которые находятся в самом первом базовом блоке программы, зависима по управлению от некоторого множества переходов.
Инструкцию, зависимую по управлению от перехода нельзя переместить перед переходом так, что ее исполнение более не будет управляться переходом.
Инструкцию, не зависимую по управлению от перехода нельзя переместить так, что ее исполнение будет управляться переходом (в часть then).
В некоторых случаях возможно обойти эти ограничения и сохранить корректное исполнение.
**Пример зависимости:**
```c
if p1{
s1; s1 зависима по управлению от p1. s2 зависима по управлению от p2, но не от p1.
if p1 {
s1; // s1 зависима по управлению от p1
}
if p2{
s2;
if p2 {
s2; // s2 зависима по управлению от p2, но не от p1
}
```