Hallo. Ich habe ein Problem mit der Musterlösung der folgenden Aufgabe über MIPS-Assembler und Data-Hazards:
Aufgabenstellung: Markieren sie alle möglicherweise auftretenden Data-Hazrards in folgendem MIPS-Assembler-Code. Nennen sie jeweils den Typ des auftretenden Hazards und geben sie an, ob ein Pipeline-Stall auftritt. Falls, ja, skizzieren Sie im Code, was der Compiler dagegen tun könnte.
Code:
main:
addi $sp, $sp, -4
sw $ra, 0($sp)
li $a0, 0x10000000 # =lui + ori = EX-Hazard
lw $a0, 0($a0) # MEM + EX-Hazard mit lui + ori
addi $a0, $a0 1 # Load-Use-Hazard mit lw,MEM-H. mit ori
li $a1, 42
sll $a1, $a1, 2 # EX-Hazard mit li
jal x
lw $ra, 0($sp)
addi $sp, $sp, 4
j $ra
x: ...
Die Kommentare rechts sind Teil der Musterlösung.
Ich verstehe nicht, warum lui + ori ein EX-Hazard ist. Kann man vielleicht den Code so umschreiben, dass dann wirklich was mit lui + ori da steht, so dass es vielleicht klarer wird?
Warum kann ich nicht bei „li $a1, 42“ auch davon aus gehen, dass man daraus lui + ori=Ex-Hazard machen kann?
Mit freundlichen Grüßen,
Ralf