udb 0.1.9 → 0.1.13
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 +5 -2
- data/.data/cfgs/mc100-32-full-example.yaml +1 -0
- data/.data/cfgs/profile/README.adoc +10 -0
- data/.data/cfgs/profile/RVA20S64.yaml +26 -6
- data/.data/cfgs/profile/RVA20U64.yaml +18 -4
- data/.data/cfgs/profile/RVA22S64.yaml +27 -7
- data/.data/cfgs/profile/RVA22U64.yaml +18 -4
- data/.data/cfgs/profile/RVA23S64.yaml +61 -7
- data/.data/cfgs/profile/RVA23U64.yaml +36 -4
- data/.data/cfgs/profile/RVB23S64.yaml +27 -7
- data/.data/cfgs/profile/RVB23U64.yaml +18 -4
- data/.data/cfgs/profile/RVI20U32.yaml +10 -4
- data/.data/cfgs/profile/RVI20U64.yaml +10 -4
- data/.data/cfgs/qc_iu.yaml +4 -1
- data/.data/cfgs/rv32-riscv-tests.yaml +2 -1
- data/.data/cfgs/rv32-vector.yaml +2 -1
- data/.data/cfgs/rv64-riscv-tests.yaml +2 -1
- data/.data/cfgs/rv64-vector.yaml +2 -1
- data/.data/spec/custom/isa/qc_iu/csr/Smrnmi/mnepc.yaml +17 -0
- data/.data/spec/custom/isa/qc_iu/csr/Xqccmi/qc.itba.yaml +45 -0
- data/.data/spec/custom/isa/qc_iu/csr/Xqccmi/qc.itdec.yaml +39 -0
- data/.data/spec/custom/isa/qc_iu/csr/jvt.yaml +11 -0
- data/.data/spec/custom/isa/qc_iu/csr/mepc.yaml +16 -0
- data/.data/spec/custom/isa/qc_iu/ext/Xqccmi.yaml +219 -0
- data/.data/spec/custom/isa/qc_iu/ext/Xqccmt.yaml +127 -0
- data/.data/spec/custom/isa/qc_iu/inst/Xqccmi/qc.cm.ilut.yaml +153 -0
- data/.data/spec/custom/isa/qc_iu/inst/Xqccmt/qc.cm.jalt.yaml +84 -0
- data/.data/spec/custom/isa/qc_iu/inst/Xqccmt/qc.cm.jt.yaml +60 -0
- data/.data/spec/custom/isa/qc_iu/isa/globals.isa +112 -0
- data/.data/spec/schemas/config_schema.json +219 -26
- data/.data/spec/schemas/csr_schema.json +0 -6
- data/.data/spec/schemas/ext_schema.json +80 -24
- data/.data/spec/schemas/inst_schema.json +0 -3
- data/.data/spec/schemas/profile_release_schema.json +1 -1
- data/.data/spec/schemas/profile_schema.json +0 -3
- data/.data/spec/schemas/register_file_schema.json +8 -3
- data/.data/spec/schemas/schema_defs.json +8 -27
- data/.data/spec/std/isa/csr/I/pmpcfg0.yaml +8 -8
- data/.data/spec/std/isa/csr/I/pmpcfg1.yaml +4 -4
- data/.data/spec/std/isa/csr/I/pmpcfg10.yaml +8 -8
- data/.data/spec/std/isa/csr/I/pmpcfg11.yaml +4 -4
- data/.data/spec/std/isa/csr/I/pmpcfg12.yaml +8 -8
- data/.data/spec/std/isa/csr/I/pmpcfg13.yaml +4 -4
- data/.data/spec/std/isa/csr/I/pmpcfg14.yaml +8 -8
- data/.data/spec/std/isa/csr/I/pmpcfg15.yaml +4 -4
- data/.data/spec/std/isa/csr/I/pmpcfg2.yaml +8 -8
- data/.data/spec/std/isa/csr/I/pmpcfg3.yaml +4 -4
- data/.data/spec/std/isa/csr/I/pmpcfg4.yaml +8 -8
- data/.data/spec/std/isa/csr/I/pmpcfg5.yaml +4 -4
- data/.data/spec/std/isa/csr/I/pmpcfg6.yaml +8 -8
- data/.data/spec/std/isa/csr/I/pmpcfg7.yaml +4 -4
- data/.data/spec/std/isa/csr/I/pmpcfg8.yaml +8 -8
- data/.data/spec/std/isa/csr/I/pmpcfg9.yaml +4 -4
- data/.data/spec/std/isa/csr/I/pmpcfgN.layout +1 -1
- data/.data/spec/std/isa/csr/Zicntr/mcountinhibit.layout +6 -2
- data/.data/spec/std/isa/csr/Zicntr/mcountinhibit.yaml +6 -2
- data/.data/spec/std/isa/csr/hstatus.yaml +16 -0
- data/.data/spec/std/isa/csr/mcycleh.yaml +1 -1
- data/.data/spec/std/isa/csr/misa.yaml +0 -12
- data/.data/spec/std/isa/csr/mstatus.yaml +38 -0
- data/.data/spec/std/isa/csr/mstatush.yaml +17 -15
- data/.data/spec/std/isa/csr/senvcfg.yaml +16 -0
- data/.data/spec/std/isa/csr/sstatus.yaml +12 -0
- data/.data/spec/std/isa/csr/vsstatus.yaml +24 -0
- data/.data/spec/std/isa/ext/A.yaml +5 -7
- data/.data/spec/std/isa/ext/S.yaml +12 -0
- data/.data/spec/std/isa/ext/Smpmpmt.yaml +52 -0
- data/.data/spec/std/isa/ext/Sv32.yaml +7 -19
- data/.data/spec/std/isa/ext/Sv39.yaml +7 -19
- data/.data/spec/std/isa/ext/Sv48.yaml +4 -20
- data/.data/spec/std/isa/ext/Sv57.yaml +4 -20
- data/.data/spec/std/isa/ext/Svukte.yaml +71 -0
- data/.data/spec/std/isa/ext/Zawrs.yaml +1 -1
- data/.data/spec/std/isa/ext/Zihpm.yaml +0 -12
- data/.data/spec/std/isa/inst/C/c.addi.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.addi16sp.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.addiw.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.andi.yaml +1 -0
- data/.data/spec/std/isa/inst/C/c.ldsp.yaml +1 -1
- data/.data/spec/std/isa/inst/C/c.li.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 -1
- data/.data/spec/std/isa/inst/C/c.sdsp.yaml +1 -1
- data/.data/spec/std/isa/inst/D/fsgnj.d.yaml +3 -0
- data/.data/spec/std/isa/inst/D/fsgnjn.d.yaml +3 -0
- data/.data/spec/std/isa/inst/D/fsgnjx.d.yaml +3 -0
- data/.data/spec/std/isa/inst/F/fadd.s.yaml +5 -5
- data/.data/spec/std/isa/inst/F/fclass.s.yaml +2 -2
- 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.w.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 +2 -2
- data/.data/spec/std/isa/inst/F/fle.s.yaml +2 -2
- data/.data/spec/std/isa/inst/F/fleq.s.yaml +2 -2
- data/.data/spec/std/isa/inst/F/flt.s.yaml +2 -2
- data/.data/spec/std/isa/inst/F/fltq.s.yaml +2 -2
- data/.data/spec/std/isa/inst/F/flw.yaml +2 -2
- data/.data/spec/std/isa/inst/F/fmadd.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fmax.s.yaml +6 -6
- data/.data/spec/std/isa/inst/F/fmin.s.yaml +6 -6
- 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 +2 -2
- data/.data/spec/std/isa/inst/F/fmv.x.w.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fnmadd.s.yaml +2 -2
- data/.data/spec/std/isa/inst/F/fnmsub.s.yaml +1 -1
- data/.data/spec/std/isa/inst/F/fsgnj.s.yaml +4 -4
- data/.data/spec/std/isa/inst/F/fsgnjn.s.yaml +3 -3
- data/.data/spec/std/isa/inst/F/fsgnjx.s.yaml +4 -4
- 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 +1 -1
- data/.data/spec/std/isa/inst/I/addi.yaml +1 -1
- data/.data/spec/std/isa/inst/I/addiw.yaml +1 -1
- data/.data/spec/std/isa/inst/I/andi.yaml +1 -1
- data/.data/spec/std/isa/inst/I/beq.yaml +1 -1
- data/.data/spec/std/isa/inst/I/bge.yaml +4 -2
- data/.data/spec/std/isa/inst/I/bgeu.yaml +3 -0
- data/.data/spec/std/isa/inst/I/blt.yaml +4 -2
- data/.data/spec/std/isa/inst/I/bltu.yaml +3 -0
- data/.data/spec/std/isa/inst/I/bne.yaml +1 -1
- data/.data/spec/std/isa/inst/I/slt.yaml +2 -2
- data/.data/spec/std/isa/inst/I/sltiu.yaml +1 -1
- data/.data/spec/std/isa/inst/I/sltu.yaml +1 -1
- data/.data/spec/std/isa/inst/I/sub.yaml +1 -1
- data/.data/spec/std/isa/inst/I/subw.yaml +1 -1
- data/.data/spec/std/isa/inst/I/xori.yaml +1 -1
- data/.data/spec/std/isa/inst/M/mul.yaml +0 -19
- data/.data/spec/std/isa/inst/Q/fsgnj.q.yaml +1 -1
- data/.data/spec/std/isa/inst/S/sret.yaml +3 -1
- data/.data/spec/std/isa/inst/V/vadd.vv.yaml +1 -5
- data/.data/spec/std/isa/inst/V/vfsgnjn.vv.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vfsgnjx.vv.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vl1re8.v.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vl2re8.v.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vl4re8.v.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vl8re8.v.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vle8.v.yaml +3 -8
- data/.data/spec/std/isa/inst/V/vmand.mm.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmfle.vv.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmflt.vv.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmnand.mm.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmsgt.vi.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmsgtu.vi.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmsle.vi.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmsle.vv.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmsleu.vi.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmsleu.vv.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmslt.vv.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmsltu.vv.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmv.v.i.yaml +2 -13
- data/.data/spec/std/isa/inst/V/vmv.x.s.yaml +1 -1
- data/.data/spec/std/isa/inst/V/vmxnor.mm.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vmxor.mm.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vnsrl.wx.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vrsub.vx.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vse8.v.yaml +3 -4
- data/.data/spec/std/isa/inst/V/vwadd.vx.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vwaddu.vx.yaml +3 -0
- data/.data/spec/std/isa/inst/V/vxor.vi.yaml +4 -0
- data/.data/spec/std/isa/inst/Zalasr/lSIZE.AQRL.layout +40 -5
- data/.data/spec/std/isa/inst/Zalasr/lb.aq.yaml +17 -1
- data/.data/spec/std/isa/inst/Zalasr/lb.aqrl.yaml +17 -1
- data/.data/spec/std/isa/inst/Zalasr/ld.aq.yaml +17 -1
- data/.data/spec/std/isa/inst/Zalasr/ld.aqrl.yaml +17 -1
- data/.data/spec/std/isa/inst/Zalasr/lh.aq.yaml +17 -1
- data/.data/spec/std/isa/inst/Zalasr/lh.aqrl.yaml +17 -1
- data/.data/spec/std/isa/inst/Zalasr/lw.aq.yaml +17 -1
- data/.data/spec/std/isa/inst/Zalasr/lw.aqrl.yaml +17 -1
- data/.data/spec/std/isa/inst/Zalasr/sSIZE.AQRL.layout +46 -5
- data/.data/spec/std/isa/inst/Zalasr/sb.aqrl.yaml +16 -1
- data/.data/spec/std/isa/inst/Zalasr/sb.rl.yaml +16 -1
- data/.data/spec/std/isa/inst/Zalasr/sd.aqrl.yaml +16 -1
- data/.data/spec/std/isa/inst/Zalasr/sd.rl.yaml +16 -1
- data/.data/spec/std/isa/inst/Zalasr/sh.aqrl.yaml +16 -1
- data/.data/spec/std/isa/inst/Zalasr/sh.rl.yaml +16 -1
- data/.data/spec/std/isa/inst/Zalasr/sw.aqrl.yaml +16 -1
- data/.data/spec/std/isa/inst/Zalasr/sw.rl.yaml +16 -1
- data/.data/spec/std/isa/inst/Zbkb/packw.yaml +1 -1
- data/.data/spec/std/isa/inst/Zcd/c.fld.yaml +1 -1
- data/.data/spec/std/isa/inst/Zcd/c.fldsp.yaml +1 -1
- data/.data/spec/std/isa/inst/Zcd/c.fsdsp.yaml +1 -1
- data/.data/spec/std/isa/inst/Zcf/c.flwsp.yaml +1 -1
- data/.data/spec/std/isa/inst/Zcf/c.fswsp.yaml +1 -1
- data/.data/spec/std/isa/inst/Zcmp/cm.pop.yaml +1 -1
- data/.data/spec/std/isa/inst/Zcmp/cm.popret.yaml +1 -1
- data/.data/spec/std/isa/inst/Zcmp/cm.popretz.yaml +1 -1
- data/.data/spec/std/isa/inst/Zcmp/cm.push.yaml +2 -3
- data/.data/spec/std/isa/inst/Zfa/fround.s.yaml +1 -1
- data/.data/spec/std/isa/inst/Zfh/fcvt.h.s.yaml +6 -6
- data/.data/spec/std/isa/inst/Zfh/fcvt.s.h.yaml +5 -5
- data/.data/spec/std/isa/inst/Zfh/flh.yaml +1 -1
- data/.data/spec/std/isa/inst/Zfh/fmv.h.x.yaml +1 -1
- data/.data/spec/std/isa/inst/Zfh/fmv.x.h.yaml +1 -1
- data/.data/spec/std/isa/inst/Zfh/fsh.yaml +1 -1
- data/.data/spec/std/isa/inst/Zicsr/csrrc.yaml +1 -1
- data/.data/spec/std/isa/inst/Zicsr/csrrci.yaml +1 -1
- data/.data/spec/std/isa/inst/Zicsr/csrrs.yaml +2 -2
- data/.data/spec/std/isa/inst/Zicsr/csrrsi.yaml +1 -1
- data/.data/spec/std/isa/inst/Zicsr/csrrw.yaml +1 -1
- data/.data/spec/std/isa/inst/Zicsr/csrrwi.yaml +1 -1
- data/.data/spec/std/isa/isa/builtin_functions.idl +17 -0
- data/.data/spec/std/isa/isa/fp.idl +1 -5
- data/.data/spec/std/isa/isa/globals.isa +45 -14
- data/.data/spec/std/isa/isa/vec.idl +1 -2
- data/.data/spec/std/isa/manual_version/isa/20240411/isa_20240411.yaml +5 -5
- data/.data/spec/std/isa/param/COUNTINHIBIT_EN.yaml +8 -2
- data/.data/spec/std/isa/param/JVT_BASE_MASK.yaml +1 -1
- data/.data/spec/std/isa/param/MCOUNTINHIBIT_IMPLEMENTED.yaml +25 -0
- data/.data/spec/std/isa/param/MTVEC_MODES.yaml +10 -3
- data/.data/spec/std/isa/param/VLEN.yaml +2 -0
- data/.data/spec/std/isa/profile/RVA20S64.yaml +11 -4
- data/.data/spec/std/isa/profile/RVA20U64.yaml +14 -5
- data/.data/spec/std/isa/profile/RVA22S64.yaml +14 -3
- data/.data/spec/std/isa/profile/RVA22U64.yaml +8 -1
- data/.data/spec/std/isa/profile/RVA23S64.yaml +13 -0
- data/.data/spec/std/isa/profile/RVA23U64.yaml +15 -1
- data/.data/spec/std/isa/profile/RVB23S64.yaml +15 -3
- data/.data/spec/std/isa/profile/RVB23U64.yaml +8 -1
- data/.data/spec/std/isa/profile/RVI20U32.yaml +8 -1
- data/.data/spec/std/isa/profile/RVI20U64.yaml +7 -0
- data/.data/spec/std/isa/register_file/F.yaml +3 -2
- data/.data/spec/std/isa/register_file/V.yaml +2 -2
- data/.data/spec/std/isa/register_file/X.yaml +2 -1
- data/lib/udb/architecture.rb +4 -25
- data/lib/udb/cfg_arch.rb +171 -59
- data/lib/udb/cli.rb +10 -1
- data/lib/udb/condition.rb +38 -37
- data/lib/udb/config.rb +72 -6
- data/lib/udb/logic.rb +29 -56
- data/lib/udb/obj/csr.rb +23 -5
- data/lib/udb/obj/csr_field.rb +36 -21
- data/lib/udb/obj/database_obj.rb +2 -5
- data/lib/udb/obj/extension.rb +0 -3
- data/lib/udb/obj/instruction.rb +1 -4
- data/lib/udb/obj/portfolio.rb +75 -20
- data/lib/udb/obj/profile.rb +0 -4
- data/lib/udb/obj/register_file.rb +63 -2
- data/lib/udb/portfolio_design.rb +3 -6
- data/lib/udb/resolver.rb +84 -23
- data/lib/udb/version.rb +1 -1
- data/lib/udb/version_spec.rb +8 -0
- data/lib/udb/z3.rb +23 -0
- data/lib/udb.rb +0 -3
- metadata +25 -37
- data/.data/cfgs/profile/RVA23M64.yaml +0 -159
- data/.data/cfgs/profile/RVB23M64.yaml +0 -149
- data/.data/spec/schemas/proc_cert_class_schema.json +0 -35
- data/.data/spec/schemas/proc_cert_model_schema.json +0 -336
- data/.data/spec/std/isa/proc_cert_class/AC.yaml +0 -13
- data/.data/spec/std/isa/proc_cert_class/MC.yaml +0 -13
- data/.data/spec/std/isa/proc_cert_class/RVI.yaml +0 -16
- data/.data/spec/std/isa/proc_cert_model/AC100.yaml +0 -72
- data/.data/spec/std/isa/proc_cert_model/AC200.yaml +0 -58
- data/.data/spec/std/isa/proc_cert_model/MC100-32.yaml +0 -155
- data/.data/spec/std/isa/proc_cert_model/MC100-64.yaml +0 -21
- data/.data/spec/std/isa/proc_cert_model/MC200-32.yaml +0 -60
- data/.data/spec/std/isa/proc_cert_model/MC200-64.yaml +0 -21
- data/.data/spec/std/isa/proc_cert_model/MC300-32.yaml +0 -40
- data/.data/spec/std/isa/proc_cert_model/MC300-64.yaml +0 -21
- data/.data/spec/std/isa/proc_cert_model/RVI20-32.yaml +0 -39
- data/.data/spec/std/isa/proc_cert_model/RVI20-64.yaml +0 -19
- data/.data/spec/std/isa/profile/RVA23M64.yaml +0 -24
- data/.data/spec/std/isa/profile/RVB23M64.yaml +0 -86
- data/lib/udb/cert_normative_rule.rb +0 -41
- data/lib/udb/obj/certifiable_obj.rb +0 -21
- data/lib/udb/obj/certificate.rb +0 -230
- data/lib/udb/proc_cert_design.rb +0 -77
|
@@ -19,13 +19,11 @@ versions:
|
|
|
19
19
|
- name: Unknown
|
|
20
20
|
email: unknown@void.segfault
|
|
21
21
|
company: Unknown
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
- name: Zalrsc
|
|
28
|
-
version: "= 1.0.0"
|
|
22
|
+
requirements:
|
|
23
|
+
extension:
|
|
24
|
+
allOf:
|
|
25
|
+
- name: Zaamo
|
|
26
|
+
- name: Zalrsc
|
|
29
27
|
description: |
|
|
30
28
|
|
|
31
29
|
The atomic-instruction extension, named `A`, contains
|
|
@@ -12,12 +12,24 @@ versions:
|
|
|
12
12
|
- version: "1.11.0"
|
|
13
13
|
state: ratified
|
|
14
14
|
ratification_date: 2019-06
|
|
15
|
+
requirements:
|
|
16
|
+
extension:
|
|
17
|
+
name: Sm
|
|
18
|
+
version: "= 1.11"
|
|
15
19
|
- version: "1.12.0"
|
|
16
20
|
state: ratified
|
|
17
21
|
ratification_date: 2021-12
|
|
22
|
+
requirements:
|
|
23
|
+
extension:
|
|
24
|
+
name: Sm
|
|
25
|
+
version: "= 1.12"
|
|
18
26
|
- version: "1.13.0"
|
|
19
27
|
state: ratified
|
|
20
28
|
ratification_date: 2024-10
|
|
29
|
+
requirements:
|
|
30
|
+
extension:
|
|
31
|
+
name: Sm
|
|
32
|
+
version: "= 1.13"
|
|
21
33
|
requirements:
|
|
22
34
|
extension:
|
|
23
35
|
name: U
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Copyright (c) RISC-V International
|
|
2
|
+
# SPDX-License-Identifier: CC-BY-4.0
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../schemas/ext_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "ext_schema.json#"
|
|
7
|
+
kind: extension
|
|
8
|
+
name: Smpmpmt
|
|
9
|
+
long_name: PMP-based Memory Types Extension
|
|
10
|
+
description: |
|
|
11
|
+
The Smpmpmt extension provides a mechanism analogous to Svpbmt but associated
|
|
12
|
+
with the PMP registers rather than page-table entries.
|
|
13
|
+
A new WARL field, MT (Memory Type), is added in the unallocated bits 6--5 in
|
|
14
|
+
each PMP configuration register.
|
|
15
|
+
The MT field of the lowest-numbered PMP register that an access matches,
|
|
16
|
+
following the existing PMP address-matching rules, overrides the PMAs for
|
|
17
|
+
that access.
|
|
18
|
+
If an access matches no PMP registers, or if the MT field of the matching PMP
|
|
19
|
+
register contains the value PMA, then the access proceeds as though the
|
|
20
|
+
Smpmpmt extension were not implemented.
|
|
21
|
+
|
|
22
|
+
NOTE: The permissions checks associated with a PMP register are unrelated to
|
|
23
|
+
whether an access is considered to match a PMP register.
|
|
24
|
+
For example, even though a PMP register with its L bit clear does not enforce
|
|
25
|
+
its permissions checks on M-mode accesses, M-mode accesses within the
|
|
26
|
+
address range of that PMP register are still considered to match.
|
|
27
|
+
Hence, that PMP register's MT field takes effect for matching M-mode accesses.
|
|
28
|
+
|
|
29
|
+
The MT field is encoded as shown below.
|
|
30
|
+
The encoding is identical to that of the PBMT field, and the meaning of each
|
|
31
|
+
type is as specified by the Svpbmt extension.
|
|
32
|
+
Refer to that specification for the semantics of each type.
|
|
33
|
+
|
|
34
|
+
The MT field encoding is identical to Svpbmt's PBMT field:
|
|
35
|
+
|
|
36
|
+
* 0 (PMA): No override; use platform PMAs.
|
|
37
|
+
* 1 (NC): Non-cacheable, idempotent, weakly-ordered (RVWMO) main memory.
|
|
38
|
+
* 2 (IO): Non-cacheable, non-idempotent, strongly-ordered (I/O ordering) I/O.
|
|
39
|
+
* 3: Reserved for future standard use.
|
|
40
|
+
|
|
41
|
+
The PMP-based memory types compose with the page-based memory types as follows.
|
|
42
|
+
First, the PMP-based memory types override the PMAs, producing an intermediate
|
|
43
|
+
set of attributes.
|
|
44
|
+
Then, supervisor-level memory attributes (e.g. the page-based attributes
|
|
45
|
+
described in the Svpbmt specification) override the intermediate attributes to
|
|
46
|
+
produce a final set of attributes.
|
|
47
|
+
As with Svpbmt, it is implementation-defined whether PMP-based memory types
|
|
48
|
+
override additional PMAs not explicitly listed in the table above.
|
|
49
|
+
type: privileged
|
|
50
|
+
versions:
|
|
51
|
+
- version: "0.6"
|
|
52
|
+
state: frozen
|
|
@@ -10,25 +10,13 @@ long_name: 32-bit virtual address translation (3 level)
|
|
|
10
10
|
description: 32-bit virtual address translation (3 level)
|
|
11
11
|
type: privileged
|
|
12
12
|
versions:
|
|
13
|
-
- version: "1.
|
|
13
|
+
- version: "1.0"
|
|
14
14
|
state: ratified
|
|
15
15
|
ratification_date: 2019-05
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
requirements:
|
|
17
|
+
allOf:
|
|
18
|
+
- extension:
|
|
18
19
|
name: S
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
ratification_date: 2021-12
|
|
23
|
-
url: https://github.com/riscv/riscv-isa-manual/releases/download/Priv-v1.12/riscv-privileged-20211203.pdf
|
|
24
|
-
requirements:
|
|
25
|
-
extension:
|
|
26
|
-
name: S
|
|
27
|
-
version: ">= 1.12"
|
|
28
|
-
- version: "1.13.0"
|
|
29
|
-
state: ratified
|
|
30
|
-
ratification_date: 2024-10
|
|
31
|
-
requirements:
|
|
32
|
-
extension:
|
|
33
|
-
name: S
|
|
34
|
-
version: ">= 1.13"
|
|
20
|
+
- param:
|
|
21
|
+
name: SXLEN
|
|
22
|
+
includes: 32
|
|
@@ -10,25 +10,13 @@ long_name: 39-bit virtual address translation (3 level)
|
|
|
10
10
|
description: 39-bit virtual address translation (3 level)
|
|
11
11
|
type: privileged
|
|
12
12
|
versions:
|
|
13
|
-
- version: "1.
|
|
13
|
+
- version: "1.0"
|
|
14
14
|
state: ratified
|
|
15
15
|
ratification_date: 2019-05
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
requirements:
|
|
17
|
+
allOf:
|
|
18
|
+
- extension:
|
|
18
19
|
name: S
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
ratification_date: 2021-12
|
|
23
|
-
url: https://github.com/riscv/riscv-isa-manual/releases/download/Priv-v1.12/riscv-privileged-20211203.pdf
|
|
24
|
-
requirements:
|
|
25
|
-
extension:
|
|
26
|
-
name: S
|
|
27
|
-
version: ">= 1.12"
|
|
28
|
-
- version: "1.13.0"
|
|
29
|
-
state: ratified
|
|
30
|
-
ratification_date: 2024-10
|
|
31
|
-
requirements:
|
|
32
|
-
extension:
|
|
33
|
-
name: S
|
|
34
|
-
version: ">= 1.13"
|
|
20
|
+
- param:
|
|
21
|
+
name: SXLEN
|
|
22
|
+
includes: 64
|
|
@@ -10,25 +10,9 @@ long_name: 48-bit virtual address translation (4 level)
|
|
|
10
10
|
description: 48-bit virtual address translation (4 level)
|
|
11
11
|
type: privileged
|
|
12
12
|
versions:
|
|
13
|
-
- version: "1.
|
|
13
|
+
- version: "1.0"
|
|
14
14
|
state: ratified
|
|
15
15
|
ratification_date: 2019-05
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
version: ">= 1.11"
|
|
20
|
-
- version: "1.12.0"
|
|
21
|
-
state: ratified
|
|
22
|
-
ratification_date: 2021-12
|
|
23
|
-
url: https://github.com/riscv/riscv-isa-manual/releases/download/Priv-v1.12/riscv-privileged-20211203.pdf
|
|
24
|
-
requirements:
|
|
25
|
-
extension:
|
|
26
|
-
name: Sv39
|
|
27
|
-
version: ">= 1.12"
|
|
28
|
-
- version: "1.13.0"
|
|
29
|
-
state: ratified
|
|
30
|
-
ratification_date: 2024-10
|
|
31
|
-
requirements:
|
|
32
|
-
extension:
|
|
33
|
-
name: Sv39
|
|
34
|
-
version: ">= 1.13"
|
|
16
|
+
requirements:
|
|
17
|
+
extension:
|
|
18
|
+
name: Sv39
|
|
@@ -10,25 +10,9 @@ long_name: 57-bit virtual address translation (5 level)
|
|
|
10
10
|
description: 57-bit virtual address translation (5 level)
|
|
11
11
|
type: privileged
|
|
12
12
|
versions:
|
|
13
|
-
- version: "1.
|
|
13
|
+
- version: "1.0"
|
|
14
14
|
state: ratified
|
|
15
15
|
ratification_date: unknown
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
version: ">= 1.11"
|
|
20
|
-
- version: "1.12.0"
|
|
21
|
-
state: ratified
|
|
22
|
-
ratification_date: 2021-12
|
|
23
|
-
url: https://github.com/riscv/riscv-isa-manual/releases/download/Priv-v1.12/riscv-privileged-20211203.pdf
|
|
24
|
-
requirements:
|
|
25
|
-
extension:
|
|
26
|
-
name: Sv48
|
|
27
|
-
version: ">= 1.12"
|
|
28
|
-
- version: "1.13.0"
|
|
29
|
-
state: ratified
|
|
30
|
-
ratification_date: 2024-10
|
|
31
|
-
requirements:
|
|
32
|
-
extension:
|
|
33
|
-
name: Sv48
|
|
34
|
-
version: ">= 1.13"
|
|
16
|
+
requirements:
|
|
17
|
+
extension:
|
|
18
|
+
name: Sv48
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Copyright (c) RISC-V International
|
|
2
|
+
# SPDX-License-Identifier: CC-BY-4.0
|
|
3
|
+
|
|
4
|
+
# yaml-language-server: $schema=../../../schemas/ext_schema.json
|
|
5
|
+
|
|
6
|
+
$schema: "ext_schema.json#"
|
|
7
|
+
kind: extension
|
|
8
|
+
name: Svukte
|
|
9
|
+
long_name: Address-Independent Latency of User-Mode Faults to Supervisor Addresses
|
|
10
|
+
type: privileged
|
|
11
|
+
description: |
|
|
12
|
+
== "Svukte" Extension for Address-Independent Latency of User-Mode Faults to Supervisor Addresses, Version 0.4
|
|
13
|
+
|
|
14
|
+
The Svukte extension provides a means to make user-mode accesses to supervisor
|
|
15
|
+
memory raise page faults with timing that is independent of the address-translation
|
|
16
|
+
configuration and page-table contents, thereby mitigating attacks that attempt
|
|
17
|
+
to discover the supervisor software's address-space layout.
|
|
18
|
+
|
|
19
|
+
If the Svukte extension is implemented, the `senvcfg`.UKTE field is writable.
|
|
20
|
+
If the hypervisor extension is additionally implemented, the `hstatus`.HUKTE
|
|
21
|
+
field is also writable.
|
|
22
|
+
See <<sec:senvcfg>> and <<sec:hstatus>> for the definitions of those fields.
|
|
23
|
+
|
|
24
|
+
The Svukte extension depends on the Sv39 extension.
|
|
25
|
+
|
|
26
|
+
[NOTE]
|
|
27
|
+
====
|
|
28
|
+
Svukte is not defined for Sv32 because the small address space limits the
|
|
29
|
+
available entropy, reducing the effectiveness of address-space layout
|
|
30
|
+
randomization.
|
|
31
|
+
If an Sv32 variant were to be defined, it would need to account for the fact
|
|
32
|
+
that it is more common to reserve only the upper 1 GiB of the virtual-address
|
|
33
|
+
space for the operating system, leaving the lower 3 GiB for user
|
|
34
|
+
processes.
|
|
35
|
+
====
|
|
36
|
+
|
|
37
|
+
When `senvcfg`.UKTE=1 and the active `satp` register's MODE field is not Bare,
|
|
38
|
+
an instruction fetch or explicit memory access whose
|
|
39
|
+
effective privilege mode is U or VU is considered to be _Svukte-qualified_.
|
|
40
|
+
For any Svukte-qualified memory access, virtual addresses >= 2^SXLEN-1^ are
|
|
41
|
+
considered to be invalid; hence, an Svukte-qualified access to such an address
|
|
42
|
+
raises a page-fault exception corresponding to the original access type.
|
|
43
|
+
The timing of an instruction that raises an exception for this reason must be
|
|
44
|
+
independent of the faulting virtual address.
|
|
45
|
+
|
|
46
|
+
[NOTE]
|
|
47
|
+
====
|
|
48
|
+
An Svukte-qualified access to such an address raises an exception even
|
|
49
|
+
if the underlying PTE would have otherwise allowed the access.
|
|
50
|
+
Practical implementations of Svukte will raise these exceptions based upon the
|
|
51
|
+
effective address, without accessing the page tables or address-translation
|
|
52
|
+
caches.
|
|
53
|
+
====
|
|
54
|
+
|
|
55
|
+
[NOTE]
|
|
56
|
+
====
|
|
57
|
+
Since whether an instruction is Svukte-qualified depends on the _effective_
|
|
58
|
+
privilege mode of the access, even some instructions executed in HS-mode or M-mode
|
|
59
|
+
(e.g. HLV with `hstatus`.SPVP=0, or LW with `mstatus`.MPRV=1 and
|
|
60
|
+
`mstatus`.MPP=U) are Svukte-qualified.
|
|
61
|
+
====
|
|
62
|
+
|
|
63
|
+
As described in <<sec:hstatus>>, the `hstatus`.HUKTE field, rather than the
|
|
64
|
+
`senvcfg`.UKTE field, determines whether HLV, HLVX, and HSV instructions
|
|
65
|
+
executed within U-mode are Svukte-qualified.
|
|
66
|
+
versions:
|
|
67
|
+
- version: "0.4.0"
|
|
68
|
+
state: development
|
|
69
|
+
requirements:
|
|
70
|
+
extension:
|
|
71
|
+
name: Sv39
|
|
@@ -13,15 +13,3 @@ versions:
|
|
|
13
13
|
- version: "2.0.0"
|
|
14
14
|
state: ratified
|
|
15
15
|
ratification_date: 2023-03
|
|
16
|
-
requirements:
|
|
17
|
-
idl(): |
|
|
18
|
-
-> (HPM_COUNTER_EN[3] || HPM_COUNTER_EN[4] || HPM_COUNTER_EN[5] ||
|
|
19
|
-
HPM_COUNTER_EN[6] || HPM_COUNTER_EN[7] || HPM_COUNTER_EN[8] ||
|
|
20
|
-
HPM_COUNTER_EN[9] || HPM_COUNTER_EN[10] || HPM_COUNTER_EN[11] ||
|
|
21
|
-
HPM_COUNTER_EN[12] || HPM_COUNTER_EN[13] || HPM_COUNTER_EN[14] ||
|
|
22
|
-
HPM_COUNTER_EN[15] || HPM_COUNTER_EN[16] || HPM_COUNTER_EN[17] ||
|
|
23
|
-
HPM_COUNTER_EN[18] || HPM_COUNTER_EN[19] || HPM_COUNTER_EN[20] ||
|
|
24
|
-
HPM_COUNTER_EN[21] || HPM_COUNTER_EN[22] || HPM_COUNTER_EN[23] ||
|
|
25
|
-
HPM_COUNTER_EN[24] || HPM_COUNTER_EN[25] || HPM_COUNTER_EN[26] ||
|
|
26
|
-
HPM_COUNTER_EN[27] || HPM_COUNTER_EN[28] || HPM_COUNTER_EN[29] ||
|
|
27
|
-
HPM_COUNTER_EN[30] || HPM_COUNTER_EN[31]);
|
|
@@ -34,19 +34,19 @@ data_independent_timing: true
|
|
|
34
34
|
operation(): |
|
|
35
35
|
check_f_ok($encoding);
|
|
36
36
|
RoundingMode mode = rm_to_mode(rm, $encoding);
|
|
37
|
-
Bits<32> a =
|
|
38
|
-
Bits<32> b =
|
|
37
|
+
Bits<32> a = F[fs1];
|
|
38
|
+
Bits<32> b = F[fs2];
|
|
39
39
|
|
|
40
40
|
if (implemented?(ExtensionName::D)) {
|
|
41
41
|
# check for incorrectly NaN-boxed inputs
|
|
42
|
-
if (
|
|
42
|
+
if (F[fs1][63:32] != 32'hffffffff) {
|
|
43
43
|
a = SP_CANONICAL_NAN;
|
|
44
44
|
}
|
|
45
|
-
if (
|
|
45
|
+
if (F[fs2][63:32] != 32'hffffffff) {
|
|
46
46
|
b = SP_CANONICAL_NAN;
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
F[fd] = f32_add(a, b, mode);
|
|
51
51
|
|
|
52
52
|
mark_f_state_dirty();
|
|
@@ -51,11 +51,11 @@ data_independent_timing: false
|
|
|
51
51
|
operation(): |
|
|
52
52
|
check_f_ok($encoding);
|
|
53
53
|
|
|
54
|
-
Bits<32> sp_value =
|
|
54
|
+
Bits<32> sp_value = F[fs1][31:0];
|
|
55
55
|
|
|
56
56
|
if (implemented?(ExtensionName::D)) {
|
|
57
57
|
# check for an incorrectly NaN-boxed value
|
|
58
|
-
if (
|
|
58
|
+
if (F[fs1][63:32] != 32'hffffffff) {
|
|
59
59
|
sp_value = SP_CANONICAL_NAN;
|
|
60
60
|
}
|
|
61
61
|
}
|
|
@@ -34,8 +34,8 @@ data_independent_timing: true
|
|
|
34
34
|
operation(): |
|
|
35
35
|
check_f_ok($encoding);
|
|
36
36
|
|
|
37
|
-
Bits<32> sp_value_a =
|
|
38
|
-
Bits<32> sp_value_b =
|
|
37
|
+
Bits<32> sp_value_a = F[fs1][31:0];
|
|
38
|
+
Bits<32> sp_value_b = F[fs2][31:0];
|
|
39
39
|
|
|
40
40
|
if (is_sp_nan?(sp_value_a) || is_sp_nan?(sp_value_b)) {
|
|
41
41
|
if (is_sp_signaling_nan?(sp_value_a) || is_sp_signaling_nan?(sp_value_b)) {
|
|
@@ -34,8 +34,8 @@ data_independent_timing: true
|
|
|
34
34
|
operation(): |
|
|
35
35
|
check_f_ok($encoding);
|
|
36
36
|
|
|
37
|
-
Bits<32> sp_value_a =
|
|
38
|
-
Bits<32> sp_value_b =
|
|
37
|
+
Bits<32> sp_value_a = F[fs1][31:0];
|
|
38
|
+
Bits<32> sp_value_b = F[fs2][31:0];
|
|
39
39
|
Bits<1> sign_a = sp_value_a[31];
|
|
40
40
|
Bits<1> sign_b = sp_value_b[31];
|
|
41
41
|
|
|
@@ -32,8 +32,8 @@ data_independent_timing: true
|
|
|
32
32
|
operation(): |
|
|
33
33
|
check_f_ok($encoding);
|
|
34
34
|
|
|
35
|
-
Bits<32> sp_value_a =
|
|
36
|
-
Bits<32> sp_value_b =
|
|
35
|
+
Bits<32> sp_value_a = F[fs1][31:0];
|
|
36
|
+
Bits<32> sp_value_b = F[fs2][31:0];
|
|
37
37
|
|
|
38
38
|
if (is_sp_nan?(sp_value_a) || is_sp_nan?(sp_value_b)) {
|
|
39
39
|
# Quiet comparison: only set NV for signaling NaN
|
|
@@ -34,8 +34,8 @@ data_independent_timing: true
|
|
|
34
34
|
operation(): |
|
|
35
35
|
check_f_ok($encoding);
|
|
36
36
|
|
|
37
|
-
Bits<32> sp_value_a =
|
|
38
|
-
Bits<32> sp_value_b =
|
|
37
|
+
Bits<32> sp_value_a = F[fs1][31:0];
|
|
38
|
+
Bits<32> sp_value_b = F[fs2][31:0];
|
|
39
39
|
Bits<1> sign_a = sp_value_a[31];
|
|
40
40
|
Bits<1> sign_b = sp_value_b[31];
|
|
41
41
|
|
|
@@ -32,8 +32,8 @@ data_independent_timing: true
|
|
|
32
32
|
operation(): |
|
|
33
33
|
check_f_ok($encoding);
|
|
34
34
|
|
|
35
|
-
Bits<32> sp_value_a =
|
|
36
|
-
Bits<32> sp_value_b =
|
|
35
|
+
Bits<32> sp_value_a = F[fs1][31:0];
|
|
36
|
+
Bits<32> sp_value_b = F[fs2][31:0];
|
|
37
37
|
|
|
38
38
|
if (is_sp_nan?(sp_value_a) || is_sp_nan?(sp_value_b)) {
|
|
39
39
|
# Quiet comparison: only set NV for signaling NaN
|
|
@@ -38,9 +38,9 @@ operation(): |
|
|
|
38
38
|
Bits<32> sp_value = read_memory(32, virtual_address, $encoding);
|
|
39
39
|
|
|
40
40
|
if (implemented?(ExtensionName::D)) {
|
|
41
|
-
|
|
41
|
+
F[fd] = nan_box(32, 64, sp_value);
|
|
42
42
|
} else {
|
|
43
|
-
|
|
43
|
+
F[fd] = sp_value;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
mark_f_state_dirty();
|
|
@@ -35,5 +35,5 @@ data_independent_timing: true
|
|
|
35
35
|
operation(): |
|
|
36
36
|
check_f_ok($encoding);
|
|
37
37
|
RoundingMode mode = rm_to_mode(rm, $encoding);
|
|
38
|
-
|
|
38
|
+
F[fd] = f32_muladd(F[fs1], F[fs2], F[fs3], F32MulAddOp::Softfloat_mulAdd_addC, mode);
|
|
39
39
|
mark_f_state_dirty();
|