とりあえずChipyardで以下のようにしてテストベンチを動かせば良かろう。vcdの出力はrv32ua-v-amoadd_d.vcd
に行われる。
./simulator-chipyard-RocketConfig-debug +verbose -v rv32ua-v-amoadd_d.vcd ${RISCV}/riscv64-unknown-elf/share/riscv-tests/isa/rv64ua-p-amoadd_d 2>&1 | spike-dasm | tee rv64ua-p-amoadd_d.rocket.log
ログを見てみると、amoadd.d
を2回実行している。あれ、2回だけなの?
C0: 410 [1] pc=[0000000080000180] W[r10=ffffffff80000000][1] R[r 0=0000000000000000] R[r 0=0000000000000000] inst=[80000537] lui a0, 0x80000 C0: 411 [1] pc=[0000000080000184] W[r11=fffffffffffff800][1] R[r 0=0000000000000000] R[r 0=0000000000000000] inst=[80000593] li a1, -2048 C0: 412 [1] pc=[0000000080000188] W[r13=0000000080002188][1] R[r 0=0000000000000000] R[r 0=0000000000000000] inst=[00002697] auipc a3, 0x2 C0: 413 [1] pc=[000000008000018c] W[r13=0000000080002000][1] R[r13=0000000080002188] R[r 0=0000000000000000] inst=[e7868693] addi a3, a3, -392 C0: 430 [1] pc=[0000000080000190] W[r 0=0000000000000000][0] R[r13=0000000080002000] R[r10=ffffffff80000000] inst=[00a6b023] sd a0, 0(a3) C0: 436 [1] pc=[0000000080000194] W[r14=ffffffff80000000][1] R[r13=0000000080002000] R[r11=fffffffffffff800] inst=[00b6b72f] amoadd.d a4, a1, (a3) C0: 437 [1] pc=[0000000080000198] W[r 7=ffffffff80000000][1] R[r 0=0000000000000000] R[r 0=0000000000000000] inst=[800003b7] lui t2, 0x80000 C0: 438 [1] pc=[000000008000019c] W[r 3=0000000000000002][1] R[r 0=0000000000000000] R[r 0=0000000000000000] inst=[00200193] li gp, 2 C0: 439 [1] pc=[00000000800001a0] W[r 0=0000000000000000][0] R[r14=ffffffff80000000] R[r 7=ffffffff80000000] inst=[04771863] bne a4, t2, pc + 80 C0: 440 [1] pc=[00000000800001a4] W[r15=ffffffff7ffff800][1] R[r13=0000000080002000] R[r 0=0000000000000000] inst=[0006b783] ld a5, 0(a3) C0: 441 [1] pc=[00000000800001a8] W[r 7=ffffffffffffffff][1] R[r 0=0000000000000000] R[r 0=0000000000000000] inst=[fff0039b] addiw t2, zero, -1 C0: 442 [1] pc=[00000000800001ac] W[r 7=ffffffff80000000][1] R[r 7=ffffffffffffffff] R[r 0=0000000000000000] inst=[01f39393] slli t2, t2, 31 C0: 443 [1] pc=[00000000800001b0] W[r 7=ffffffff7ffff800][1] R[r 7=ffffffff80000000] R[r 0=0000000000000000] inst=[80038393] addi t2, t2, -2048 C0: 444 [1] pc=[00000000800001b4] W[r 3=0000000000000003][1] R[r 0=0000000000000000] R[r 0=0000000000000000] inst=[00300193] li gp, 3 C0: 445 [1] pc=[00000000800001b8] W[r 0=0000000000000000][0] R[r15=ffffffff7ffff800] R[r 7=ffffffff7ffff800] inst=[02779c63] bne a5, t2, pc + 56 C0: 446 [1] pc=[00000000800001bc] W[r14=ffffffff7ffff800][1] R[r13=0000000080002000] R[r11=fffffffffffff800] inst=[00b6b72f] amoadd.d a4, a1, (a3) C0: 468 [1] pc=[00000000800001c0] W[r 7=ffffffffffffffff][1] R[r 0=0000000000000000] R[r 0=0000000000000000] inst=[fff0039b] addiw t2, zero, -1 C0: 469 [1] pc=[00000000800001c4] W[r 7=ffffffff80000000][1] R[r 7=ffffffffffffffff] R[r 0=0000000000000000] inst=[01f39393] slli t2, t2, 31 C0: 470 [1] pc=[00000000800001c8] W[r 7=ffffffff7ffff800][1] R[r 7=ffffffff80000000] R[r 0=0000000000000000] inst=[80038393] addi t2, t2, -2048 C0: 471 [1] pc=[00000000800001cc] W[r 3=0000000000000004][1] R[r 0=0000000000000000] R[r 0=0000000000000000] inst=[00400193] li gp, 4
おそらくこの辺りだと思われる。波形を詳細に見ていきたい。