RISC-VのCompressed命令について理解したので、自作ISSへの実装を進めた。
Compressed 命令の仕様については以下のまとめた。
というわけで、実装自体はテンプレートに従って追加していったのだが、いくつか注意しなければならないのが、上記のエントリにも書いたように命令のエンコーディングがかぶっているところだ。 RV32 と RV64/RV128 で、同じエンコーディングでも命令が異なっている部分がある。 ここについては少しケアしないとすべてのテストパタンを動作させることはできない。 とりあえずRV64のみ対応させ、RV32 / RV64の切り替えについては別の機構を追加することにした。
テストパタンについては、2種類用意されており、これをどちらもパスさせなければならないのが最終目標だ。 とりあえず、RV64のテストパタンだけ通すことにした。
- rv64uc-v-rvc : RV64 Compressed命令テスト、仮想アドレスモード
- rv64uc-p-rvc : RV64 Compressed命令テスト、物理アドレスモード
- rv32uc-v-rvc : RV32 Compressed命令テスト、仮想アドレスモード
- rv32uc-p-rvc : RV32 Compressed命令テスト、物理アドレスモード
とりあえず RV64UC-V-RVC については最後までテストが通るようになった。
図. RV64 RVCのテストパタン実行結果。RVC命令が正しくデコードされ実行されている。
次は、RV32モードでのテストパタンをパスさせよう。