自作CPUの実装、ロードストア命令の物理アドレスが決まらないうえでのハザードのボトルネックを解決した。 そうこうしているうちにいつの間にかRET命令のRAS予測が怪しくなってきているので修正しておきたい。
RASの実装を確認するために、とりあえず以下のようなアセンブリを組み上げてみた。 再帰的に関数を呼び出すような形で (ただし ならば ) で実装している。 これでひたすらRASが埋められていき、RET命令実行時にスタックされた情報がPOPされていくはずだ。
_start: li sp, 0x80001000 li x10, 10 jal func j fin func: beq x10, zero, _func_fin addi sp, sp, -0x20 sd x10, 0(sp) sd ra , 8(sp) addi x10, x10, -1 jal func ld ra , 8(sp) ld x13, 0(sp) addi sp, sp, 0x20 add x10, x10, x13 ret _func_fin: ret
これにより、RASの情報が増えていき、そしてRET命令時にPOPされるのを波形上で確認した。シミュレーション結果としても、CALL/RET時にフラッシュが起きていないので良い感じだ。次はこれをDhrystoneで流してみよう。