ずっと試してみたかった、Tenstorrentが公開したRISC-V検証パタンである riscv_arch_tests
を試してみることにした。
自作CPUに適用して、さらなるバグが発見されることを期待している。
前回の続きで、テストパタンの動かし方が分かったので、自作CPUで動かしてみた。 とりあえず一番簡単なテストを自作CPUで動かした。
動かしている中でいくつかテストパタンのFailがあったので解析していたのだが、自作CPUのバグのようだった。 テストパタンの中でデータ領域をアップデートしているのだが、その近辺をフェッチしていると、その場所でフェッチが間違えるようだ。 本当はこういうところでfence命令を挿入してほしいのだが、そうもいかないらしい。非常に微妙なラインで間違いが落ちている。
これを直した結果、どうにかテストパタンが通過できるようになった。
しかし、まだos_data
セクションの対応が問題だなあ。どうにかしてバイナリを改造できないだろうか。
rvi_compute_register_register_3 : PASS rvi_compute_register_register_13 : PASS rvi_compute_register_register_19 : PASS rvi_compute_register_register_17 : PASS rvi_compute_register_immediate_5 : PASS rvi_compute_register_immediate_7 : PASS rvi_compute_register_immediate_1 : PASS rvi_compute_register_register_5 : PASS rvi_compute_register_register_9 : PASS rvi_compute_register_register_15 : PASS rvi_compute_register_register_7 : PASS rvi_compute_register_immediate_3 : UNKNOWN rvi_compute_register_immediate_9 : PASS rvi_control_transfer_conditional_5 : PASS rvi_compute_register_immediate_11 : PASS rvi_compute_register_register_11 : PASS rvi_control_transfer_conditional_7 : PASS rvi_compute_register_register_1 : PASS rvi_control_transfer_conditional_1 : PASS rvi_control_transfer_conditional_3 : PASS rvi_compute_register_register_4 : PASS rvi_compute_register_register_20 : PASS rvi_compute_register_immediate_6 : PASS rvi_compute_register_register_16 : PASS rvi_compute_register_immediate_8 : PASS rvi_compute_register_register_14 : PASS rvi_compute_register_immediate_2 : PASS rvi_compute_register_register_18 : PASS rvi_compute_register_register_8 : PASS rvi_compute_register_register_12 : PASS rvi_compute_register_immediate_10 : PASS rvi_compute_register_immediate_12 : PASS rvi_compute_register_register_6 : PASS rvi_compute_register_register_2 : PASS rvi_control_transfer_conditional_6 : PASS rvi_control_transfer_conditional_2 : PASS rvi_compute_register_register_10 : UNKNOWN rvi_compute_register_immediate_4 : PASS rvi_control_transfer_conditional_4 : PASS rvi_control_transfer_conditional_8 : PASS rvi_control_transfer_conditional_11 : PASS