いろいろとセグるのを修正したり、バグを直したりして、ある程度テストパタンを使ってシミュレータの機能をチェックできるようになった。 そこで、基本命令セットのテストパタンを利用して、現在自作シミュレータがどの程度正しくアーキテクチャをシミュレーションできているか、リグレッションしてみることにした。
使ったのは、以下のリビジョンだ。
コマンドラインオプションとして、以下を指定して実行してみる。
swimmer_riscv -h ${hex} -c 500 -p 200 -s
- -h 実行するsrecファイル
- -c 最大で500命令まで実行する。500命令に到達すると強制終了
- -p 0x200からPCをセットしてシミュレーションを開始する
- -s mtohostシステムレジスタにアクセスすると、その時点でシミュレーション終了
で、こんな感じでforループを回してリグレッションしてみた。
for hex in `ls rv32ui-p-*.hex`; do echo -n ${hex}; echo -n ","; swimmer_riscv -h $hex -s -p 200 -c 500 -o debug; echo $?; done
実行結果。うーん、37本PASSで17本FAIL。まあ、アトミック命令については全く実装してないからなあ。 でも、アーキテクチャシミュレータにとって、アトミック命令って単なるロードストア命令なので、(ちゃんと仕様書を読めば、)簡単にサポートできる気がするな。 とはいえ、まだまだ基本命令が落ちてる。修正していかないと。
パタン名 | 結果 |
---|---|
rv32ui-p-add.hex | Pass |
rv32ui-p-addi.hex | Pass |
rv32ui-p-amoadd_w.hex | Fail |
rv32ui-p-amoand_w.hex | Fail |
rv32ui-p-amomaxu_w.hex | Fail |
rv32ui-p-amomax_w.hex | Fail |
rv32ui-p-amominu_w.hex | Fail |
rv32ui-p-amomin_w.hex | Fail |
rv32ui-p-amoor_w.hex | Fail |
rv32ui-p-amoswap_w.hex | Fail |
rv32ui-p-and.hex | Pass |
rv32ui-p-andi.hex | Pass |
rv32ui-p-auipc.hex | Fail |
rv32ui-p-beq.hex | Pass |
rv32ui-p-bge.hex | Pass |
rv32ui-p-bgeu.hex | Pass |
rv32ui-p-blt.hex | Pass |
rv32ui-p-bltu.hex | Pass |
rv32ui-p-bne.hex | Pass |
rv32ui-p-div.hex | Fail |
rv32ui-p-divu.hex | Fail |
rv32ui-p-fence_i.hex | Pass |
rv32ui-p-jal.hex | Pass |
rv32ui-p-jalr.hex | Pass |
rv32ui-p-j.hex | Pass |
rv32ui-p-lb.hex | Pass |
rv32ui-p-lbu.hex | Pass |
rv32ui-p-lh.hex | Pass |
rv32ui-p-lhu.hex | Pass |
rv32ui-p-lui.hex | Pass |
rv32ui-p-lw.hex | Pass |
rv32ui-p-mul.hex | Pass |
rv32ui-p-mulh.hex | Pass |
rv32ui-p-mulhsu.hex | Pass |
rv32ui-p-mulhu.hex | Pass |
rv32ui-p-or.hex | Pass |
rv32ui-p-ori.hex | Pass |
rv32ui-p-rem.hex | Fail |
rv32ui-p-remu.hex | Fail |
rv32ui-p-sb.hex | Fail |
rv32ui-p-sh.hex | Fail |
rv32ui-p-simple.hex | Pass |
rv32ui-p-sll.hex | Pass |
rv32ui-p-slli.hex | Pass |
rv32ui-p-slt.hex | Pass |
rv32ui-p-slti.hex | Pass |
rv32ui-p-sra.hex | Pass |
rv32ui-p-srai.hex | Pass |
rv32ui-p-srl.hex | Pass |
rv32ui-p-srli.hex | Pass |
rv32ui-p-sub.hex | Fail |
rv32ui-p-sw.hex | Fail |
rv32ui-p-xor.hex | Pass |
rv32ui-p-xori.hex | Pass |
PASS | 37 |
FAIL | 17 |