MIPS 命令順序入れ替えない

前にこのような記事を書いたが、
e-tipsmemo.hatenablog.com

このままだとMIPSの遅延分岐やSW/LW関連の依存の解消のために勝手に命令が入れ替わってしまう。

解決法:
asmの先頭に.set noreorderをつける。

このプログラムを比較してみる。

add $1, $0, $10
add $2, $0, $11
L:addi $1, $1, 1
LW $3, 4($0)
nop
add $3, $1, $3
SW $3, 4($0)
bne $1, $2, L
nop
LW $4, 4($0)
nop
・・・

ない場合

ある場合

これは分岐する時点で普通のMIPSは分岐命令の次の命令をフェッチしてしまっているのでそこには
分岐(する|しない)にかかわらず、実行されるべき命令を置くように順番を変えてしまう。
[遅延分岐]

この場合、ストア命令は必ず実行され、分岐命令とは依存関係がないレジスタにアクセスしているのでストア命令で入れ替えられている。

コンピュータの構成と設計 第5版 上

コンピュータの構成と設計 第5版 上

コンピュータの構成と設計 第5版 下

コンピュータの構成と設計 第5版 下