自作RISC-V アウトオブオーダコアの実装、いくつかのデバッグの結果標準構成でriscv-testsの必要なテストをすべて通すことが出来るようになった。
いくつか問題になったのは、ロード命令でTLBによりメモリアクセス例外が発生してそのまま当該ロード命令が強制終了したとき、次にそのロード結果を使う命令がいつまでもそのオペランドを待ち続け、同じ命令グループにいる場合にそのグループがいつまでもコミット状態になることが出来ない状態だった。 これは基本的なデッドロックのケースのはずだが、こういう基本的なケースも考慮が足りていなかった。 同じ命令グループでも前の命令が例外を発生すると、グループ内の後続の命令はすべてDead扱いとするように変更した。
これにより、riscv-tests
の基本的な命令群はすべてPassできるようになった。
もちろん、浮動小数点やアトミック命令などはまだ実装できていないが、これらは後々実装することにしよう。
rv64um-v-divw : PASS rv64um-v-div : PASS rv64um-v-divuw : PASS rv64um-v-mul : PASS rv64um-v-mulhsu : PASS rv64um-v-mulh : PASS rv64uc-v-rvc : PASS rv64um-v-remuw : PASS rv64um-v-remu : PASS rv64um-v-rem : PASS rv64um-v-remw : PASS rv64um-v-mulw : PASS rv64um-v-mulhu : PASS ============================ PASS / TOTAL = 166 / 166 |msrh_tb_rv64_standard | 166 / 166 (100.00%)| ============================