AAPGを久しぶりに触っている。久しぶりにテストパタンを動かして問題ないことを確認したので、もうちょっと命令範囲を拡張することにした。
https://gitlab.com/shaktiproject/tools/aapg
現時点ではAAPGはFPU/RMW命令を生成するようになっていない。config.yaml
を変更してこれらの命令も生成するように変更した。
diff --git a/tests/aapg/work/config.yaml b/tests/aapg/work/config.yaml index dcf7289..d74a2ce 100644 --- a/tests/aapg/work/config.yaml +++ b/tests/aapg/work/config.yaml @@ -47,12 +47,12 @@ isa-instruction-distribution: rel_rv64i.data: 10 rel_rv32m: 5 rel_rv64m: 5 - rel_rv32a: 0 - rel_rv64a: 0 - rel_rv32f: 0 - rel_rv64f: 0 - rel_rv32d: 0 - rel_rv64d: 0 + rel_rv32a: 5 + rel_rv64a: 5 + rel_rv32f: 5 + rel_rv64f: 5 + rel_rv32d: 5 + rel_rv64d: 5 # Compressed instructions @@ -60,21 +60,21 @@ isa-instruction-distribution: rel_rvc.compute: 10 rel_rvc.sp: 10 rel_rvc.data: 10 - rel_rvc.fdata: 0 + rel_rvc.fdata: 10 rel_rv32c.compute: 10 rel_rv32c.ctrl: 1 - rel_rv32c.fdata: 0 + rel_rv32c.fdata: 1 rel_rv64c.compute: 10 rel_rv64c.data: 10 float-rounding: - rne: 0 - rtz: 0 - rdn: 0 - rup: 0 - rmm: 0 + rne: 1 + rtz: 1 + rdn: 1 + rup: 1 + rmm: 1
Configurationを変更してテストパタンを再生した。
aapg gen --num_programs 100 make -C work -j20
これで自作CPU上でテストパタンを動かした。すべてのパタンでFailしてしまったが、すべてFPU命令の結果が問題のようだ。 デバッグしていこう。
config_00092.rv64imafdc.tiny.log:446-========================================== config_00092.rv64imafdc.tiny.log:447:Wrong FPR[19](29): RTL = ffffffff4c6b10df, ISS = ffffffff7fc00000 config_00093.rv64imafdc.tiny.log:490-GPR[15](47) <= 0000000000000000 config_00093.rv64imafdc.tiny.log:491-20271 : 167 : PC=[0000000080000450] (M,15,01) 00aba1d3 fadd.s ft3, fs7, fa0 config_00093.rv64imafdc.tiny.log:492-========================================== config_00093.rv64imafdc.tiny.log:493:Wrong FPR[03](24): RTL = ffffffffb44ae9cc, ISS = ffffffff7fc00000 config_00094.rv64imafdc.tiny.log:283-GPR[06](43) <= ffffffff9c79dc6a config_00094.rv64imafdc.tiny.log:284-19981 : 105 : PC=[0000000080000386] (M,06,01) c024a7d3 fcvt.l.s a5, fs1 config_00094.rv64imafdc.tiny.log:285-========================================== config_00094.rv64imafdc.tiny.log:286:Wrong GPR[15](42): RTL = fffffffffe613f1e, ISS = 7fffffffffffffff config_00095.rv64imafdc.tiny.log:321-MW4(0x0000000080093d14)=>0000000080100940 config_00095.rv64imafdc.tiny.log:322-20015 : 126 : PC=[00000000800003ca] (M,06,01) c03b9fd3 fcvt.lu.s t6, fs7 config_00095.rv64imafdc.tiny.log:323-========================================== config_00095.rv64imafdc.tiny.log:324:Wrong GPR[31](5): RTL = 0000000000000000, ISS = ffffffffffffffff config_00096.rv64imafdc.tiny.log:294-MW4(0x00000000800929b0)=>00000000b79167cd config_00096.rv64imafdc.tiny.log:295-19984 : 115 : PC=[00000000800003a6] (M,14,02) c03b8e53 fcvt.lu.s t3, fs7 config_00096.rv64imafdc.tiny.log:296-========================================== config_00096.rv64imafdc.tiny.log:297:Wrong GPR[28](43): RTL = 0000000000000000, ISS = ffffffffffffffff config_00097.rv64imafdc.tiny.log:282-GPR[11](44) <= 0000000000000001 config_00097.rv64imafdc.tiny.log:283-19983 : 107 : PC=[000000008000038a] (M,07,01) c03314d3 fcvt.lu.s s1, ft6 config_00097.rv64imafdc.tiny.log:284-========================================== config_00097.rv64imafdc.tiny.log:285:Wrong GPR[09](42): RTL = 0000000000000000, ISS = ffffffffffffffff config_00098.rv64imafdc.tiny.log:301-80010 : EVict ISS Check : 80092630 : 7947df47_3b1752e1_684136de_1972e8d7 config_00098.rv64imafdc.tiny.log:302-20002 : 111 : PC=[000000008000039a] (M,10,01) 08caba53 fsub.s fs4, fs5, fa2 config_00098.rv64imafdc.tiny.log:303-========================================== config_00098.rv64imafdc.tiny.log:304:Wrong FPR[20](25): RTL = ffffffff729f8a13, ISS = ffffffff7fc00000 config_00099.rv64imafdc.tiny.log:289-GPR[15](30) <= 43377731cbef2527 config_00099.rv64imafdc.tiny.log:290-19996 : 107 : PC=[000000008000038c] (M,07,02) c036afd3 fcvt.lu.s t6, fa3 config_00099.rv64imafdc.tiny.log:291-========================================== config_00099.rv64imafdc.tiny.log:292:Wrong GPR[31](44): RTL = 0000000000000000, ISS = ffffffffffffffff