AAPGの続き。もう少し複雑な命令を生成してみる。config.yaml
を以下のように変更してみた。
isa-instruction-distribution: rel_sys: 0 rel_sys.csr: 1 rel_rv32i.ctrl: 0 rel_rv32i.compute: 1 rel_rv32i.data: 1 rel_rv32i.fence: 1 rel_rv64i.compute: 1 rel_rv64i.data: 1 rel_rv32m: 1 rel_rv64m: 1 rel_rv32a: 0 rel_rv64a: 0 rel_rv32f: 0 rel_rv64f: 0 rel_rv32d: 0 rel_rv64d: 0
rel_rv32i.compute
のみが1に設定されていたが、それ以外の命令を出力するようにしてみた。
このようにして生成されたファイルは以下のような感じだ。CSR命令、ロードストア、算術演算命令、乗除算命令がまんべんなく生成される。
i000000000c: lb t2, -1854(sp) i000000000d: lbu gp, -1511(sp) la sp, begin_signature li t1, 9912 add sp, sp, t1 i000000000e: sd t1, 2008(sp) i000000000f: slliw a5, s11, 17 i0000000010: csrrwi t6, 3430, 2 i0000000011: sw s5, 568(sp) i0000000012: sra s3, s1, a6 i0000000013: div s1, t5, a7 i0000000014: mul t1, t4, s5 i0000000015: mulh t1, tp, s8 i0000000016: sllw s1, t3, t5 i0000000017: or zero, a6, s2 i0000000018: sub s3, t1, t6 i0000000019: sb a4, -2036(sp) i000000001a: sraiw t5, s4, 16 i000000001b: sraiw s3, t1, 23 i000000001c: divw a6, s0, s5 i000000001d: fence i000000001e: fence la sp, begin_signature li t1, 13544
これを自作CPUで実行してみるとどのようになるのか試してみたが、案の定エラーとなった。これはデバッグだな...
例えばこういう、定義されていないCSRレジスタへのアクセス命令もちゃんと取り扱わないといけない...
18781 : 57 : PC=[00000000800004c4] (M,11,01) b4010113 addi sp, sp, -1216 GPR[02](33) <= 0000000080091000 18782 : 58 : PC=[00000000800004c8] (M,12,01) 00003337 lui t1, 0x3 GPR[06](28) <= 0000000000003000 18783 : 59 : PC=[00000000800004cc] (M,13,01) a603031b addiw t1, t1, -1440 GPR[06](29) <= 0000000000002a60 18788 : 60 : PC=[00000000800004d0] (M,14,01) 00610133 add sp, sp, t1 GPR[02](30) <= 0000000080093a60 18789 : 61 : PC=[00000000800004d4] (M,15,01) 00a00f93 li t6, 10 GPR[31](25) <= 000000000000000a 18795 : RTL(0,1) Exception Cause = 27 PC=0000800004d8, Inst=a293aff3, csrrs t6, unknown_a29, t2 18795 : 61 : PC=[00000000800004d8] (M,00,01) a293aff3 csrrs t6, unknown_a29, t2 ========================================== Wrong PC: RTL = 00000000800004d8, ISS = 0000000080000360 ========================================== =============================== SIMULATION FINISH : FAIL (CODE=100) ===============================
仕事が増えた。
