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
|
@@ -82,14 +82,14 @@ fields:
|
|
|
82
82
|
<%%- if ext?(:Sscofpmf) -%>
|
|
83
83
|
* `mhpmevent<%= hpm_num %>.MINH` is set and the current privilege level is M
|
|
84
84
|
<%%- if ext?(:S) -%>
|
|
85
|
-
* `mhpmevent<%= hpm_num %>.SINH` <%%- if ext?(:Ssccfg) -%>or its alias `hpmevent<%= hpm_num
|
|
85
|
+
* `mhpmevent<%= hpm_num %>.SINH` <%%- if ext?(:Ssccfg) -%>or its alias `hpmevent<%= hpm_num %>.SINH`<%%- end -%> is set and the current privilege level is (H)S
|
|
86
86
|
<%%- end -%>
|
|
87
87
|
<%%- if ext?(:U) -%>
|
|
88
|
-
* `mhpmevent<%= hpm_num %>.UINH` <%%- if ext?(:Ssccfg) -%>or its alias `hpmevent<%= hpm_num %>.
|
|
88
|
+
* `mhpmevent<%= hpm_num %>.UINH` <%%- if ext?(:Ssccfg) -%>or its alias `hpmevent<%= hpm_num %>.UINH`<%%- end -%> is set and the current privilege level is U
|
|
89
89
|
<%%- end -%>
|
|
90
90
|
<%%- if ext?(:H) -%>
|
|
91
|
-
* `mhpmevent<%= hpm_num %>.VSINH` <%%- if ext?(:Ssccfg) -%>or its alias `hpmevent<%= hpm_num %>.
|
|
92
|
-
* `mhpmevent<%= hpm_num %>.VUINH` <%%- if ext?(:Ssccfg) -%>or its alias `hpmevent<%= hpm_num %>.
|
|
91
|
+
* `mhpmevent<%= hpm_num %>.VSINH` <%%- if ext?(:Ssccfg) -%>or its alias `hpmevent<%= hpm_num %>.VSINH`<%%- end -%> is set and the current privilege level is VS
|
|
92
|
+
* `mhpmevent<%= hpm_num %>.VUINH` <%%- if ext?(:Ssccfg) -%>or its alias `hpmevent<%= hpm_num %>.VUINH`<%%- end -%> is set and the current privilege level is VU
|
|
93
93
|
<%%- end -%>
|
|
94
94
|
<%%- end -%>
|
|
95
95
|
--
|
|
@@ -138,7 +138,7 @@ fields:
|
|
|
138
138
|
|
|
139
139
|
Notably, `hstatus.VTVM` does *not* cause `hfence.vvma`, `sfence.w.inval`, or `sfence.inval.ir` to trap.
|
|
140
140
|
|
|
141
|
-
`mstatus.TVM` does not affect the VS-mode instructions controlled by `hstatus.
|
|
141
|
+
`mstatus.TVM` does not affect the VS-mode instructions controlled by `hstatus.VTVM`.
|
|
142
142
|
type: RW
|
|
143
143
|
reset_value: UNDEFINED_LEGAL
|
|
144
144
|
VGEIN:
|
|
@@ -32,7 +32,7 @@ fields:
|
|
|
32
32
|
# since writes to this register may not be hart-local, it must be handled
|
|
33
33
|
# as a special case
|
|
34
34
|
if (xlen() == 32) {
|
|
35
|
-
return sw_write_mcycle({read_mcycle()[63:
|
|
35
|
+
return sw_write_mcycle({read_mcycle()[63:32], csr_value.COUNT[31:0]});
|
|
36
36
|
} else {
|
|
37
37
|
return sw_write_mcycle(csr_value.COUNT);
|
|
38
38
|
}
|
|
@@ -40,7 +40,7 @@ fields:
|
|
|
40
40
|
Cycle counter.
|
|
41
41
|
|
|
42
42
|
<%- if ext?(:Zicntr) -%>
|
|
43
|
-
Aliased as `cycle.
|
|
43
|
+
Aliased as `cycle.COUNT`.
|
|
44
44
|
<%- end -%>
|
|
45
45
|
|
|
46
46
|
Increments every cycle unless:
|
|
@@ -49,14 +49,14 @@ fields:
|
|
|
49
49
|
<%- if ext?(:Smcntrpmf) -%>
|
|
50
50
|
* `mcyclecfg.MINH` is set and the current privilege level is M
|
|
51
51
|
<%- if ext?(:S) -%>
|
|
52
|
-
* `mcyclecfg.SINH` <%- if ext?(:Ssccfg) -%>or its alias `
|
|
52
|
+
* `mcyclecfg.SINH` <%- if ext?(:Ssccfg) -%>or its alias `cyclecfg.SINH`<%- end -%> is set and the current privilege level is (H)S
|
|
53
53
|
<%- end -%>
|
|
54
54
|
<%- if ext?(:U) -%>
|
|
55
|
-
* `mcyclecfg.UINH` <%- if ext?(:Ssccfg) -%>or its alias `
|
|
55
|
+
* `mcyclecfg.UINH` <%- if ext?(:Ssccfg) -%>or its alias `cyclecfg.UINH`<%- end -%> is set and the current privilege level is U
|
|
56
56
|
<%- end -%>
|
|
57
57
|
<%- if ext?(:H) -%>
|
|
58
|
-
* `mcyclecfg.VSINH` <%- if ext?(:Ssccfg) -%>or its alias `
|
|
59
|
-
* `mcyclecfg.VUINH` <%- if ext?(:Ssccfg) -%>or its alias `
|
|
58
|
+
* `mcyclecfg.VSINH` <%- if ext?(:Ssccfg) -%>or its alias `cyclecfg.VSINH`<%- end -%> is set and the current privilege level is VS
|
|
59
|
+
* `mcyclecfg.VUINH` <%- if ext?(:Ssccfg) -%>or its alias `cyclecfg.VUINH`<%- end -%> is set and the current privilege level is VU
|
|
60
60
|
<%- end -%>
|
|
61
61
|
<%- end -%>
|
|
62
62
|
reset_value: UNDEFINED_LEGAL
|
|
@@ -37,11 +37,11 @@ fields:
|
|
|
37
37
|
* `minstretcfg.SINH` <%- if ext?(:Ssccfg) -%>or its alias `instretcfg.SINH`<%- end -%> is set and the current privilege level is (H)S
|
|
38
38
|
<%- end -%>
|
|
39
39
|
<%- if ext?(:U) -%>
|
|
40
|
-
* `minstretcfg.UINH` <%- if ext?(:Ssccfg) -%>or its alias `instretcfg.
|
|
40
|
+
* `minstretcfg.UINH` <%- if ext?(:Ssccfg) -%>or its alias `instretcfg.UINH`<%- end -%> is set and the current privilege level is U
|
|
41
41
|
<%- end -%>
|
|
42
42
|
<%- if ext?(:H) -%>
|
|
43
|
-
* `minstretcfg.VSINH` <%- if ext?(:Ssccfg) -%>or its alias `instretcfg.
|
|
44
|
-
* `minstretcfg.VUINH` <%- if ext?(:Ssccfg) -%>or its alias `instretcfg.
|
|
43
|
+
* `minstretcfg.VSINH` <%- if ext?(:Ssccfg) -%>or its alias `instretcfg.VSINH`<%- end -%> is set and the current privilege level is VS
|
|
44
|
+
* `minstretcfg.VUINH` <%- if ext?(:Ssccfg) -%>or its alias `instretcfg.VUINH`<%- end -%> is set and the current privilege level is VU
|
|
45
45
|
<%- end -%>
|
|
46
46
|
<%- end -%>
|
|
47
47
|
|
|
@@ -28,12 +28,12 @@ fields:
|
|
|
28
28
|
reset_value: UNDEFINED_LEGAL
|
|
29
29
|
affectedBy: [Zicntr, Smcntrpmf, Smcdeleg, Ssccfg]
|
|
30
30
|
sw_write(csr_value): |
|
|
31
|
-
CSR[
|
|
31
|
+
CSR[minstret].COUNT = {csr_value.COUNT[31:0], CSR[minstret].COUNT[31:0]};
|
|
32
32
|
return csr_value.COUNT;
|
|
33
33
|
definedBy:
|
|
34
34
|
allOf:
|
|
35
35
|
- xlen: 32
|
|
36
36
|
- extension:
|
|
37
|
-
name:
|
|
37
|
+
name: Sm
|
|
38
38
|
sw_read(): |
|
|
39
39
|
return CSR[minstret].COUNT[63:32];
|
|
@@ -71,7 +71,7 @@ fields:
|
|
|
71
71
|
- extension:
|
|
72
72
|
name: Smdbltrp
|
|
73
73
|
type: RW-H
|
|
74
|
-
reset_value:
|
|
74
|
+
reset_value: 1
|
|
75
75
|
MPELP:
|
|
76
76
|
location: 41
|
|
77
77
|
long_name: M-mode Previous Expected Landing Pad state
|
|
@@ -111,7 +111,11 @@ fields:
|
|
|
111
111
|
long_name: Guest Virtual Address
|
|
112
112
|
description: |
|
|
113
113
|
When a trap is taken and a guest virtual address is written into mtval, GVA is set.
|
|
114
|
-
|
|
114
|
+
GVA is written by the implementation whenever a trap is taken into
|
|
115
|
+
HS mode. For any trap (breakpoint, address misaligned, access fault,
|
|
116
|
+
page fault, or guest-page fault) that writes a guest virtual address to
|
|
117
|
+
`stval`, GVA is set to 1. For any other trap into HS-mode,
|
|
118
|
+
GVA is set to 0.
|
|
115
119
|
type: RW-H
|
|
116
120
|
reset_value: 0
|
|
117
121
|
definedBy:
|
|
@@ -436,6 +440,10 @@ fields:
|
|
|
436
440
|
- name: F
|
|
437
441
|
- name: S
|
|
438
442
|
reset_value(): |
|
|
443
|
+
if (MISA_CSR_IMPLEMENTED && (CSR[misa].S == 1'b0) && (CSR[misa].F == 1'b0)) {
|
|
444
|
+
# must be read-only-0
|
|
445
|
+
return 0;
|
|
446
|
+
}
|
|
439
447
|
return $array_size(MSTATUS_FS_LEGAL_VALUES) == 1 ? MSTATUS_FS_LEGAL_VALUES[0] : UNDEFINED_LEGAL;
|
|
440
448
|
sw_write(csr_value): |
|
|
441
449
|
if (MISA_CSR_IMPLEMENTED && (CSR[misa].S == 1'b0) && (CSR[misa].F == 1'b0)) {
|
|
@@ -499,31 +507,17 @@ fields:
|
|
|
499
507
|
return $array_size(MSTATUS_VS_LEGAL_VALUES) == 1 ? CsrFieldType::RO : CsrFieldType::RW;
|
|
500
508
|
}
|
|
501
509
|
reset_value(): |
|
|
502
|
-
if (CSR[misa].V == 1'
|
|
503
|
-
return UNDEFINED_LEGAL;
|
|
504
|
-
} else if ((CSR[misa].S == 1'b0) && (CSR[misa].V == 1'b0)) {
|
|
510
|
+
if ((!implemented?(ExtensionName::S) && !implemented?(ExtensionName::V)) || (MISA_CSR_IMPLEMENTED && (CSR[misa].S == 1'b0) && (CSR[misa].V == 1'b0))) {
|
|
505
511
|
# must be read-only-0
|
|
506
512
|
return 0;
|
|
507
|
-
} else {
|
|
508
|
-
# there will be no hardware update in this case because we know the V extension isn't implemented
|
|
509
|
-
if ($array_size(MSTATUS_VS_LEGAL_VALUES) == 0) {
|
|
510
|
-
return 0;
|
|
511
|
-
} else if ($array_size(MSTATUS_VS_LEGAL_VALUES) == 1) {
|
|
512
|
-
return MSTATUS_VS_LEGAL_VALUES[0];
|
|
513
|
-
} else {
|
|
514
|
-
return UNDEFINED_LEGAL;
|
|
515
|
-
}
|
|
516
513
|
}
|
|
514
|
+
return $array_size(MSTATUS_VS_LEGAL_VALUES) == 1 ? MSTATUS_VS_LEGAL_VALUES[0] : UNDEFINED_LEGAL;
|
|
517
515
|
sw_write(csr_value): |
|
|
518
|
-
if (implemented?(ExtensionName::V) && CSR[misa].V == 1'
|
|
519
|
-
return $array_includes?(MSTATUS_VS_LEGAL_VALUES, csr_value.VS) ? csr_value.VS : UNDEFINED_LEGAL_DETERMINISTIC;
|
|
520
|
-
} else if (!implemented?(ExtensionName::S) && !implemented?(ExtensionName::V)) {
|
|
516
|
+
if ((!implemented?(ExtensionName::S) && !implemented?(ExtensionName::V)) || (MISA_CSR_IMPLEMENTED && (CSR[misa].S == 1'b0) && (CSR[misa].V == 1'b0))) {
|
|
521
517
|
# must be read-only-0
|
|
522
518
|
return 0;
|
|
523
|
-
} else {
|
|
524
|
-
# there will be no hardware update in this case because we know the V extension isn't implemented
|
|
525
|
-
return $array_includes?(MSTATUS_VS_LEGAL_VALUES, csr_value.VS) ? csr_value.VS : UNDEFINED_LEGAL_DETERMINISTIC;
|
|
526
519
|
}
|
|
520
|
+
return $array_includes?(MSTATUS_VS_LEGAL_VALUES, csr_value.VS) ? csr_value.VS : UNDEFINED_LEGAL_DETERMINISTIC;
|
|
527
521
|
SPP:
|
|
528
522
|
location: 8
|
|
529
523
|
long_name: S-mode Previous Privilege
|
|
@@ -30,37 +30,15 @@ fields:
|
|
|
30
30
|
# implementations may put further constraints on BASE when MODE != Direct
|
|
31
31
|
# If that is the case, stvec should have an override for the implementation
|
|
32
32
|
|
|
33
|
-
if (csr_value.MODE
|
|
34
|
-
|
|
35
|
-
return csr_value.BASE;
|
|
36
|
-
}
|
|
37
|
-
if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "retain") {
|
|
38
|
-
return CSR[mtvec].BASE;
|
|
39
|
-
}
|
|
40
|
-
if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "custom") {
|
|
41
|
-
return UNDEFINED_LEGAL_DETERMINISTIC;
|
|
42
|
-
}
|
|
43
|
-
unreachable();
|
|
44
|
-
} else if (csr_value.MODE == 1) {
|
|
45
|
-
if ($array_includes?(MTVEC_MODES, 1)) {
|
|
46
|
-
return csr_value.BASE;
|
|
47
|
-
}
|
|
48
|
-
if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "retain") {
|
|
49
|
-
return CSR[mtvec].BASE;
|
|
50
|
-
}
|
|
51
|
-
if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "custom") {
|
|
52
|
-
return UNDEFINED_LEGAL_DETERMINISTIC;
|
|
53
|
-
}
|
|
54
|
-
unreachable();
|
|
55
|
-
} else {
|
|
56
|
-
if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "retain") {
|
|
57
|
-
return CSR[mtvec].BASE;
|
|
58
|
-
}
|
|
59
|
-
if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "custom") {
|
|
60
|
-
return UNDEFINED_LEGAL_DETERMINISTIC;
|
|
61
|
-
}
|
|
62
|
-
unreachable();
|
|
33
|
+
if ($array_includes?(MTVEC_MODES, csr_value.MODE)) {
|
|
34
|
+
return csr_value.BASE;
|
|
63
35
|
}
|
|
36
|
+
if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "retain") {
|
|
37
|
+
return CSR[mtvec].BASE;
|
|
38
|
+
} else if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "custom") {
|
|
39
|
+
return UNDEFINED_LEGAL_DETERMINISTIC;
|
|
40
|
+
}
|
|
41
|
+
unreachable();
|
|
64
42
|
reset_value: 0
|
|
65
43
|
MODE:
|
|
66
44
|
location: 1-0
|
|
@@ -71,7 +49,7 @@ fields:
|
|
|
71
49
|
|
|
72
50
|
When Direct, all synchronous exceptions and asynchronous interrupts jump to (`mtvec.BASE` << 2).
|
|
73
51
|
|
|
74
|
-
When Vectored, asynchronous interrupts jump to (`mtvec.BASE` << 2 + `mcause.
|
|
52
|
+
When Vectored, asynchronous interrupts jump to (`mtvec.BASE` << 2 + `mcause.CODE`*4) while synchronous exceptions continue to jump to (`mtvec.BASE` << 2).
|
|
75
53
|
type(): |
|
|
76
54
|
if (MTVEC_ACCESS == "ro") {
|
|
77
55
|
return CsrFieldType::RO;
|
|
@@ -79,32 +57,13 @@ fields:
|
|
|
79
57
|
|
|
80
58
|
return ($array_size(MTVEC_MODES) == 1) ? CsrFieldType::RO : CsrFieldType::RWR;
|
|
81
59
|
sw_write(csr_value): |
|
|
82
|
-
if (csr_value.MODE
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
return UNDEFINED_LEGAL_DETERMINISTIC;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
} else if (csr_value.MODE == 1) {
|
|
93
|
-
if ($array_includes?(MTVEC_MODES, 1)) {
|
|
94
|
-
return csr_value.MODE;
|
|
95
|
-
} else {
|
|
96
|
-
if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "retain") {
|
|
97
|
-
return CSR[mtvec].MODE;
|
|
98
|
-
} else if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "custom") {
|
|
99
|
-
return UNDEFINED_LEGAL_DETERMINISTIC;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
} else {
|
|
103
|
-
if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "retain") {
|
|
104
|
-
return CSR[mtvec].MODE;
|
|
105
|
-
} else if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "custom") {
|
|
106
|
-
return UNDEFINED_LEGAL_DETERMINISTIC;
|
|
107
|
-
}
|
|
60
|
+
if ($array_includes?(MTVEC_MODES, csr_value.MODE)) {
|
|
61
|
+
return csr_value.MODE;
|
|
62
|
+
}
|
|
63
|
+
if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "retain") {
|
|
64
|
+
return CSR[mtvec].MODE;
|
|
65
|
+
} else if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "custom") {
|
|
66
|
+
return UNDEFINED_LEGAL_DETERMINISTIC;
|
|
108
67
|
}
|
|
109
68
|
unreachable();
|
|
110
69
|
reset_value(): |
|
|
@@ -10,7 +10,7 @@ long_name: Supervisor Exception Program Counter
|
|
|
10
10
|
address: 0x141
|
|
11
11
|
writable: true
|
|
12
12
|
priv_mode: S
|
|
13
|
-
length:
|
|
13
|
+
length: SXLEN
|
|
14
14
|
description: |
|
|
15
15
|
Written with the PC of an instruction on an exception or interrupt taken in (H)S-mode.
|
|
16
16
|
|
|
@@ -20,7 +20,8 @@ definedBy:
|
|
|
20
20
|
name: S
|
|
21
21
|
fields:
|
|
22
22
|
PC:
|
|
23
|
-
|
|
23
|
+
location_rv32: 31-0
|
|
24
|
+
location_rv64: 63-0
|
|
24
25
|
description: |
|
|
25
26
|
When a trap is taken into S-mode, `sepc.PC` is written with the virtual address of the
|
|
26
27
|
instruction that was interrupted or that encountered the exception.
|
|
@@ -38,7 +39,7 @@ fields:
|
|
|
38
39
|
When `misa.C` is clear, bit 1 is masked to zero. Writes to bit 1 are still captured, and
|
|
39
40
|
may be visible on the next read with `misa.C` is set.
|
|
40
41
|
|
|
41
|
-
Holds bits
|
|
42
|
+
Holds bits [SXLEN-1:<%= ext?(:C) ? 2 : 1 %>] of the virtual address associated with an exception.
|
|
42
43
|
type: RW-RH
|
|
43
44
|
sw_write(csr_value): |
|
|
44
45
|
return csr_value.PC & ~64'b1;
|
|
@@ -15,34 +15,60 @@ definedBy:
|
|
|
15
15
|
length: SXLEN
|
|
16
16
|
description: Supervisor interrupt-enable register.
|
|
17
17
|
writable: true
|
|
18
|
+
sw_read(): |
|
|
19
|
+
return $bits(CSR[mie]) & $bits(CSR[mideleg]);
|
|
18
20
|
fields:
|
|
19
21
|
SSIE:
|
|
20
22
|
location: 1
|
|
21
23
|
alias: mie.SSIE
|
|
22
24
|
description: |
|
|
23
25
|
Supervisor Software Interrupt Enable
|
|
24
|
-
type: RW
|
|
26
|
+
type: RW-R
|
|
27
|
+
sw_write(csr_value): |
|
|
28
|
+
if (CSR[mideleg].SSI == 1'b1) {
|
|
29
|
+
CSR[mie].SSIE = csr_value.SSIE;
|
|
30
|
+
return csr_value.SSIE;
|
|
31
|
+
}
|
|
32
|
+
return 1'b0;
|
|
25
33
|
reset_value: UNDEFINED_LEGAL
|
|
26
34
|
STIE:
|
|
27
35
|
location: 5
|
|
28
36
|
alias: mie.STIE
|
|
29
37
|
description: |
|
|
30
38
|
Supervisor Timer Interrupt Enable
|
|
31
|
-
type: RW
|
|
39
|
+
type: RW-R
|
|
40
|
+
sw_write(csr_value): |
|
|
41
|
+
if (CSR[mideleg].STI == 1'b1) {
|
|
42
|
+
CSR[mie].STIE = csr_value.STIE;
|
|
43
|
+
return csr_value.STIE;
|
|
44
|
+
}
|
|
45
|
+
return 1'b0;
|
|
32
46
|
reset_value: UNDEFINED_LEGAL
|
|
33
47
|
SEIE:
|
|
34
48
|
location: 9
|
|
35
49
|
alias: mie.SEIE
|
|
36
50
|
description: |
|
|
37
51
|
Supervisor External Interrupt Enable
|
|
38
|
-
type: RW
|
|
52
|
+
type: RW-R
|
|
53
|
+
sw_write(csr_value): |
|
|
54
|
+
if (CSR[mideleg].SEI == 1'b1) {
|
|
55
|
+
CSR[mie].SEIE = csr_value.SEIE;
|
|
56
|
+
return csr_value.SEIE;
|
|
57
|
+
}
|
|
58
|
+
return 1'b0;
|
|
39
59
|
reset_value: UNDEFINED_LEGAL
|
|
40
60
|
LCOFIE:
|
|
41
61
|
location: 13
|
|
42
62
|
alias: mie.LCOFIE
|
|
43
63
|
description: |
|
|
44
64
|
Local Counter Overflow Interrupt Enable
|
|
45
|
-
type: RW
|
|
65
|
+
type: RW-R
|
|
66
|
+
sw_write(csr_value): |
|
|
67
|
+
if (CSR[mideleg].LCOFI == 1'b1) {
|
|
68
|
+
CSR[mie].LCOFIE = csr_value.LCOFIE;
|
|
69
|
+
return csr_value.LCOFIE;
|
|
70
|
+
}
|
|
71
|
+
return 1'b0;
|
|
46
72
|
reset_value: UNDEFINED_LEGAL
|
|
47
73
|
definedBy:
|
|
48
74
|
extension:
|
|
@@ -15,10 +15,12 @@ description: |
|
|
|
15
15
|
|
|
16
16
|
Hypervisor-related interrupts (VS-mode interrupts and Supervisor Guest interrupts) are not reflected
|
|
17
17
|
in `sip` even though those interrupts can be taken in HS-mode. Instead, they are reported through `hip`.
|
|
18
|
-
length:
|
|
18
|
+
length: SXLEN
|
|
19
19
|
definedBy:
|
|
20
20
|
extension:
|
|
21
21
|
name: S
|
|
22
|
+
sw_read(): |
|
|
23
|
+
return $bits(CSR[mip]) & $bits(CSR[mideleg]);
|
|
22
24
|
fields:
|
|
23
25
|
SSIP:
|
|
24
26
|
location: 1
|
|
@@ -59,7 +61,13 @@ fields:
|
|
|
59
61
|
! 0 ! read-only 0
|
|
60
62
|
! 1 ! writable alias of `mip.SSIP` <% if ext?(:Smaia) %>and `mvip.SSIP`<% end %>
|
|
61
63
|
!===
|
|
62
|
-
type: RW
|
|
64
|
+
type: RW-R
|
|
65
|
+
sw_write(csr_value): |
|
|
66
|
+
if (CSR[mideleg].SSI == 1'b1) {
|
|
67
|
+
CSR[mip].SSIP = csr_value.SSIP;
|
|
68
|
+
return csr_value.SSIP;
|
|
69
|
+
}
|
|
70
|
+
return 1'b0;
|
|
63
71
|
reset_value: UNDEFINED_LEGAL
|
|
64
72
|
definedBy:
|
|
65
73
|
extension:
|
|
@@ -153,7 +161,13 @@ fields:
|
|
|
153
161
|
! 1
|
|
154
162
|
a! writable alias of `mip.LCOFIP` (and `vsip.LCOFIP` when `hideleg.LCOFI` is set)
|
|
155
163
|
!===
|
|
156
|
-
type: RW-
|
|
164
|
+
type: RW-RH
|
|
165
|
+
sw_write(csr_value): |
|
|
166
|
+
if (CSR[mideleg].LCOFI == 1'b1) {
|
|
167
|
+
CSR[mip].LCOFIP = csr_value.LCOFIP;
|
|
168
|
+
return csr_value.LCOFIP;
|
|
169
|
+
}
|
|
170
|
+
return 1'b0;
|
|
157
171
|
reset_value: UNDEFINED_LEGAL
|
|
158
172
|
definedBy:
|
|
159
173
|
extension:
|
|
@@ -10,14 +10,15 @@ long_name: Supervisor Scratch Register
|
|
|
10
10
|
address: 0x140
|
|
11
11
|
writable: true
|
|
12
12
|
priv_mode: S
|
|
13
|
-
length:
|
|
13
|
+
length: SXLEN
|
|
14
14
|
description: Scratch register for software use. Bits are not interpreted by hardware.
|
|
15
15
|
definedBy: # actually, defined by RV64, but must implement U-mode for this CSR to exist
|
|
16
16
|
extension:
|
|
17
17
|
name: S
|
|
18
18
|
fields:
|
|
19
19
|
SCRATCH:
|
|
20
|
-
|
|
20
|
+
location_rv32: 31-0
|
|
21
|
+
location_rv64: 63-0
|
|
21
22
|
description: Scratch value
|
|
22
23
|
type: RW
|
|
23
24
|
reset_value: UNDEFINED_LEGAL
|
|
@@ -11,13 +11,14 @@ address: 0x143
|
|
|
11
11
|
writable: true
|
|
12
12
|
description: Holds trap-specific information
|
|
13
13
|
priv_mode: S
|
|
14
|
-
length:
|
|
14
|
+
length: SXLEN
|
|
15
15
|
definedBy:
|
|
16
16
|
extension:
|
|
17
17
|
name: S
|
|
18
18
|
fields:
|
|
19
19
|
VALUE:
|
|
20
|
-
|
|
20
|
+
location_rv32: 31-0
|
|
21
|
+
location_rv64: 63-0
|
|
21
22
|
description: |
|
|
22
23
|
Written with trap-specific information when a trap is taken into S-mode.
|
|
23
24
|
|
|
@@ -10,19 +10,20 @@ long_name: Supervisor Trap Vector
|
|
|
10
10
|
address: 0x105
|
|
11
11
|
writable: true
|
|
12
12
|
priv_mode: S
|
|
13
|
-
length:
|
|
13
|
+
length: SXLEN
|
|
14
14
|
description: Controls where traps jump.
|
|
15
15
|
definedBy:
|
|
16
16
|
extension:
|
|
17
17
|
name: S
|
|
18
18
|
fields:
|
|
19
19
|
BASE:
|
|
20
|
-
|
|
20
|
+
location_rv32: 31-2
|
|
21
|
+
location_rv64: 63-2
|
|
21
22
|
description: |
|
|
22
|
-
<%- va_size = ext?(:Sv57) ? 57 : (ext?(:Sv48) ?
|
|
23
|
-
|
|
23
|
+
<%- va_size = ext?(:Sv57) ? 57 : (ext?(:Sv48) ? 48 : 39) -%>
|
|
24
|
+
Bits [SXLEN-1:2] of the virtual address of the exception vector for any trap taken into S-mode.
|
|
24
25
|
|
|
25
|
-
If the base address is written with a non-
|
|
26
|
+
If the base address is written with a non-canonical address (_i.e._, bits [SXLEN-1:<%= va_size %>] do not match bit <%= va_size-1 %>),
|
|
26
27
|
the write should be ignored.
|
|
27
28
|
|
|
28
29
|
type: RW-R
|
|
@@ -41,14 +42,13 @@ fields:
|
|
|
41
42
|
|
|
42
43
|
When Direct, all synchronous exceptions and asynchronous interrupts jump to (`stvec.BASE` << 2).
|
|
43
44
|
|
|
44
|
-
When Vectored, asynchronous interrupts jump to (`stvec.BASE` << 2 + `scause.
|
|
45
|
-
type:
|
|
45
|
+
When Vectored, asynchronous interrupts jump to (`stvec.BASE` << 2 + `scause.CODE`*4) while synchronous exceptions continue to jump to (`stvec.BASE` << 2).
|
|
46
|
+
type(): |
|
|
47
|
+
return ($array_size(STVEC_MODES) == 1) ? CsrFieldType::RO : CsrFieldType::RWR;
|
|
46
48
|
sw_write(csr_value): |
|
|
47
|
-
if (
|
|
48
|
-
return
|
|
49
|
-
} else if (STVEC_MODE_VECTORED && csr_value.MODE == 1) {
|
|
50
|
-
return 1;
|
|
51
|
-
} else {
|
|
52
|
-
return UNDEFINED_LEGAL_DETERMINISTIC;
|
|
49
|
+
if ($array_includes?(STVEC_MODES, csr_value.MODE)) {
|
|
50
|
+
return csr_value.MODE;
|
|
53
51
|
}
|
|
54
|
-
|
|
52
|
+
return UNDEFINED_LEGAL_DETERMINISTIC;
|
|
53
|
+
reset_value(): |
|
|
54
|
+
return ($array_size(STVEC_MODES) == 1) ? STVEC_MODES[0] : UNDEFINED_LEGAL;
|
|
@@ -79,7 +79,7 @@ sw_read(): |
|
|
|
79
79
|
}
|
|
80
80
|
} else if (mode() == PrivilegeMode::VU) {
|
|
81
81
|
# access in VU mode
|
|
82
|
-
if (((CSR[hcounteren].TM & CSR[scounteren].TM) == 1'b0) && (CSR[mcounteren].
|
|
82
|
+
if (((CSR[hcounteren].TM & CSR[scounteren].TM) == 1'b0) && (CSR[mcounteren].TM == 1'b1)) {
|
|
83
83
|
raise(ExceptionCode::VirtualInstruction, mode(), $encoding);
|
|
84
84
|
} else if (CSR[mcounteren].TM == 1'b0) {
|
|
85
85
|
raise(ExceptionCode::IllegalInstruction, mode(), $encoding);
|
|
@@ -80,7 +80,7 @@ sw_read(): |
|
|
|
80
80
|
}
|
|
81
81
|
} else if (mode() == PrivilegeMode::VU) {
|
|
82
82
|
# access in VU mode
|
|
83
|
-
if (((CSR[hcounteren].TM & CSR[scounteren].TM) == 1'b0) && (CSR[mcounteren].
|
|
83
|
+
if (((CSR[hcounteren].TM & CSR[scounteren].TM) == 1'b0) && (CSR[mcounteren].TM == 1'b1)) {
|
|
84
84
|
raise(ExceptionCode::VirtualInstruction, mode(), $encoding);
|
|
85
85
|
} else if (CSR[mcounteren].TM == 1'b0) {
|
|
86
86
|
raise(ExceptionCode::IllegalInstruction, mode(), $encoding);
|
|
@@ -11,7 +11,7 @@ address: 0x241
|
|
|
11
11
|
writable: true
|
|
12
12
|
virtual_address: 0x141
|
|
13
13
|
priv_mode: VS
|
|
14
|
-
length:
|
|
14
|
+
length: VSXLEN
|
|
15
15
|
description: |
|
|
16
16
|
Written with the PC of an instruction on an exception or interrupt taken in VS-mode.
|
|
17
17
|
|
|
@@ -21,7 +21,8 @@ definedBy:
|
|
|
21
21
|
name: H
|
|
22
22
|
fields:
|
|
23
23
|
PC:
|
|
24
|
-
|
|
24
|
+
location_rv32: 31-0
|
|
25
|
+
location_rv64: 63-0
|
|
25
26
|
description: |
|
|
26
27
|
When a trap is taken into VS-mode, `vsepc.PC` is written with the virtual address of the
|
|
27
28
|
instruction that was interrupted or that encountered the exception.
|
|
@@ -39,14 +40,14 @@ fields:
|
|
|
39
40
|
When `misa.C` is clear, bit 1 is masked to zero. Writes to bit 1 are still captured, and
|
|
40
41
|
may be visible on the next read with `misa.C` is set.
|
|
41
42
|
|
|
42
|
-
Holds bits
|
|
43
|
+
Holds bits [VSXLEN-1:<%= ext?(:C) ? 2 : 1 %>] of the virtual address associated with an exception.
|
|
43
44
|
type: RW-RH
|
|
44
45
|
sw_write(csr_value): |
|
|
45
46
|
return csr_value.PC & ~64'b1;
|
|
46
47
|
reset_value: UNDEFINED_LEGAL
|
|
47
48
|
sw_read(): |
|
|
48
49
|
if (implemented?(ExtensionName::C) && CSR[misa].C == 1'b1) {
|
|
49
|
-
return CSR[
|
|
50
|
+
return CSR[vsepc].PC & ~64'b1;
|
|
50
51
|
} else {
|
|
51
|
-
return CSR[
|
|
52
|
+
return CSR[vsepc].PC;
|
|
52
53
|
}
|