RISC-V 対応の自作エミュレータを作成している。テストパタンセットであるriscv-toolsがかなりPassできるようになってきた。
前回RISC-Vのツールセットが入ったDockerコンテナを用意したので、RISC-Vのテストパタンセットを動作させてみる。
以下のようなDockerを起動するためのスクリプトを用意した。riscv_iss
は自作RISC-Vエミュレータの場所だ。
run_docker_test.sh
#!/bin/sh sudo docker run -v ${PWD}/riscv_iss:/root/riscv_iss\ -v ${PWD}/scripts:/root/scripts \ -it msyksphinz/riscv-docker \ /root/scripts/test_run.sh
ここで読んでいる test_run.sh
は以下のような構成にしている。
test_run.sh
#!/bin/sh export RISCV=/opt/riscv/ cd /root/riscv_iss/build_riscv_iss/isa_test/ make ISA_DIR=/riscv/riscv64-unknown-elf/share/riscv-tests/isa/
このようにしてRISC-V自作エミュレータのディレクトリを外部ボリュームとしてDockerに接続し、リグレッションを実行した。
リグレッション結果は riscv_iss/build_riscv_iss/isa_test/result.txt
に保存されている。無事にリグレッション成功だ!400本あるテストパタンのうち、Failしたのは以下の十数本だけだった。
riscv_iss/build_riscv_iss/isa_test/result.txt.txt
sc_forest_iss Fail rv32mi-p-ma_fetch Fail rv64uc-v-rvc Fail rv32si-p-sbreak Fail rv64uc-p-rvc Fail rv32ua-v-lrsc Fail rv32si-p-ma_fetch Fail rv32uc-p-rvc Fail rv64ua-p-lrsc Fail rv32mi-p-breakpoint Fail rv32uc-v-rvc Fail rv64si-p-wfi Fail rv64mi-p-access Fail rv32ua-p-lrsc Fail rv64mi-p-ma_addr Fail rv32si-p-wfi Fail rv32si-p-dirty Fail rv64si-p-dirty Fail rv64ua-v-lrsc Fail rv32mi-p-mcsr Fail rv64si-p-ma_fetch Fail rv32mi-p-shamt Fail rv32mi-p-sbreak Fail rv32mi-p-ma_addr Fail rv64mi-p-illegal Fail rv64mi-p-ma_fetch Fail rv64mi-p-breakpoint Fail rv32mi-p-illegal Fail rv64ud-p-move Fail