udb 0.1.14 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.data/cfgs/example_rv64_with_overlay.yaml +6 -6
- data/.data/cfgs/mc100-32-full-example.yaml +3 -2
- data/.data/cfgs/profile/RVA20S64.yaml +2 -0
- data/.data/cfgs/profile/RVA20U64.yaml +2 -0
- data/.data/cfgs/profile/RVA22S64.yaml +2 -0
- data/.data/cfgs/profile/RVA22U64.yaml +2 -0
- data/.data/cfgs/profile/RVA23S64.yaml +2 -0
- data/.data/cfgs/profile/RVA23U64.yaml +2 -0
- data/.data/cfgs/profile/RVB23S64.yaml +2 -0
- data/.data/cfgs/profile/RVB23U64.yaml +2 -0
- data/.data/cfgs/qc_iu.yaml +3 -2
- data/.data/cfgs/rv32-riscv-tests.yaml +5 -4
- data/.data/cfgs/rv32-vector.yaml +5 -4
- data/.data/cfgs/rv64-riscv-tests.yaml +5 -4
- data/.data/cfgs/rv64-vector.yaml +5 -4
- data/.data/spec/schemas/README.adoc +3 -0
- data/.data/spec/schemas/schema_defs.json +3 -3
- data/.data/spec/std/isa/csr/H/hcounteren.layout +3 -3
- data/.data/spec/std/isa/csr/H/hcounteren.yaml +31 -31
- data/.data/spec/std/isa/csr/H/henvcfg.yaml +1 -1
- data/.data/spec/std/isa/csr/H/htimedeltah.yaml +1 -1
- data/.data/spec/std/isa/csr/H/htinst.yaml +3 -3
- data/.data/spec/std/isa/csr/H/htval.yaml +3 -3
- data/.data/spec/std/isa/csr/H/mtinst.yaml +1 -1
- data/.data/spec/std/isa/csr/Smcntrpmf/mcyclecfg.yaml +1 -1
- data/.data/spec/std/isa/csr/Smcntrpmf/mcyclecfgh.yaml +1 -1
- data/.data/spec/std/isa/csr/Smcntrpmf/minstretcfg.yaml +1 -1
- data/.data/spec/std/isa/csr/Smcntrpmf/minstretcfgh.yaml +1 -1
- data/.data/spec/std/isa/csr/Smctr/vsctrctl.yaml +1 -1
- data/.data/spec/std/isa/csr/Sscofpmf/scountovf.layout +1 -1
- data/.data/spec/std/isa/csr/Sscofpmf/scountovf.yaml +29 -29
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter10.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter10h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter11.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter11h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter12.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter12h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter13.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter13h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter14.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter14h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter15.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter15h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter16.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter16h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter17.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter17h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter18.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter18h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter19.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter19h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter20.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter20h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter21.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter21h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter22.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter22h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter23.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter23h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter24.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter24h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter25.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter25h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter26.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter26h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter27.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter27h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter28.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter28h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter29.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter29h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter3.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter30.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter30h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter31.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter31h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter3h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter4.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter4h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter5.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter5h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter6.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter6h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter7.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter7h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter8.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter8h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter9.yaml +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounter9h.yaml +1 -1
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounterN.layout +4 -4
- data/.data/spec/std/isa/csr/Zihpm/mhpmcounterNh.layout +1 -1
- data/.data/spec/std/isa/csr/hstateen0h.yaml +1 -1
- data/.data/spec/std/isa/csr/hstateen1h.yaml +1 -1
- data/.data/spec/std/isa/csr/hstateen2h.yaml +1 -1
- data/.data/spec/std/isa/csr/hstateen3h.yaml +1 -1
- data/.data/spec/std/isa/csr/hstatus.yaml +1 -1
- data/.data/spec/std/isa/csr/instreth.yaml +1 -3
- data/.data/spec/std/isa/csr/mcycle.yaml +6 -6
- data/.data/spec/std/isa/csr/minstret.yaml +3 -3
- data/.data/spec/std/isa/csr/minstreth.yaml +2 -2
- data/.data/spec/std/isa/csr/mstatus.yaml +14 -20
- data/.data/spec/std/isa/csr/mstatush.yaml +1 -1
- data/.data/spec/std/isa/csr/mtvec.yaml +16 -57
- data/.data/spec/std/isa/csr/senvcfg.yaml +1 -1
- data/.data/spec/std/isa/csr/sepc.yaml +4 -3
- data/.data/spec/std/isa/csr/sie.yaml +30 -4
- data/.data/spec/std/isa/csr/sip.yaml +17 -3
- data/.data/spec/std/isa/csr/sscratch.yaml +3 -2
- data/.data/spec/std/isa/csr/stval.yaml +3 -2
- data/.data/spec/std/isa/csr/stvec.yaml +14 -14
- data/.data/spec/std/isa/csr/time.yaml +1 -1
- data/.data/spec/std/isa/csr/timeh.yaml +1 -1
- data/.data/spec/std/isa/csr/vsepc.yaml +6 -5
- data/.data/spec/std/isa/csr/vstval.yaml +1 -1
- data/.data/spec/std/isa/csr/vstvec.yaml +17 -17
- data/.data/spec/std/isa/ext/M.yaml +4 -0
- data/.data/spec/std/isa/ext/Q.yaml +1 -1
- data/.data/spec/std/isa/ext/Shgatpa.yaml +1 -0
- data/.data/spec/std/isa/ext/Shlcofideleg.yaml +24 -0
- data/.data/spec/std/isa/ext/Shvstvecd.yaml +2 -2
- data/.data/spec/std/isa/ext/Sspm.yaml +5 -0
- data/.data/spec/std/isa/ext/Sstvecd.yaml +2 -2
- data/.data/spec/std/isa/ext/Sstvecv.yaml +2 -2
- data/.data/spec/std/isa/ext/Supm.yaml +17 -0
- data/.data/spec/std/isa/ext/Zcb.yaml +3 -0
- data/.data/spec/std/isa/ext/Zfbfmin.yaml +3 -5
- data/.data/spec/std/isa/ext/Zibi.yaml +29 -0
- data/.data/spec/std/isa/ext/Ziccid.yaml +29 -0
- data/.data/spec/std/isa/ext/Zicfilp.yaml +5 -1
- data/.data/spec/std/isa/ext/Zicfiss.yaml +20 -1
- data/.data/spec/std/isa/ext/Zihpm.yaml +3 -0
- data/.data/spec/std/isa/ext/Zilx.yaml +58 -0
- data/.data/spec/std/isa/ext/Zkt.yaml +33 -1
- data/.data/spec/std/isa/ext/Zvabd.yaml +21 -0
- data/.data/spec/std/isa/ext/Zvbc.yaml +3 -0
- data/.data/spec/std/isa/ext/Zvkb.yaml +3 -0
- data/.data/spec/std/isa/ext/Zvkg.yaml +3 -0
- data/.data/spec/std/isa/ext/Zvkned.yaml +3 -0
- data/.data/spec/std/isa/ext/Zvknha.yaml +3 -0
- data/.data/spec/std/isa/ext/Zvknhb.yaml +4 -2
- data/.data/spec/std/isa/ext/Zvksed.yaml +3 -0
- data/.data/spec/std/isa/ext/Zvksh.yaml +3 -0
- data/.data/spec/std/isa/ext/Zvkt.yaml +3 -0
- data/.data/spec/std/isa/inst/B/roriw.yaml +1 -1
- data/.data/spec/std/isa/inst/B/rorw.yaml +1 -1
- data/.data/spec/std/isa/inst/C/c.add.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.addi.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.addiw.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.addw.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.and.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.andi.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.lui.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.mv.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.nop.yaml +13 -2
- data/.data/spec/std/isa/inst/C/c.or.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.slli.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.srai.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.srli.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.sub.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.subw.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.xor.yaml +1 -0
- data/.data/spec/std/isa/inst/D/fld.yaml +1 -0
- data/.data/spec/std/isa/inst/D/fsd.yaml +1 -0
- data/.data/spec/std/isa/inst/F/fadd.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.l.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.lu.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.s.l.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.s.lu.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.s.wu.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.w.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fcvt.wu.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fdiv.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/feq.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fle.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/flt.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/flw.yaml +2 -1
- data/.data/spec/std/isa/inst/F/fmadd.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fmax.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fmin.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fmsub.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fmul.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fmv.w.x.yaml +4 -1
- data/.data/spec/std/isa/inst/F/fmv.x.w.yaml +4 -1
- data/.data/spec/std/isa/inst/F/fnmadd.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fnmsub.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fsgnj.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fsgnjn.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fsgnjx.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fsqrt.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fsub.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fsw.yaml +2 -1
- data/.data/spec/std/isa/inst/I/sd.yaml +1 -1
- data/.data/spec/std/isa/inst/M/mul.yaml +1 -3
- data/.data/spec/std/isa/inst/M/mulh.yaml +1 -3
- data/.data/spec/std/isa/inst/M/mulhsu.yaml +1 -3
- data/.data/spec/std/isa/inst/M/mulhu.yaml +1 -3
- data/.data/spec/std/isa/inst/M/mulw.yaml +1 -3
- data/.data/spec/std/isa/inst/Q/fadd.q.yaml +2 -2
- data/.data/spec/std/isa/inst/Q/fclass.q.yaml +5 -5
- data/.data/spec/std/isa/inst/Q/flq.yaml +1 -0
- data/.data/spec/std/isa/inst/Q/fsq.yaml +1 -0
- data/.data/spec/std/isa/inst/V/vmv.v.i.yaml +1 -0
- data/.data/spec/std/isa/inst/Zbb/ctzw.yaml +6 -1
- data/.data/spec/std/isa/inst/Zcb/c.mul.yaml +1 -0
- data/.data/spec/std/isa/inst/Zcb/c.not.yaml +1 -0
- data/.data/spec/std/isa/inst/Zcb/c.zext.b.yaml +2 -7
- data/.data/spec/std/isa/inst/Zcb/c.zext.w.yaml +1 -1
- data/.data/spec/std/isa/inst/Zcmop/c.mop.1.yaml +2 -0
- data/.data/spec/std/isa/inst/Zcmop/c.mop.5.yaml +2 -0
- data/.data/spec/std/isa/inst/Zcmop/c.mop.N.layout +7 -0
- data/.data/spec/std/isa/inst/{Q → Zfa}/fleq.q.yaml +0 -1
- data/.data/spec/std/isa/inst/{F → Zfa}/fleq.s.yaml +1 -1
- data/.data/spec/std/isa/inst/{Q → Zfa}/fli.q.yaml +1 -1
- data/.data/spec/std/isa/inst/Zfa/fli.s.yaml +1 -1
- data/.data/spec/std/isa/inst/{Q → Zfa}/fltq.q.yaml +2 -3
- data/.data/spec/std/isa/inst/{F → Zfa}/fltq.s.yaml +1 -1
- data/.data/spec/std/isa/inst/{Q → Zfa}/fmaxm.q.yaml +0 -1
- data/.data/spec/std/isa/inst/Zfa/fmaxm.s.yaml +1 -1
- data/.data/spec/std/isa/inst/{Q → Zfa}/fminm.q.yaml +0 -1
- data/.data/spec/std/isa/inst/Zfa/fminm.s.yaml +1 -1
- data/.data/spec/std/isa/inst/{Q → Zfa}/fmvp.q.x.yaml +1 -1
- data/.data/spec/std/isa/inst/Zfa/fround.s.yaml +1 -1
- data/.data/spec/std/isa/inst/Zfa/froundnx.s.yaml +1 -1
- data/.data/spec/std/isa/inst/Zfh/flh.yaml +5 -2
- data/.data/spec/std/isa/inst/Zfh/fmv.h.x.yaml +3 -1
- data/.data/spec/std/isa/inst/Zfh/fmv.x.h.yaml +3 -1
- data/.data/spec/std/isa/inst/Zfh/fsh.yaml +4 -1
- data/.data/spec/std/isa/inst/Zibi/beqi.yaml +45 -0
- data/.data/spec/std/isa/inst/Zibi/bnei.yaml +45 -0
- data/.data/spec/std/isa/inst/Zicbom/cbo.inval.yaml +1 -1
- data/.data/spec/std/isa/inst/Zicfiss/c.sspopchk.yaml +30 -0
- data/.data/spec/std/isa/inst/Zicfiss/c.sspush.yaml +29 -0
- data/.data/spec/std/isa/inst/Zicfiss/ssamoswap.d.yaml +1 -1
- data/.data/spec/std/isa/inst/Zicfiss/ssamoswap.w.yaml +1 -1
- data/.data/spec/std/isa/inst/Zicfiss/sspopchk.yaml +63 -0
- data/.data/spec/std/isa/inst/Zicfiss/sspush.yaml +63 -0
- data/.data/spec/std/isa/inst/Zicond/czero.eqz.yaml +1 -1
- data/.data/spec/std/isa/inst/Zicond/czero.nez.yaml +1 -1
- data/.data/spec/std/isa/inst/Zicsr/csrrw.yaml +12 -0
- data/.data/spec/std/isa/inst/Zilx/lxd.yaml +38 -0
- data/.data/spec/std/isa/inst/Zilx/lxh.yaml +35 -0
- data/.data/spec/std/isa/inst/Zilx/lxhu.yaml +35 -0
- data/.data/spec/std/isa/inst/Zilx/lxsb.yaml +40 -0
- data/.data/spec/std/isa/inst/Zilx/lxsbu.yaml +40 -0
- data/.data/spec/std/isa/inst/Zilx/lxsd.yaml +38 -0
- data/.data/spec/std/isa/inst/Zilx/lxsh.yaml +35 -0
- data/.data/spec/std/isa/inst/Zilx/lxshu.yaml +35 -0
- data/.data/spec/std/isa/inst/Zilx/lxsuwb.yaml +40 -0
- data/.data/spec/std/isa/inst/Zilx/lxsuwbu.yaml +40 -0
- data/.data/spec/std/isa/inst/Zilx/lxsuwd.yaml +39 -0
- data/.data/spec/std/isa/inst/Zilx/lxsuwh.yaml +40 -0
- data/.data/spec/std/isa/inst/Zilx/lxsuwhu.yaml +40 -0
- data/.data/spec/std/isa/inst/Zilx/lxsuww.yaml +40 -0
- data/.data/spec/std/isa/inst/Zilx/lxsuwwu.yaml +40 -0
- data/.data/spec/std/isa/inst/Zilx/lxsw.yaml +35 -0
- data/.data/spec/std/isa/inst/Zilx/lxswu.yaml +39 -0
- data/.data/spec/std/isa/inst/Zilx/lxw.yaml +35 -0
- data/.data/spec/std/isa/inst/Zilx/lxwu.yaml +39 -0
- data/.data/spec/std/isa/inst/Zimop/mop.r.28.yaml +1 -2
- data/.data/spec/std/isa/inst/Zimop/mop.r.N.layout +1 -2
- data/.data/spec/std/isa/inst/Zimop/mop.rr.7.yaml +1 -2
- data/.data/spec/std/isa/inst/Zimop/mop.rr.N.layout +1 -2
- data/.data/spec/std/isa/inst/Zvabd/vabd.vv.yaml +67 -0
- data/.data/spec/std/isa/inst/Zvabd/vabdu.vv.yaml +67 -0
- data/.data/spec/std/isa/inst/Zvabd/vabs.v.yaml +61 -0
- data/.data/spec/std/isa/inst/Zvabd/vwabda.vv.yaml +72 -0
- data/.data/spec/std/isa/inst/Zvabd/vwabdau.vv.yaml +72 -0
- data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vandn.vv.yaml +1 -1
- data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vandn.vx.yaml +1 -1
- data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vbrev8.v.yaml +1 -1
- data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vrev8.v.yaml +1 -1
- data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vrol.vv.yaml +1 -1
- data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vrol.vx.yaml +1 -1
- data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vror.vi.yaml +1 -1
- data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vror.vv.yaml +1 -1
- data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vror.vx.yaml +1 -1
- data/.data/spec/std/isa/isa/fp.idl +42 -18
- data/.data/spec/std/isa/isa/globals.isa +1 -1
- data/.data/spec/std/isa/isa/util.idl +3 -3
- data/.data/spec/std/isa/param/CACHE_BLOCK_SIZE.yaml +70 -6
- data/.data/spec/std/isa/param/COUNTINHIBIT_EN.yaml +9 -0
- data/.data/spec/std/isa/param/ELEN.yaml +27 -5
- data/.data/spec/std/isa/param/HCONTEXT_AVAILABLE.yaml +1 -1
- data/.data/spec/std/isa/param/HCOUNTENABLE_EN.yaml +13 -0
- data/.data/spec/std/isa/param/HPM_COUNTER_EN.yaml +13 -3
- data/.data/spec/std/isa/param/HPM_EVENTS.yaml +0 -3
- data/.data/spec/std/isa/param/MCOUNTENABLE_EN.yaml +8 -0
- data/.data/spec/std/isa/param/MTVEC_BASE_ALIGNMENT_DIRECT.yaml +71 -65
- data/.data/spec/std/isa/param/MTVEC_BASE_ALIGNMENT_VECTORED.yaml +71 -65
- data/.data/spec/std/isa/param/MUTABLE_MISA_H.yaml +1 -1
- data/.data/spec/std/isa/param/MUTABLE_MISA_S.yaml +1 -1
- data/.data/spec/std/isa/param/STVAL_WIDTH.yaml +3 -2
- data/.data/spec/std/isa/param/STVEC_BASE_ALIGNMENT_VECTORED.yaml +100 -0
- data/.data/spec/std/isa/param/STVEC_MODES.yaml +31 -0
- data/.data/spec/std/isa/param/SV32_VSMODE_TRANSLATION.yaml +1 -1
- data/.data/spec/std/isa/param/SXLEN.yaml +2 -2
- data/.data/spec/std/isa/param/TINST_VALUE_ON_FINAL_INSTRUCTION_GUEST_PAGE_FAULT.yaml +1 -1
- data/.data/spec/std/isa/param/TINST_VALUE_ON_FINAL_LOAD_GUEST_PAGE_FAULT.yaml +1 -1
- data/.data/spec/std/isa/param/TINST_VALUE_ON_FINAL_STORE_AMO_GUEST_PAGE_FAULT.yaml +1 -1
- data/.data/spec/std/isa/param/TINST_VALUE_ON_LOAD_ADDRESS_MISALIGNED.yaml +1 -1
- data/.data/spec/std/isa/param/TINST_VALUE_ON_STORE_AMO_ADDRESS_MISALIGNED.yaml +1 -1
- data/.data/spec/std/isa/param/UXLEN.yaml +1 -1
- data/.data/spec/std/isa/param/VLEN.yaml +16 -7
- data/.data/spec/std/isa/param/VSTVEC_MODES.yaml +31 -0
- data/lib/udb/Z3_VERSION +1 -1
- data/lib/udb/config.rb +1 -1
- data/lib/udb/obj/csr.rb +1 -1
- data/lib/udb/obj/csr_field.rb +1 -1
- data/lib/udb/obj/extension.rb +1 -1
- data/lib/udb/version.rb +1 -1
- data/lib/udb/version_spec.rb +1 -1
- data/lib/udb/z3.rb +29 -7
- metadata +80 -50
- data/.data/spec/std/isa/inst/Zicfiss/sspopchk.x1.yaml +0 -25
- data/.data/spec/std/isa/inst/Zicfiss/sspopchk.x5.yaml +0 -25
- data/.data/spec/std/isa/inst/Zicfiss/sspush.x1.yaml +0 -25
- data/.data/spec/std/isa/inst/Zicfiss/sspush.x5.yaml +0 -25
- data/.data/spec/std/isa/param/STVEC_MODE_DIRECT.yaml +0 -21
- data/.data/spec/std/isa/param/STVEC_MODE_VECTORED.yaml +0 -19
- data/.data/spec/std/isa/param/VSTVEC_MODE_DIRECT.yaml +0 -21
- data/.data/spec/std/isa/param/VSTVEC_MODE_VECTORED.yaml +0 -21
- /data/.data/spec/std/isa/inst/{Smdbltrp → Smctr}/sctrclr.yaml +0 -0
- /data/.data/spec/std/isa/inst/{D → Zfa}/fcvtmod.w.d.yaml +0 -0
- /data/.data/spec/std/isa/inst/{D → Zfa}/fleq.d.yaml +0 -0
- /data/.data/spec/std/isa/inst/{Zfh → Zfa}/fleq.h.yaml +0 -0
- /data/.data/spec/std/isa/inst/{D → Zfa}/fli.d.yaml +0 -0
- /data/.data/spec/std/isa/inst/{Zfh → Zfa}/fli.h.yaml +0 -0
- /data/.data/spec/std/isa/inst/{D → Zfa}/fltq.d.yaml +0 -0
- /data/.data/spec/std/isa/inst/{Zfh → Zfa}/fltq.h.yaml +0 -0
- /data/.data/spec/std/isa/inst/{D → Zfa}/fmaxm.d.yaml +0 -0
- /data/.data/spec/std/isa/inst/{Zfh → Zfa}/fmaxm.h.yaml +0 -0
- /data/.data/spec/std/isa/inst/{D → Zfa}/fminm.d.yaml +0 -0
- /data/.data/spec/std/isa/inst/{Zfh → Zfa}/fminm.h.yaml +0 -0
- /data/.data/spec/std/isa/inst/{D → Zfa}/fmvh.x.d.yaml +0 -0
- /data/.data/spec/std/isa/inst/{Q → Zfa}/fmvh.x.q.yaml +0 -0
- /data/.data/spec/std/isa/inst/{D → Zfa}/fmvp.d.x.yaml +0 -0
- /data/.data/spec/std/isa/inst/{D → Zfa}/fround.d.yaml +0 -0
- /data/.data/spec/std/isa/inst/{Zfh → Zfa}/fround.h.yaml +0 -0
- /data/.data/spec/std/isa/inst/{Q → Zfa}/fround.q.yaml +0 -0
- /data/.data/spec/std/isa/inst/{D → Zfa}/froundnx.d.yaml +0 -0
- /data/.data/spec/std/isa/inst/{Zfh → Zfa}/froundnx.h.yaml +0 -0
- /data/.data/spec/std/isa/inst/{Q → Zfa}/froundnx.q.yaml +0 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Copyright (c) Alibaba Damo Academy
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../../schemas/inst_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "inst_schema.json#"
|
|
7
|
+
kind: instruction
|
|
8
|
+
name: vabd.vv
|
|
9
|
+
long_name: Vector Single-Width Signed Integer Absolute Difference
|
|
10
|
+
description: |
|
|
11
|
+
Computes the element-wise absolute difference of two signed integer SEW-bit
|
|
12
|
+
source operands vs1 and vs2 and writes the result to vd according to mask vm.
|
|
13
|
+
|
|
14
|
+
Reserved when SEW is neither 8 nor 16.
|
|
15
|
+
definedBy:
|
|
16
|
+
extension:
|
|
17
|
+
name: Zvabd
|
|
18
|
+
assembly: vd, vs2, vs1, vm
|
|
19
|
+
encoding:
|
|
20
|
+
match: 010001-----------010-----1010111
|
|
21
|
+
variables:
|
|
22
|
+
- name: vm
|
|
23
|
+
location: 25
|
|
24
|
+
- name: vs2
|
|
25
|
+
location: 24-20
|
|
26
|
+
- name: vs1
|
|
27
|
+
location: 19-15
|
|
28
|
+
- name: vd
|
|
29
|
+
location: 11-7
|
|
30
|
+
access:
|
|
31
|
+
s: always
|
|
32
|
+
u: always
|
|
33
|
+
vs: always
|
|
34
|
+
vu: always
|
|
35
|
+
operation(): |
|
|
36
|
+
VectorState state = vector_state();
|
|
37
|
+
|
|
38
|
+
if (state.sew != 8 && state.sew != 16) {
|
|
39
|
+
raise(ExceptionCode::IllegalInstruction, mode(), $encoding);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
VectorLmulType lmul_type = state.lmul_type;
|
|
43
|
+
|
|
44
|
+
XReg vlen = VLEN;
|
|
45
|
+
XReg vlmax;
|
|
46
|
+
if (lmul_type == VectorLmulType::Multiply) {
|
|
47
|
+
vlmax = (vlen << state.log2_lmul) >> state.log2_sew;
|
|
48
|
+
} else {
|
|
49
|
+
vlmax = (vlen >> state.log2_lmul) >> state.log2_sew;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
for (U32 i = CSR[vstart].VALUE; i < CSR[vl].VALUE; i++) {
|
|
53
|
+
U32 start_bit_pos = i * state.sew;
|
|
54
|
+
U32 end_bit_pos = start_bit_pos + state.sew - 1;
|
|
55
|
+
if (vm == 1'b1 || V[0][i:i] == 1'b1) {
|
|
56
|
+
# active element
|
|
57
|
+
if ($signed(V[vs2][end_bit_pos:start_bit_pos]) >= $signed(V[vs1][end_bit_pos:start_bit_pos])) {
|
|
58
|
+
V[vd][end_bit_pos:start_bit_pos] = V[vs2][end_bit_pos:start_bit_pos] - V[vs1][end_bit_pos:start_bit_pos];
|
|
59
|
+
} else {
|
|
60
|
+
V[vd][end_bit_pos:start_bit_pos] = V[vs1][end_bit_pos:start_bit_pos] - V[vs2][end_bit_pos:start_bit_pos];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
# inactive element: handled according to vtype.VMA policy
|
|
64
|
+
}
|
|
65
|
+
# tail elements (i >= vl): handled according to vtype.VTA policy
|
|
66
|
+
|
|
67
|
+
CSR[vstart].VALUE = 0;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Copyright (c) Alibaba Damo Academy
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../../schemas/inst_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "inst_schema.json#"
|
|
7
|
+
kind: instruction
|
|
8
|
+
name: vabdu.vv
|
|
9
|
+
long_name: Vector Single-Width Unsigned Integer Absolute Difference
|
|
10
|
+
description: |
|
|
11
|
+
Computes the element-wise absolute difference of two unsigned integer SEW-bit
|
|
12
|
+
source operands vs1 and vs2 and writes the result to vd according to mask vm.
|
|
13
|
+
|
|
14
|
+
Reserved when SEW is neither 8 nor 16.
|
|
15
|
+
definedBy:
|
|
16
|
+
extension:
|
|
17
|
+
name: Zvabd
|
|
18
|
+
assembly: vd, vs2, vs1, vm
|
|
19
|
+
encoding:
|
|
20
|
+
match: 010011-----------010-----1010111
|
|
21
|
+
variables:
|
|
22
|
+
- name: vm
|
|
23
|
+
location: 25
|
|
24
|
+
- name: vs2
|
|
25
|
+
location: 24-20
|
|
26
|
+
- name: vs1
|
|
27
|
+
location: 19-15
|
|
28
|
+
- name: vd
|
|
29
|
+
location: 11-7
|
|
30
|
+
access:
|
|
31
|
+
s: always
|
|
32
|
+
u: always
|
|
33
|
+
vs: always
|
|
34
|
+
vu: always
|
|
35
|
+
operation(): |
|
|
36
|
+
VectorState state = vector_state();
|
|
37
|
+
|
|
38
|
+
if (state.sew != 8 && state.sew != 16) {
|
|
39
|
+
raise(ExceptionCode::IllegalInstruction, mode(), $encoding);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
VectorLmulType lmul_type = state.lmul_type;
|
|
43
|
+
|
|
44
|
+
XReg vlen = VLEN;
|
|
45
|
+
XReg vlmax;
|
|
46
|
+
if (lmul_type == VectorLmulType::Multiply) {
|
|
47
|
+
vlmax = (vlen << state.log2_lmul) >> state.log2_sew;
|
|
48
|
+
} else {
|
|
49
|
+
vlmax = (vlen >> state.log2_lmul) >> state.log2_sew;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
for (U32 i = CSR[vstart].VALUE; i < CSR[vl].VALUE; i++) {
|
|
53
|
+
U32 start_bit_pos = i * state.sew;
|
|
54
|
+
U32 end_bit_pos = start_bit_pos + state.sew - 1;
|
|
55
|
+
if (vm == 1'b1 || V[0][i:i] == 1'b1) {
|
|
56
|
+
# active element
|
|
57
|
+
if (V[vs2][end_bit_pos:start_bit_pos] >= V[vs1][end_bit_pos:start_bit_pos]) {
|
|
58
|
+
V[vd][end_bit_pos:start_bit_pos] = V[vs2][end_bit_pos:start_bit_pos] - V[vs1][end_bit_pos:start_bit_pos];
|
|
59
|
+
} else {
|
|
60
|
+
V[vd][end_bit_pos:start_bit_pos] = V[vs1][end_bit_pos:start_bit_pos] - V[vs2][end_bit_pos:start_bit_pos];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
# inactive element: handled according to vtype.VMA policy
|
|
64
|
+
}
|
|
65
|
+
# tail elements (i >= vl): handled according to vtype.VTA policy
|
|
66
|
+
|
|
67
|
+
CSR[vstart].VALUE = 0;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Copyright (c) Alibaba Damo Academy
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../../schemas/inst_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "inst_schema.json#"
|
|
7
|
+
kind: instruction
|
|
8
|
+
name: vabs.v
|
|
9
|
+
long_name: Vector Single-Width Signed Integer Absolute
|
|
10
|
+
description: |
|
|
11
|
+
An absolute value operation is performed on each element of vs2, storing the
|
|
12
|
+
result in vector register vd according to mask vm.
|
|
13
|
+
|
|
14
|
+
vabs.v supports SEW of 8, 16, and 32 when Zve32x is implemented.
|
|
15
|
+
When Zve64x is implemented, vabs.v also supports SEW of 64.
|
|
16
|
+
definedBy:
|
|
17
|
+
extension:
|
|
18
|
+
name: Zvabd
|
|
19
|
+
assembly: vd, vs2, vm
|
|
20
|
+
encoding:
|
|
21
|
+
match: 010010------10000010-----1010111
|
|
22
|
+
variables:
|
|
23
|
+
- name: vm
|
|
24
|
+
location: 25
|
|
25
|
+
- name: vs2
|
|
26
|
+
location: 24-20
|
|
27
|
+
- name: vd
|
|
28
|
+
location: 11-7
|
|
29
|
+
access:
|
|
30
|
+
s: always
|
|
31
|
+
u: always
|
|
32
|
+
vs: always
|
|
33
|
+
vu: always
|
|
34
|
+
operation(): |
|
|
35
|
+
VectorState state = vector_state();
|
|
36
|
+
VectorLmulType lmul_type = state.lmul_type;
|
|
37
|
+
|
|
38
|
+
XReg vlen = VLEN;
|
|
39
|
+
XReg vlmax;
|
|
40
|
+
if (lmul_type == VectorLmulType::Multiply) {
|
|
41
|
+
vlmax = (vlen << state.log2_lmul) >> state.log2_sew;
|
|
42
|
+
} else {
|
|
43
|
+
vlmax = (vlen >> state.log2_lmul) >> state.log2_sew;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
for (U32 i = CSR[vstart].VALUE; i < CSR[vl].VALUE; i++) {
|
|
47
|
+
U32 start_bit_pos = i * state.sew;
|
|
48
|
+
U32 end_bit_pos = start_bit_pos + state.sew - 1;
|
|
49
|
+
if (vm == 1'b1 || V[0][i:i] == 1'b1) {
|
|
50
|
+
# active element
|
|
51
|
+
if (V[vs2][end_bit_pos:end_bit_pos] == 1'b1) {
|
|
52
|
+
V[vd][end_bit_pos:start_bit_pos] = -$signed(V[vs2][end_bit_pos:start_bit_pos]);
|
|
53
|
+
} else {
|
|
54
|
+
V[vd][end_bit_pos:start_bit_pos] = V[vs2][end_bit_pos:start_bit_pos];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
# inactive element: handled according to vtype.VMA policy
|
|
58
|
+
}
|
|
59
|
+
# tail elements (i >= vl): handled according to vtype.VTA policy
|
|
60
|
+
|
|
61
|
+
CSR[vstart].VALUE = 0;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Copyright (c) Alibaba Damo Academy
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../../schemas/inst_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "inst_schema.json#"
|
|
7
|
+
kind: instruction
|
|
8
|
+
name: vwabda.vv
|
|
9
|
+
long_name: Vector Widening Signed Integer Absolute Difference and Accumulate, Overwrite Addend
|
|
10
|
+
description: |
|
|
11
|
+
Computes the element-wise absolute difference of two signed integer SEW-bit
|
|
12
|
+
source operands vs1 and vs2, and accumulates the results into the elements of
|
|
13
|
+
a 2*SEW-bit operand vd.
|
|
14
|
+
|
|
15
|
+
Reserved when SEW is neither 8 nor 16.
|
|
16
|
+
definedBy:
|
|
17
|
+
extension:
|
|
18
|
+
name: Zvabd
|
|
19
|
+
assembly: vd, vs2, vs1, vm
|
|
20
|
+
encoding:
|
|
21
|
+
match: 010101-----------010-----1010111
|
|
22
|
+
variables:
|
|
23
|
+
- name: vm
|
|
24
|
+
location: 25
|
|
25
|
+
- name: vs2
|
|
26
|
+
location: 24-20
|
|
27
|
+
- name: vs1
|
|
28
|
+
location: 19-15
|
|
29
|
+
- name: vd
|
|
30
|
+
location: 11-7
|
|
31
|
+
access:
|
|
32
|
+
s: always
|
|
33
|
+
u: always
|
|
34
|
+
vs: always
|
|
35
|
+
vu: always
|
|
36
|
+
operation(): |
|
|
37
|
+
VectorState state = vector_state();
|
|
38
|
+
|
|
39
|
+
if (state.sew != 8 && state.sew != 16) {
|
|
40
|
+
raise(ExceptionCode::IllegalInstruction, mode(), $encoding);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
VectorLmulType lmul_type = state.lmul_type;
|
|
44
|
+
|
|
45
|
+
XReg vlen = VLEN;
|
|
46
|
+
XReg vlmax;
|
|
47
|
+
if (lmul_type == VectorLmulType::Multiply) {
|
|
48
|
+
vlmax = (vlen << state.log2_lmul) >> state.log2_sew;
|
|
49
|
+
} else {
|
|
50
|
+
vlmax = (vlen >> state.log2_lmul) >> state.log2_sew;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
U32 sew2 = state.sew + state.sew;
|
|
54
|
+
|
|
55
|
+
for (U32 i = CSR[vstart].VALUE; i < CSR[vl].VALUE; i++) {
|
|
56
|
+
U32 src_start = i * state.sew;
|
|
57
|
+
U32 src_end = src_start + state.sew - 1;
|
|
58
|
+
U32 dst_start = i * sew2;
|
|
59
|
+
U32 dst_end = dst_start + sew2 - 1;
|
|
60
|
+
if (vm == 1'b1 || V[0][i:i] == 1'b1) {
|
|
61
|
+
# active element
|
|
62
|
+
if ($signed(V[vs2][src_end:src_start]) >= $signed(V[vs1][src_end:src_start])) {
|
|
63
|
+
V[vd][dst_end:dst_start] = V[vd][dst_end:dst_start] + (V[vs2][src_end:src_start] - V[vs1][src_end:src_start]);
|
|
64
|
+
} else {
|
|
65
|
+
V[vd][dst_end:dst_start] = V[vd][dst_end:dst_start] + (V[vs1][src_end:src_start] - V[vs2][src_end:src_start]);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
# inactive element: handled according to vtype.VMA policy
|
|
69
|
+
}
|
|
70
|
+
# tail elements (i >= vl): handled according to vtype.VTA policy
|
|
71
|
+
|
|
72
|
+
CSR[vstart].VALUE = 0;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Copyright (c) Alibaba Damo Academy
|
|
2
|
+
# SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../../schemas/inst_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "inst_schema.json#"
|
|
7
|
+
kind: instruction
|
|
8
|
+
name: vwabdau.vv
|
|
9
|
+
long_name: Vector Widening Unsigned Integer Absolute Difference and Accumulate, Overwrite Addend
|
|
10
|
+
description: |
|
|
11
|
+
Computes the element-wise absolute difference of two unsigned integer SEW-bit
|
|
12
|
+
source operands vs1 and vs2, and accumulates the results into the elements of
|
|
13
|
+
a 2*SEW-bit operand vd.
|
|
14
|
+
|
|
15
|
+
Reserved when SEW is neither 8 nor 16.
|
|
16
|
+
definedBy:
|
|
17
|
+
extension:
|
|
18
|
+
name: Zvabd
|
|
19
|
+
assembly: vd, vs2, vs1, vm
|
|
20
|
+
encoding:
|
|
21
|
+
match: 010110-----------010-----1010111
|
|
22
|
+
variables:
|
|
23
|
+
- name: vm
|
|
24
|
+
location: 25
|
|
25
|
+
- name: vs2
|
|
26
|
+
location: 24-20
|
|
27
|
+
- name: vs1
|
|
28
|
+
location: 19-15
|
|
29
|
+
- name: vd
|
|
30
|
+
location: 11-7
|
|
31
|
+
access:
|
|
32
|
+
s: always
|
|
33
|
+
u: always
|
|
34
|
+
vs: always
|
|
35
|
+
vu: always
|
|
36
|
+
operation(): |
|
|
37
|
+
VectorState state = vector_state();
|
|
38
|
+
|
|
39
|
+
if (state.sew != 8 && state.sew != 16) {
|
|
40
|
+
raise(ExceptionCode::IllegalInstruction, mode(), $encoding);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
VectorLmulType lmul_type = state.lmul_type;
|
|
44
|
+
|
|
45
|
+
XReg vlen = VLEN;
|
|
46
|
+
XReg vlmax;
|
|
47
|
+
if (lmul_type == VectorLmulType::Multiply) {
|
|
48
|
+
vlmax = (vlen << state.log2_lmul) >> state.log2_sew;
|
|
49
|
+
} else {
|
|
50
|
+
vlmax = (vlen >> state.log2_lmul) >> state.log2_sew;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
U32 sew2 = state.sew + state.sew;
|
|
54
|
+
|
|
55
|
+
for (U32 i = CSR[vstart].VALUE; i < CSR[vl].VALUE; i++) {
|
|
56
|
+
U32 src_start = i * state.sew;
|
|
57
|
+
U32 src_end = src_start + state.sew - 1;
|
|
58
|
+
U32 dst_start = i * sew2;
|
|
59
|
+
U32 dst_end = dst_start + sew2 - 1;
|
|
60
|
+
if (vm == 1'b1 || V[0][i:i] == 1'b1) {
|
|
61
|
+
# active element
|
|
62
|
+
if (V[vs2][src_end:src_start] >= V[vs1][src_end:src_start]) {
|
|
63
|
+
V[vd][dst_end:dst_start] = V[vd][dst_end:dst_start] + (V[vs2][src_end:src_start] - V[vs1][src_end:src_start]);
|
|
64
|
+
} else {
|
|
65
|
+
V[vd][dst_end:dst_start] = V[vd][dst_end:dst_start] + (V[vs1][src_end:src_start] - V[vs2][src_end:src_start]);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
# inactive element: handled according to vtype.VMA policy
|
|
69
|
+
}
|
|
70
|
+
# tail elements (i >= vl): handled according to vtype.VTA policy
|
|
71
|
+
|
|
72
|
+
CSR[vstart].VALUE = 0;
|
|
@@ -11,7 +11,7 @@ description: |
|
|
|
11
11
|
Performs a bitwise AND operation between vector register vs2 and the bitwise NOT of vector register vs1, storing results in vector register vd according to mask vm.
|
|
12
12
|
definedBy:
|
|
13
13
|
extension:
|
|
14
|
-
name:
|
|
14
|
+
name: Zvkb
|
|
15
15
|
assembly: vd, vs2, vs1, vm
|
|
16
16
|
encoding:
|
|
17
17
|
match: 000001-----------000-----1010111
|
|
@@ -11,7 +11,7 @@ description: |
|
|
|
11
11
|
Performs a bitwise AND operation between vector register vs2 and the bitwise NOT of scalar register xs1, storing results in vector register vd according to mask vm.
|
|
12
12
|
definedBy:
|
|
13
13
|
extension:
|
|
14
|
-
name:
|
|
14
|
+
name: Zvkb
|
|
15
15
|
assembly: vd, vs2, xs1, vm
|
|
16
16
|
encoding:
|
|
17
17
|
match: 000001-----------100-----1010111
|
|
@@ -11,7 +11,7 @@ description: |
|
|
|
11
11
|
Reverses the byte order within each element of vector register vs2, storing results in vector register vd according to mask vm. Similar to vrev8.v but with different encoding.
|
|
12
12
|
definedBy:
|
|
13
13
|
extension:
|
|
14
|
-
name:
|
|
14
|
+
name: Zvkb
|
|
15
15
|
assembly: vd, vs2, vm
|
|
16
16
|
encoding:
|
|
17
17
|
match: 010010------01000010-----1010111
|
|
@@ -11,7 +11,7 @@ description: |
|
|
|
11
11
|
Reverses the byte order within each element of vector register vs2, storing results in vector register vd according to mask vm. This is equivalent to a byte-level reversal of each element.
|
|
12
12
|
definedBy:
|
|
13
13
|
extension:
|
|
14
|
-
name:
|
|
14
|
+
name: Zvkb
|
|
15
15
|
assembly: vd, vs2, vm
|
|
16
16
|
encoding:
|
|
17
17
|
match: 010010------01001010-----1010111
|
|
@@ -11,7 +11,7 @@ description: |
|
|
|
11
11
|
Rotates each element in vector register vs2 left by the amount specified in vector register vs1, storing results in vector register vd according to mask vm. The rotation amount is taken modulo the element width.
|
|
12
12
|
definedBy:
|
|
13
13
|
extension:
|
|
14
|
-
name:
|
|
14
|
+
name: Zvkb
|
|
15
15
|
assembly: vd, vs2, vs1, vm
|
|
16
16
|
encoding:
|
|
17
17
|
match: 010101-----------000-----1010111
|
|
@@ -11,7 +11,7 @@ description: |
|
|
|
11
11
|
Rotates each element in vector register vs2 left by the amount specified in scalar register xs1, storing results in vector register vd according to mask vm. The rotation amount is taken modulo the element width.
|
|
12
12
|
definedBy:
|
|
13
13
|
extension:
|
|
14
|
-
name:
|
|
14
|
+
name: Zvkb
|
|
15
15
|
assembly: vd, vs2, xs1, vm
|
|
16
16
|
encoding:
|
|
17
17
|
match: 010101-----------100-----1010111
|
|
@@ -11,7 +11,7 @@ description: |
|
|
|
11
11
|
Rotates each element in vector register vs2 right by the immediate shift amount, storing results in vector register vd according to mask vm. The rotation amount is taken modulo the element width.
|
|
12
12
|
definedBy:
|
|
13
13
|
extension:
|
|
14
|
-
name:
|
|
14
|
+
name: Zvkb
|
|
15
15
|
assembly: vd, vs2, imm, vm
|
|
16
16
|
encoding:
|
|
17
17
|
match: 01010------------011-----1010111
|
|
@@ -11,7 +11,7 @@ description: |
|
|
|
11
11
|
Rotates each element in vector register vs2 right by the amount specified in vector register vs1, storing results in vector register vd according to mask vm. The rotation amount is taken modulo the element width.
|
|
12
12
|
definedBy:
|
|
13
13
|
extension:
|
|
14
|
-
name:
|
|
14
|
+
name: Zvkb
|
|
15
15
|
assembly: vd, vs2, vs1, vm
|
|
16
16
|
encoding:
|
|
17
17
|
match: 010100-----------000-----1010111
|
|
@@ -11,7 +11,7 @@ description: |
|
|
|
11
11
|
Rotates each element in vector register vs2 right by the amount specified in scalar register xs1, storing results in vector register vd according to mask vm. The rotation amount is taken modulo the element width.
|
|
12
12
|
definedBy:
|
|
13
13
|
extension:
|
|
14
|
-
name:
|
|
14
|
+
name: Zvkb
|
|
15
15
|
assembly: vd, vs2, xs1, vm
|
|
16
16
|
encoding:
|
|
17
17
|
match: 010100-----------100-----1010111
|
|
@@ -405,6 +405,9 @@ function f32_muladd {
|
|
|
405
405
|
Translated from Berkeley Softfloat softfloat_mulAddF32.
|
|
406
406
|
}
|
|
407
407
|
body {
|
|
408
|
+
if (is_sp_signaling_nan?(a) || is_sp_signaling_nan?(b) || is_sp_signaling_nan?(c)) {
|
|
409
|
+
set_fp_flag(FpFlag::NV);
|
|
410
|
+
}
|
|
408
411
|
Bits<1> signA = signF32UI(a);
|
|
409
412
|
Bits<16> expA = expF32UI(a);
|
|
410
413
|
Bits<32> sigA = fracF32UI(a);
|
|
@@ -584,8 +587,11 @@ function f32_sqrt {
|
|
|
584
587
|
Translated from Berkeley Softfloat f32_sqrt.
|
|
585
588
|
}
|
|
586
589
|
body {
|
|
590
|
+
if (is_sp_signaling_nan?(a)) {
|
|
591
|
+
set_fp_flag(FpFlag::NV);
|
|
592
|
+
}
|
|
587
593
|
Bits<1> signA = signF32UI(a);
|
|
588
|
-
Bits<
|
|
594
|
+
Bits<16> expA = expF32UI(a);
|
|
589
595
|
Bits<32> fracA = fracF32UI(a);
|
|
590
596
|
|
|
591
597
|
if (expA == 8'hFF) {
|
|
@@ -606,7 +612,8 @@ function f32_sqrt {
|
|
|
606
612
|
fracA = norm.sig;
|
|
607
613
|
}
|
|
608
614
|
|
|
609
|
-
Bits<16>
|
|
615
|
+
Bits<16> adjExp = expA - 16'h007F;
|
|
616
|
+
Bits<16> expZ = ((adjExp >> 1) ^ (adjExp & 16'h8000)) + 16'h007E;
|
|
610
617
|
Bits<1> oddExpA = expA[0];
|
|
611
618
|
Bits<32> sigA32 = (fracA | 32'h00800000) << 8;
|
|
612
619
|
Bits<32> sigZ = (sigA32 `* softfloat_approxRecipSqrt32_1(oddExpA, sigA32)) >> 32;
|
|
@@ -653,19 +660,22 @@ function softfloat_approxRecip32_1 {
|
|
|
653
660
|
arguments
|
|
654
661
|
Bits<32> a
|
|
655
662
|
description {
|
|
656
|
-
Returns
|
|
657
|
-
|
|
663
|
+
Returns floor(0x7FFFFFFFFFFFFFFF / a), matching the platform-specific
|
|
664
|
+
Berkeley SoftFloat macro on 64-bit hosts. Computed via binary long division.
|
|
658
665
|
}
|
|
659
666
|
body {
|
|
660
|
-
Bits<
|
|
661
|
-
Bits<
|
|
662
|
-
Bits<
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
667
|
+
Bits<64> a64 = {32'h0, a};
|
|
668
|
+
Bits<64> a_top = a64 << 31;
|
|
669
|
+
Bits<64> rem = 64'h7FFFFFFFFFFFFFFF;
|
|
670
|
+
Bits<32> q = 0;
|
|
671
|
+
for (U32 i = 0; i < 32; i++) {
|
|
672
|
+
Bits<64> d = a_top >> i;
|
|
673
|
+
if (rem >= d) {
|
|
674
|
+
q = q | (32'h1 << (31 - i));
|
|
675
|
+
rem = rem - d;
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
return q;
|
|
669
679
|
}
|
|
670
680
|
}
|
|
671
681
|
|
|
@@ -710,6 +720,9 @@ function f32_div {
|
|
|
710
720
|
Translated from Berkeley Softfloat f32_div.
|
|
711
721
|
}
|
|
712
722
|
body {
|
|
723
|
+
if (is_sp_signaling_nan?(a) || is_sp_signaling_nan?(b)) {
|
|
724
|
+
set_fp_flag(FpFlag::NV);
|
|
725
|
+
}
|
|
713
726
|
Bits<1> signA = signF32UI(a);
|
|
714
727
|
Bits<16> expA = expF32UI(a);
|
|
715
728
|
Bits<32> sigA = fracF32UI(a);
|
|
@@ -771,7 +784,7 @@ function f32_div {
|
|
|
771
784
|
Bits<32> sigZ = (sigA `* recip32) >> 32;
|
|
772
785
|
sigZ = sigZ + 2;
|
|
773
786
|
|
|
774
|
-
if ((sigZ &
|
|
787
|
+
if ((sigZ & 7) <= 2) {
|
|
775
788
|
sigZ = sigZ & ~32'h3;
|
|
776
789
|
Bits<64> rem = (sigA `<< 31) - (sigZ `* sigB);
|
|
777
790
|
if ((rem & 64'h8000000000000000) != 0) {
|
|
@@ -798,6 +811,9 @@ function f32_mul {
|
|
|
798
811
|
Translated from Berkeley Softfloat f32_mul.
|
|
799
812
|
}
|
|
800
813
|
body {
|
|
814
|
+
if (is_sp_signaling_nan?(a) || is_sp_signaling_nan?(b)) {
|
|
815
|
+
set_fp_flag(FpFlag::NV);
|
|
816
|
+
}
|
|
801
817
|
Bits<1> signA = signF32UI(a);
|
|
802
818
|
Bits<16> expA = expF32UI(a);
|
|
803
819
|
Bits<23> fracA = fracF32UI(a);
|
|
@@ -1326,6 +1342,9 @@ function softfloat_addMagsF32 {
|
|
|
1326
1342
|
Returns sum of the magnitudes of 2 floating point numbers
|
|
1327
1343
|
}
|
|
1328
1344
|
body {
|
|
1345
|
+
if (is_sp_signaling_nan?(a) || is_sp_signaling_nan?(b)) {
|
|
1346
|
+
set_fp_flag(FpFlag::NV);
|
|
1347
|
+
}
|
|
1329
1348
|
|
|
1330
1349
|
# extract exponents and significands of a and b
|
|
1331
1350
|
Bits<16> expA = expF32UI(a);
|
|
@@ -1433,6 +1452,9 @@ function softfloat_subMagsF32 {
|
|
|
1433
1452
|
Returns difference of the magnitudes of 2 floating point numbers
|
|
1434
1453
|
}
|
|
1435
1454
|
body {
|
|
1455
|
+
if (is_sp_signaling_nan?(a) || is_sp_signaling_nan?(b)) {
|
|
1456
|
+
set_fp_flag(FpFlag::NV);
|
|
1457
|
+
}
|
|
1436
1458
|
|
|
1437
1459
|
# extract exponents and significands of a and b
|
|
1438
1460
|
Bits<16> expA = expF32UI(a);
|
|
@@ -1886,7 +1908,7 @@ function round_f32_to_integral {
|
|
|
1886
1908
|
}
|
|
1887
1909
|
|
|
1888
1910
|
struct ExpAndSig {
|
|
1889
|
-
Bits<
|
|
1911
|
+
Bits<16> exp;
|
|
1890
1912
|
Bits<32> sig;
|
|
1891
1913
|
}
|
|
1892
1914
|
|
|
@@ -1897,11 +1919,13 @@ function softfloat_normSubnormalF32Sig {
|
|
|
1897
1919
|
description {
|
|
1898
1920
|
Normalize a subnormal F32 significand.
|
|
1899
1921
|
Returns (exp, sig32) where exp is the adjusted exponent (two's complement
|
|
1900
|
-
in Bits<
|
|
1901
|
-
at bit 23.
|
|
1922
|
+
in Bits<16>) and sig32 is the normalized significand with implicit leading 1
|
|
1923
|
+
at bit 23. The exponent is widened to Bits<16> (rather than the natural
|
|
1924
|
+
Bits<8>) so that callers can add two adjusted exponents together (e.g.
|
|
1925
|
+
expA + expB - bias) without overflow.
|
|
1902
1926
|
}
|
|
1903
1927
|
body {
|
|
1904
|
-
Bits<
|
|
1928
|
+
Bits<16> shiftDist = count_leading_zeros(32, sig) - 8;
|
|
1905
1929
|
ExpAndSig ret;
|
|
1906
1930
|
ret.exp = 1 - shiftDist;
|
|
1907
1931
|
ret.sig = sig << shiftDist;
|
|
@@ -3144,7 +3144,7 @@ function mstatus_sd_reset_value
|
|
|
3144
3144
|
fs_value = (!implemented?(ExtensionName::F)) ? 0 : MSTATUS_FS_LEGAL_VALUES[0];
|
|
3145
3145
|
}
|
|
3146
3146
|
if ((!implemented?(ExtensionName::V)) || ($array_size(MSTATUS_VS_LEGAL_VALUES) == 1)) {
|
|
3147
|
-
|
|
3147
|
+
vs_value = (!implemented?(ExtensionName::V)) ? 0 : MSTATUS_VS_LEGAL_VALUES[0];
|
|
3148
3148
|
}
|
|
3149
3149
|
|
|
3150
3150
|
return ((fs_value == 3) || (vs_value == 3)) ? 1 : 0;
|
|
@@ -6,14 +6,78 @@
|
|
|
6
6
|
$schema: param_schema.json#
|
|
7
7
|
kind: parameter
|
|
8
8
|
name: CACHE_BLOCK_SIZE
|
|
9
|
-
description:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
long_name: TODO
|
|
9
|
+
description: The observable size of a cache block, in bytes. A cache block is a
|
|
10
|
+
naturally aligned power-of-two (NAPOT) range of memory.
|
|
11
|
+
long_name: cache block size
|
|
13
12
|
schema:
|
|
14
13
|
type: integer
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
enum:
|
|
15
|
+
[
|
|
16
|
+
0x1,
|
|
17
|
+
0x2,
|
|
18
|
+
0x4,
|
|
19
|
+
0x8,
|
|
20
|
+
0x10,
|
|
21
|
+
0x20,
|
|
22
|
+
0x40,
|
|
23
|
+
0x80,
|
|
24
|
+
0x100,
|
|
25
|
+
0x200,
|
|
26
|
+
0x400,
|
|
27
|
+
0x800,
|
|
28
|
+
0x1000,
|
|
29
|
+
0x2000,
|
|
30
|
+
0x4000,
|
|
31
|
+
0x8000,
|
|
32
|
+
0x10000,
|
|
33
|
+
0x20000,
|
|
34
|
+
0x40000,
|
|
35
|
+
0x80000,
|
|
36
|
+
0x100000,
|
|
37
|
+
0x200000,
|
|
38
|
+
0x400000,
|
|
39
|
+
0x800000,
|
|
40
|
+
0x1000000,
|
|
41
|
+
0x2000000,
|
|
42
|
+
0x4000000,
|
|
43
|
+
0x8000000,
|
|
44
|
+
0x10000000,
|
|
45
|
+
0x20000000,
|
|
46
|
+
0x40000000,
|
|
47
|
+
0x80000000,
|
|
48
|
+
0x100000000,
|
|
49
|
+
0x200000000,
|
|
50
|
+
0x400000000,
|
|
51
|
+
0x800000000,
|
|
52
|
+
0x1000000000,
|
|
53
|
+
0x2000000000,
|
|
54
|
+
0x4000000000,
|
|
55
|
+
0x8000000000,
|
|
56
|
+
0x10000000000,
|
|
57
|
+
0x20000000000,
|
|
58
|
+
0x40000000000,
|
|
59
|
+
0x80000000000,
|
|
60
|
+
0x100000000000,
|
|
61
|
+
0x200000000000,
|
|
62
|
+
0x400000000000,
|
|
63
|
+
0x800000000000,
|
|
64
|
+
0x1000000000000,
|
|
65
|
+
0x2000000000000,
|
|
66
|
+
0x4000000000000,
|
|
67
|
+
0x8000000000000,
|
|
68
|
+
0x10000000000000,
|
|
69
|
+
0x20000000000000,
|
|
70
|
+
0x40000000000000,
|
|
71
|
+
0x80000000000000,
|
|
72
|
+
0x100000000000000,
|
|
73
|
+
0x200000000000000,
|
|
74
|
+
0x400000000000000,
|
|
75
|
+
0x800000000000000,
|
|
76
|
+
0x1000000000000000,
|
|
77
|
+
0x2000000000000000,
|
|
78
|
+
0x4000000000000000,
|
|
79
|
+
0x8000000000000000,
|
|
80
|
+
]
|
|
17
81
|
definedBy:
|
|
18
82
|
extension:
|
|
19
83
|
anyOf:
|