前にこのような記事を書いたが、
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は分岐命令の次の命令をフェッチしてしまっているのでそこには
分岐(する|しない)にかかわらず、実行されるべき命令を置くように順番を変えてしまう。
[遅延分岐]
この場合、ストア命令は必ず実行され、分岐命令とは依存関係がないレジスタにアクセスしているのでストア命令で入れ替えられている。
- 作者: ジョン・L.ヘネシー,デイビッド・A.パターソン,成田光彰
- 出版社/メーカー: 日経BP社
- 発売日: 2014/12/06
- メディア: 単行本
- この商品を含むブログ (2件) を見る
- 作者: デイビッド・A・パターソン,ジョン・L・ヘネシー,成田光彰
- 出版社/メーカー: 日経BP社
- 発売日: 2014/12/06
- メディア: 単行本
- この商品を含むブログ (2件) を見る