RISC-Vのオブジェクトファイルから使用している命令を抜き出す手順
レイトレーサを動かすために足りない命令一覧を作りたいので、MinCamlがコンパイルした min-rt.s から命令一覧を抜き出してみる。
アセンブリコードからオブジェクトファイルを作成
以下のコマンドで、オブジェクトファイル min-rt.o が生成される
code:sh
$ riscv64-unknown-elf-gcc -c min-rt.s
code:sh
$ riscv64-unknown-elf-objdump -d min-rt.o > disassembly.txt
$ cat disassembly.txt | sort | uniq > /tmp/a
/tmp/a から手作業でラベルを除去し、awk で命令を抜き出す。
code:sh
$ awk '{print $3}' /tmp/a | sort | uniq -c | sort -nr
1012 mv
645 lw
631 auipc
621 addi
553 flw
449 sw
298 jalr
288 fsw
233 li
155 fmul.s
119 bne
105 lui
100 j
95 ret
78 fadd.s
46 fsub.s
36 fmv.s
34 fle.s
24 fdiv.s
19 slli
19 fneg.s
19 add
12 neg
8 feq.s
7 blt
2
1 nop
足りない命令
通常の命令
auipc
bne
blt
slli
mv(擬似命令)
li(擬似命令)
j(擬似命令)
ret(擬似命令)
neg(擬似命令)
emit.ml にいるから足しとこうかな
ble
bne
ble
blt
bgt
bge
浮動小数点数系
flw
fsw
feq.s
fneg.s
fdiv.s
fle.s
fmv.s
fsub.s
fadd.s
fmul.s