FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

RISC-Vのリトマステストツールriscv-litmus-testを試す(2. いろいろ修正してコンパイルを通す)

前回のリトマステストツール。一応テストプログラムの生成は終了してコンパイルを通そうとしたのだが、いろんなエラーが出て失敗したのだった。

riscv64-unknown-linux-gnu-gcc -D_GNU_SOURCE -DFORCE_AFFINITY -Wall -std=gnu99 -O2 -pthread -static -c -o 2+2W+porlrls.o 
2+2W+porlrls.c
2+2W+porlrls.c: Assembler messages:
2+2W+porlrls.c:267: Error: unrecognized opcode `sw.rl t1,0(a5)'
2+2W+porlrls.c:269: Error: unrecognized opcode `sw.rl a1,0(a4)'
2+2W+porlrls.c:234: Error: unrecognized opcode `sw.rl t1,0(a5)'
2+2W+porlrls.c:236: Error: unrecognized opcode `sw.rl a1,0(a4)'

調べてみると自動生成されたテストコードの半数程度がsw.rlを使用しており、これはいったいどうしたらいいんだという気持ちになっている。

$ ag -l sw.rl | wc
   1769    1769   65381
$ ls *.c | wc
   3877    3877  123528

さらに調査を進めているとなぜかRISC-VのGCCで生成することのできない不思議な命令がたくさん表れてきて、どうしたらいいんだ。

  • sw.rl
  • lw.aq
  • aq.rl
  • ld.aq
  • sd.rl

試しにこれらのテストをひたすら削ってみる。以下のスクリプトを作成し、ひたすら該当するテストに対してコメントアウトを行った。

  • replace.sh
#!/bin/sh


for file in `grep -l -e sw.rl -e lw.aq -e aq.rl -e ld.aq -e sd.rl *.c`
# for file in SB+rfipaq-poaqps.c
do
    echo ${file}
    obj_file=`echo ${file} | sed 's/.c/.o/g'`
    func_name=`ag "int argc, " ${file} | cut -f2 -d' ' | cut -f1 -d'('`
    echo ${func_name}
    sed -i "s/${obj_file}/# ${obj_file}/g" Makefile
    sed -i "/${file}/d" src
    sed -i "s|^ *${func_name}|// ${func_name}|g" run.c
    sed -i "s|^extern int ${func_name}|// extern int ${func_name}|g" run.c
done
make GCC=riscv64-unknown-linux-gnu-gcc -j4

一応バイナリは生成されたようだが、実行する環境がない。もうちょっとベアメタルな環境で実行できるようにリトマステスト自体を変更して行こうかな。