lean4-htt/tests/bench/riscv-ast.lean
Joachim Breitner 2386a3d7c7
chore: add RISC-V ast benchmark (#8035)
This PR adds a realistic large-inductive benchmark, taken from
https://github.com/opencompl/sail-riscv-lean
2025-04-21 15:46:38 +00:00

1489 lines
49 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/-
Benchmark taken from
https://github.com/opencompl/sail-riscv-lean
file LeanRV64D/Defs.lean
revision 1d0e7341582a65d194acf84252d55165ae99add3
https://raw.githubusercontent.com/opencompl/sail-riscv-lean/refs/heads/main/LeanRV64D/Defs.lean
The original file was generated from the Sail RISC-V model:
This Sail RISC-V architecture model, comprising all files and
directories except for the snapshots of the Lem and Sail libraries
in the prover_snapshots directory (which include copies of their
licences), is subject to the BSD two-clause licence.
We truncated the file using, `#exit`, after the 200th constructor of the `ast` inductive, for a
manageable benchmark size.
-/
set_option maxHeartbeats 1_000_000_000
set_option maxRecDepth 10_000
set_option linter.unusedVariables false
set_option match.ignoreUnusedAlts true
/-- Type quantifiers: k_a : Type -/
inductive option (k_a : Type) where
| Some (_ : k_a)
| None (_ : Unit)
deriving Inhabited, BEq
abbrev bits k_n := (BitVec k_n)
abbrev xlenbits := (BitVec (2 ^ 3 * 8))
inductive virtaddr where
| Virtaddr (_ : xlenbits)
deriving Inhabited, BEq
abbrev max_mem_access : Int := 4096
abbrev mem_access_width := Nat
inductive exception where
| Error_not_implemented (_ : String)
| Error_internal_error (_ : Unit)
deriving Inhabited, BEq
abbrev log2_xlen_bytes : Int := 3
abbrev physaddrbits_len : Int := 64
abbrev asidlen : Int := 16
abbrev log2_xlen : Int := (3 + 3)
abbrev xlen_bytes : Int := (2 ^ 3)
abbrev xlen : Int := (2 ^ 3 * 8)
abbrev asidbits := (BitVec 16)
abbrev flen_bytes : Int := 8
abbrev flen : Int := (8 * 8)
abbrev flenbits := (BitVec (8 * 8))
abbrev vlenmax : Int := 65536
abbrev physaddrbits := (BitVec 64)
inductive physaddr where
| Physaddr (_ : physaddrbits)
deriving Inhabited, BEq
abbrev mem_meta := Unit
inductive write_kind where | Write_plain | Write_RISCV_release | Write_RISCV_strong_release | Write_RISCV_conditional | Write_RISCV_conditional_release | Write_RISCV_conditional_strong_release
deriving Inhabited, BEq
inductive read_kind where | Read_plain | Read_ifetch | Read_RISCV_acquire | Read_RISCV_strong_acquire | Read_RISCV_reserved | Read_RISCV_reserved_acquire | Read_RISCV_reserved_strong_acquire
deriving Inhabited, BEq
inductive barrier_kind where | Barrier_RISCV_rw_rw | Barrier_RISCV_r_rw | Barrier_RISCV_r_r | Barrier_RISCV_rw_w | Barrier_RISCV_w_w | Barrier_RISCV_w_rw | Barrier_RISCV_rw_r | Barrier_RISCV_r_w | Barrier_RISCV_w_r | Barrier_RISCV_tso | Barrier_RISCV_i
deriving Inhabited, BEq
inductive Access_variety where
| AV_plain
| AV_exclusive
| AV_atomic_rmw
deriving Inhabited, DecidableEq
structure RISCV_strong_access where
variety : Access_variety
deriving Inhabited, BEq
inductive extension where | Ext_M | Ext_A | Ext_F | Ext_D | Ext_B | Ext_V | Ext_S | Ext_U | Ext_Zicbom | Ext_Zicboz | Ext_Zicntr | Ext_Zicond | Ext_Zifencei | Ext_Zihpm | Ext_Zimop | Ext_Zmmul | Ext_Zaamo | Ext_Zabha | Ext_Zalrsc | Ext_Zfa | Ext_Zfh | Ext_Zfhmin | Ext_Zfinx | Ext_Zdinx | Ext_Zca | Ext_Zcb | Ext_Zcd | Ext_Zcf | Ext_Zcmop | Ext_C | Ext_Zba | Ext_Zbb | Ext_Zbc | Ext_Zbkb | Ext_Zbkc | Ext_Zbkx | Ext_Zbs | Ext_Zknd | Ext_Zkne | Ext_Zknh | Ext_Zkr | Ext_Zksed | Ext_Zksh | Ext_Zhinx | Ext_Zvbb | Ext_Zvkb | Ext_Zvbc | Ext_Zvknha | Ext_Zvknhb | Ext_Sscofpmf | Ext_Sstc | Ext_Svinval | Ext_Svnapot | Ext_Svpbmt | Ext_Smcntrpmf
deriving Inhabited, BEq
abbrev exc_code := (BitVec 8)
abbrev ext_ptw := Unit
abbrev ext_ptw_fail := Unit
abbrev ext_ptw_error := Unit
abbrev ext_exc_type := Unit
abbrev half := (BitVec 16)
abbrev word := (BitVec 32)
abbrev pagesize_bits : Int := 12
inductive regidx where
| Regidx (_ : (BitVec 5))
deriving Inhabited, BEq
inductive cregidx where
| Cregidx (_ : (BitVec 3))
deriving Inhabited, BEq
abbrev csreg := (BitVec 12)
inductive regno where
| Regno (_ : Nat)
deriving Inhabited, BEq
abbrev opcode := (BitVec 7)
abbrev imm12 := (BitVec 12)
abbrev imm20 := (BitVec 20)
abbrev amo := (BitVec 1)
inductive Architecture where | RV32 | RV64 | RV128
deriving Inhabited, BEq
abbrev arch_xlen := (BitVec 2)
abbrev priv_level := (BitVec 2)
inductive Privilege where | User | Supervisor | Machine
deriving Inhabited, BEq
/-- Type quantifiers: k_a : Type -/
inductive AccessType (k_a : Type) where
| Read (_ : k_a)
| Write (_ : k_a)
| ReadWrite (_ : (k_a × k_a))
| Execute (_ : Unit)
deriving Inhabited, BEq
inductive ExceptionType where
| E_Fetch_Addr_Align (_ : Unit)
| E_Fetch_Access_Fault (_ : Unit)
| E_Illegal_Instr (_ : Unit)
| E_Breakpoint (_ : Unit)
| E_Load_Addr_Align (_ : Unit)
| E_Load_Access_Fault (_ : Unit)
| E_SAMO_Addr_Align (_ : Unit)
| E_SAMO_Access_Fault (_ : Unit)
| E_U_EnvCall (_ : Unit)
| E_S_EnvCall (_ : Unit)
| E_Reserved_10 (_ : Unit)
| E_M_EnvCall (_ : Unit)
| E_Fetch_Page_Fault (_ : Unit)
| E_Load_Page_Fault (_ : Unit)
| E_Reserved_14 (_ : Unit)
| E_SAMO_Page_Fault (_ : Unit)
| E_Extension (_ : ext_exc_type)
deriving Inhabited, BEq
inductive amoop where | AMOSWAP | AMOADD | AMOXOR | AMOAND | AMOOR | AMOMIN | AMOMAX | AMOMINU | AMOMAXU
deriving Inhabited, BEq
inductive bop where | RISCV_BEQ | RISCV_BNE | RISCV_BLT | RISCV_BGE | RISCV_BLTU | RISCV_BGEU
deriving Inhabited, BEq
inductive cbop_zicbom where | CBO_CLEAN | CBO_FLUSH | CBO_INVAL
deriving Inhabited, BEq
inductive csrop where | CSRRW | CSRRS | CSRRC
deriving Inhabited, BEq
inductive f_bin_f_op_D where | FSGNJ_D | FSGNJN_D | FSGNJX_D | FMIN_D | FMAX_D
deriving Inhabited, BEq
inductive f_bin_f_op_H where | FSGNJ_H | FSGNJN_H | FSGNJX_H | FMIN_H | FMAX_H
deriving Inhabited, BEq
inductive f_bin_rm_op_D where | FADD_D | FSUB_D | FMUL_D | FDIV_D
deriving Inhabited, BEq
inductive f_bin_rm_op_H where | FADD_H | FSUB_H | FMUL_H | FDIV_H
deriving Inhabited, BEq
inductive f_bin_rm_op_S where | FADD_S | FSUB_S | FMUL_S | FDIV_S
deriving Inhabited, BEq
inductive f_bin_op_f_S where | FSGNJ_S | FSGNJN_S | FSGNJX_S | FMIN_S | FMAX_S
deriving Inhabited, BEq
inductive f_bin_op_x_S where | FEQ_S | FLT_S | FLE_S
deriving Inhabited, BEq
inductive f_bin_x_op_D where | FEQ_D | FLT_D | FLE_D
deriving Inhabited, BEq
inductive f_bin_x_op_H where | FEQ_H | FLT_H | FLE_H
deriving Inhabited, BEq
inductive f_madd_op_D where | FMADD_D | FMSUB_D | FNMSUB_D | FNMADD_D
deriving Inhabited, BEq
inductive f_madd_op_H where | FMADD_H | FMSUB_H | FNMSUB_H | FNMADD_H
deriving Inhabited, BEq
inductive f_madd_op_S where | FMADD_S | FMSUB_S | FNMSUB_S | FNMADD_S
deriving Inhabited, BEq
inductive f_un_f_op_D where | FMV_D_X
deriving Inhabited, BEq
inductive f_un_f_op_H where | FMV_H_X
deriving Inhabited, BEq
inductive f_un_rm_ff_op_D where | FSQRT_D | FCVT_S_D | FCVT_D_S
deriving Inhabited, BEq
inductive f_un_rm_ff_op_H where | FSQRT_H | FCVT_H_S | FCVT_H_D | FCVT_S_H | FCVT_D_H
deriving Inhabited, BEq
inductive f_un_rm_fx_op_D where | FCVT_W_D | FCVT_WU_D | FCVT_L_D | FCVT_LU_D
deriving Inhabited, BEq
inductive f_un_rm_fx_op_H where | FCVT_W_H | FCVT_WU_H | FCVT_L_H | FCVT_LU_H
deriving Inhabited, BEq
inductive f_un_rm_fx_op_S where | FCVT_W_S | FCVT_WU_S | FCVT_L_S | FCVT_LU_S
deriving Inhabited, BEq
inductive f_un_rm_xf_op_D where | FCVT_D_W | FCVT_D_WU | FCVT_D_L | FCVT_D_LU
deriving Inhabited, BEq
inductive f_un_rm_xf_op_H where | FCVT_H_W | FCVT_H_WU | FCVT_H_L | FCVT_H_LU
deriving Inhabited, BEq
inductive f_un_rm_xf_op_S where | FCVT_S_W | FCVT_S_WU | FCVT_S_L | FCVT_S_LU
deriving Inhabited, BEq
inductive f_un_op_f_S where | FMV_W_X
deriving Inhabited, BEq
inductive f_un_op_x_S where | FCLASS_S | FMV_X_W
deriving Inhabited, BEq
inductive f_un_x_op_D where | FCLASS_D | FMV_X_D
deriving Inhabited, BEq
inductive f_un_x_op_H where | FCLASS_H | FMV_X_H
deriving Inhabited, BEq
inductive fregidx where
| Fregidx (_ : (BitVec 5))
deriving Inhabited, BEq
inductive rounding_mode where | RM_RNE | RM_RTZ | RM_RDN | RM_RUP | RM_RMM | RM_DYN
deriving Inhabited, BEq
inductive fvfmafunct6 where | VF_VMADD | VF_VNMADD | VF_VMSUB | VF_VNMSUB | VF_VMACC | VF_VNMACC | VF_VMSAC | VF_VNMSAC
deriving Inhabited, BEq
inductive fvfmfunct6 where | VFM_VMFEQ | VFM_VMFLE | VFM_VMFLT | VFM_VMFNE | VFM_VMFGT | VFM_VMFGE
deriving Inhabited, BEq
inductive fvffunct6 where | VF_VADD | VF_VSUB | VF_VMIN | VF_VMAX | VF_VSGNJ | VF_VSGNJN | VF_VSGNJX | VF_VDIV | VF_VRDIV | VF_VMUL | VF_VRSUB | VF_VSLIDE1UP | VF_VSLIDE1DOWN
deriving Inhabited, BEq
inductive fvvmafunct6 where | FVV_VMADD | FVV_VNMADD | FVV_VMSUB | FVV_VNMSUB | FVV_VMACC | FVV_VNMACC | FVV_VMSAC | FVV_VNMSAC
deriving Inhabited, BEq
inductive fvvmfunct6 where | FVVM_VMFEQ | FVVM_VMFLE | FVVM_VMFLT | FVVM_VMFNE
deriving Inhabited, BEq
inductive fvvfunct6 where | FVV_VADD | FVV_VSUB | FVV_VMIN | FVV_VMAX | FVV_VSGNJ | FVV_VSGNJN | FVV_VSGNJX | FVV_VDIV | FVV_VMUL
deriving Inhabited, BEq
inductive fwffunct6 where | FWF_VADD | FWF_VSUB
deriving Inhabited, BEq
inductive fwvfmafunct6 where | FWVF_VMACC | FWVF_VNMACC | FWVF_VMSAC | FWVF_VNMSAC
deriving Inhabited, BEq
inductive fwvffunct6 where | FWVF_VADD | FWVF_VSUB | FWVF_VMUL
deriving Inhabited, BEq
inductive fwvfunct6 where | FWV_VADD | FWV_VSUB
deriving Inhabited, BEq
inductive fwvvmafunct6 where | FWVV_VMACC | FWVV_VNMACC | FWVV_VMSAC | FWVV_VNMSAC
deriving Inhabited, BEq
inductive fwvvfunct6 where | FWVV_VADD | FWVV_VSUB | FWVV_VMUL
deriving Inhabited, BEq
inductive iop where | RISCV_ADDI | RISCV_SLTI | RISCV_SLTIU | RISCV_XORI | RISCV_ORI | RISCV_ANDI
deriving Inhabited, BEq
inductive mmfunct6 where | MM_VMAND | MM_VMNAND | MM_VMANDN | MM_VMXOR | MM_VMOR | MM_VMNOR | MM_VMORN | MM_VMXNOR
deriving Inhabited, BEq
structure mul_op where
high : Bool
signed_rs1 : Bool
signed_rs2 : Bool
deriving Inhabited, BEq
inductive mvvmafunct6 where | MVV_VMACC | MVV_VNMSAC | MVV_VMADD | MVV_VNMSUB
deriving Inhabited, BEq
inductive mvvfunct6 where | MVV_VAADDU | MVV_VAADD | MVV_VASUBU | MVV_VASUB | MVV_VMUL | MVV_VMULH | MVV_VMULHU | MVV_VMULHSU | MVV_VDIVU | MVV_VDIV | MVV_VREMU | MVV_VREM
deriving Inhabited, BEq
inductive mvxmafunct6 where | MVX_VMACC | MVX_VNMSAC | MVX_VMADD | MVX_VNMSUB
deriving Inhabited, BEq
inductive mvxfunct6 where | MVX_VAADDU | MVX_VAADD | MVX_VASUBU | MVX_VASUB | MVX_VSLIDE1UP | MVX_VSLIDE1DOWN | MVX_VMUL | MVX_VMULH | MVX_VMULHU | MVX_VMULHSU | MVX_VDIVU | MVX_VDIV | MVX_VREMU | MVX_VREM
deriving Inhabited, BEq
inductive nisfunct6 where | NIS_VNSRL | NIS_VNSRA
deriving Inhabited, BEq
inductive nifunct6 where | NI_VNCLIPU | NI_VNCLIP
deriving Inhabited, BEq
inductive nvsfunct6 where | NVS_VNSRL | NVS_VNSRA
deriving Inhabited, BEq
inductive nvfunct6 where | NV_VNCLIPU | NV_VNCLIP
deriving Inhabited, BEq
inductive nxsfunct6 where | NXS_VNSRL | NXS_VNSRA
deriving Inhabited, BEq
inductive nxfunct6 where | NX_VNCLIPU | NX_VNCLIP
deriving Inhabited, BEq
inductive rfvvfunct6 where | FVV_VFREDOSUM | FVV_VFREDUSUM | FVV_VFREDMAX | FVV_VFREDMIN | FVV_VFWREDOSUM | FVV_VFWREDUSUM
deriving Inhabited, BEq
inductive rivvfunct6 where | IVV_VWREDSUMU | IVV_VWREDSUM
deriving Inhabited, BEq
inductive rmvvfunct6 where | MVV_VREDSUM | MVV_VREDAND | MVV_VREDOR | MVV_VREDXOR | MVV_VREDMINU | MVV_VREDMIN | MVV_VREDMAXU | MVV_VREDMAX
deriving Inhabited, BEq
inductive rop where | RISCV_ADD | RISCV_SUB | RISCV_SLL | RISCV_SLT | RISCV_SLTU | RISCV_XOR | RISCV_SRL | RISCV_SRA | RISCV_OR | RISCV_AND
deriving Inhabited, BEq
inductive ropw where | RISCV_ADDW | RISCV_SUBW | RISCV_SLLW | RISCV_SRLW | RISCV_SRAW
deriving Inhabited, BEq
inductive sop where | RISCV_SLLI | RISCV_SRLI | RISCV_SRAI
deriving Inhabited, BEq
inductive sopw where | RISCV_SLLIW | RISCV_SRLIW | RISCV_SRAIW
deriving Inhabited, BEq
inductive word_width where | BYTE | HALF | WORD | DOUBLE
deriving Inhabited, BEq
inductive uop where | RISCV_LUI | RISCV_AUIPC
deriving Inhabited, BEq
inductive vext2funct6 where | VEXT2_ZVF2 | VEXT2_SVF2
deriving Inhabited, BEq
inductive vext4funct6 where | VEXT4_ZVF4 | VEXT4_SVF4
deriving Inhabited, BEq
inductive vext8funct6 where | VEXT8_ZVF8 | VEXT8_SVF8
deriving Inhabited, BEq
inductive vfnunary0 where | FNV_CVT_XU_F | FNV_CVT_X_F | FNV_CVT_F_XU | FNV_CVT_F_X | FNV_CVT_F_F | FNV_CVT_ROD_F_F | FNV_CVT_RTZ_XU_F | FNV_CVT_RTZ_X_F
deriving Inhabited, BEq
inductive vfunary0 where | FV_CVT_XU_F | FV_CVT_X_F | FV_CVT_F_XU | FV_CVT_F_X | FV_CVT_RTZ_XU_F | FV_CVT_RTZ_X_F
deriving Inhabited, BEq
inductive vfunary1 where | FVV_VSQRT | FVV_VRSQRT7 | FVV_VREC7 | FVV_VCLASS
deriving Inhabited, BEq
inductive vfwunary0 where | FWV_CVT_XU_F | FWV_CVT_X_F | FWV_CVT_F_XU | FWV_CVT_F_X | FWV_CVT_F_F | FWV_CVT_RTZ_XU_F | FWV_CVT_RTZ_X_F
deriving Inhabited, BEq
inductive vicmpfunct6 where | VICMP_VMSEQ | VICMP_VMSNE | VICMP_VMSLEU | VICMP_VMSLE | VICMP_VMSGTU | VICMP_VMSGT
deriving Inhabited, BEq
inductive vimcfunct6 where | VIMC_VMADC
deriving Inhabited, BEq
inductive vimsfunct6 where | VIMS_VADC
deriving Inhabited, BEq
inductive vimfunct6 where | VIM_VMADC
deriving Inhabited, BEq
inductive visgfunct6 where | VI_VSLIDEUP | VI_VSLIDEDOWN | VI_VRGATHER
deriving Inhabited, BEq
inductive vifunct6 where | VI_VADD | VI_VRSUB | VI_VAND | VI_VOR | VI_VXOR | VI_VSADDU | VI_VSADD | VI_VSLL | VI_VSRL | VI_VSRA | VI_VSSRL | VI_VSSRA
deriving Inhabited, BEq
inductive vlewidth where | VLE8 | VLE16 | VLE32 | VLE64
deriving Inhabited, BEq
inductive vmlsop where | VLM | VSM
deriving Inhabited, BEq
inductive vregidx where
| Vregidx (_ : (BitVec 5))
deriving Inhabited, BEq
inductive zvkfunct6 where | ZVK_VSHA2CH | ZVK_VSHA2CL
deriving Inhabited, BEq
inductive vvcmpfunct6 where | VVCMP_VMSEQ | VVCMP_VMSNE | VVCMP_VMSLTU | VVCMP_VMSLT | VVCMP_VMSLEU | VVCMP_VMSLE
deriving Inhabited, BEq
inductive vvmcfunct6 where | VVMC_VMADC | VVMC_VMSBC
deriving Inhabited, BEq
inductive vvmsfunct6 where | VVMS_VADC | VVMS_VSBC
deriving Inhabited, BEq
inductive vvmfunct6 where | VVM_VMADC | VVM_VMSBC
deriving Inhabited, BEq
inductive vvfunct6 where | VV_VADD | VV_VSUB | VV_VMINU | VV_VMIN | VV_VMAXU | VV_VMAX | VV_VAND | VV_VOR | VV_VXOR | VV_VRGATHER | VV_VRGATHEREI16 | VV_VSADDU | VV_VSADD | VV_VSSUBU | VV_VSSUB | VV_VSLL | VV_VSMUL | VV_VSRL | VV_VSRA | VV_VSSRL | VV_VSSRA
deriving Inhabited, BEq
inductive vxcmpfunct6 where | VXCMP_VMSEQ | VXCMP_VMSNE | VXCMP_VMSLTU | VXCMP_VMSLT | VXCMP_VMSLEU | VXCMP_VMSLE | VXCMP_VMSGTU | VXCMP_VMSGT
deriving Inhabited, BEq
inductive vxmcfunct6 where | VXMC_VMADC | VXMC_VMSBC
deriving Inhabited, BEq
inductive vxmsfunct6 where | VXMS_VADC | VXMS_VSBC
deriving Inhabited, BEq
inductive vxmfunct6 where | VXM_VMADC | VXM_VMSBC
deriving Inhabited, BEq
inductive vxsgfunct6 where | VX_VSLIDEUP | VX_VSLIDEDOWN | VX_VRGATHER
deriving Inhabited, BEq
inductive vxfunct6 where | VX_VADD | VX_VSUB | VX_VRSUB | VX_VMINU | VX_VMIN | VX_VMAXU | VX_VMAX | VX_VAND | VX_VOR | VX_VXOR | VX_VSADDU | VX_VSADD | VX_VSSUBU | VX_VSSUB | VX_VSLL | VX_VSMUL | VX_VSRL | VX_VSRA | VX_VSSRL | VX_VSSRA
deriving Inhabited, BEq
inductive wmvvfunct6 where | WMVV_VWMACCU | WMVV_VWMACC | WMVV_VWMACCSU
deriving Inhabited, BEq
inductive wmvxfunct6 where | WMVX_VWMACCU | WMVX_VWMACC | WMVX_VWMACCUS | WMVX_VWMACCSU
deriving Inhabited, BEq
inductive wvfunct6 where | WV_VADD | WV_VSUB | WV_VADDU | WV_VSUBU
deriving Inhabited, BEq
inductive wvvfunct6 where | WVV_VADD | WVV_VSUB | WVV_VADDU | WVV_VSUBU | WVV_VWMUL | WVV_VWMULU | WVV_VWMULSU
deriving Inhabited, BEq
inductive wvxfunct6 where | WVX_VADD | WVX_VSUB | WVX_VADDU | WVX_VSUBU | WVX_VWMUL | WVX_VWMULU | WVX_VWMULSU
deriving Inhabited, BEq
inductive wxfunct6 where | WX_VADD | WX_VSUB | WX_VADDU | WX_VSUBU
deriving Inhabited, BEq
inductive brop_zba where | RISCV_SH1ADD | RISCV_SH2ADD | RISCV_SH3ADD
deriving Inhabited, BEq
inductive bropw_zba where | RISCV_ADDUW | RISCV_SH1ADDUW | RISCV_SH2ADDUW | RISCV_SH3ADDUW
deriving Inhabited, BEq
inductive extop_zbb where | RISCV_SEXTB | RISCV_SEXTH | RISCV_ZEXTH
deriving Inhabited, BEq
inductive brop_zbb where | RISCV_ANDN | RISCV_ORN | RISCV_XNOR | RISCV_MAX | RISCV_MAXU | RISCV_MIN | RISCV_MINU | RISCV_ROL | RISCV_ROR
deriving Inhabited, BEq
inductive bropw_zbb where | RISCV_ROLW | RISCV_RORW
deriving Inhabited, BEq
inductive brop_zbkb where | RISCV_PACK | RISCV_PACKH
deriving Inhabited, BEq
inductive biop_zbs where | RISCV_BCLRI | RISCV_BEXTI | RISCV_BINVI | RISCV_BSETI
deriving Inhabited, BEq
inductive brop_zbs where | RISCV_BCLR | RISCV_BEXT | RISCV_BINV | RISCV_BSET
deriving Inhabited, BEq
inductive zicondop where | RISCV_CZERO_EQZ | RISCV_CZERO_NEZ
deriving Inhabited, BEq
inductive f_un_rm_ff_op_S where | FSQRT_S
deriving Inhabited, BEq
inductive ast where
| ILLEGAL (_ : word)
| C_ILLEGAL (_ : half)
| UTYPE (_ : ((BitVec 20) × regidx × uop))
| RISCV_JAL (_ : ((BitVec 21) × regidx))
| RISCV_JALR (_ : ((BitVec 12) × regidx × regidx))
| BTYPE (_ : ((BitVec 13) × regidx × regidx × bop))
| ITYPE (_ : ((BitVec 12) × regidx × regidx × iop))
| SHIFTIOP (_ : ((BitVec 6) × regidx × regidx × sop))
| RTYPE (_ : (regidx × regidx × regidx × rop))
| LOAD (_ : ((BitVec 12) × regidx × regidx × Bool × word_width × Bool × Bool))
| STORE (_ : ((BitVec 12) × regidx × regidx × word_width × Bool × Bool))
| ADDIW (_ : ((BitVec 12) × regidx × regidx))
| RTYPEW (_ : (regidx × regidx × regidx × ropw))
| SHIFTIWOP (_ : ((BitVec 5) × regidx × regidx × sopw))
| FENCE (_ : ((BitVec 4) × (BitVec 4)))
| FENCE_TSO (_ : ((BitVec 4) × (BitVec 4)))
| ECALL (_ : Unit)
| MRET (_ : Unit)
| SRET (_ : Unit)
| EBREAK (_ : Unit)
| WFI (_ : Unit)
| SFENCE_VMA (_ : (regidx × regidx))
| FENCEI (_ : Unit)
| LOADRES (_ : (Bool × Bool × regidx × word_width × regidx))
| STORECON (_ : (Bool × Bool × regidx × regidx × word_width × regidx))
| AMO (_ : (amoop × Bool × Bool × regidx × regidx × word_width × regidx))
| C_NOP (_ : Unit)
| C_ADDI4SPN (_ : (cregidx × (BitVec 8)))
| C_LW (_ : ((BitVec 5) × cregidx × cregidx))
| C_LD (_ : ((BitVec 5) × cregidx × cregidx))
| C_SW (_ : ((BitVec 5) × cregidx × cregidx))
| C_SD (_ : ((BitVec 5) × cregidx × cregidx))
| C_ADDI (_ : ((BitVec 6) × regidx))
| C_JAL (_ : (BitVec 11))
| C_ADDIW (_ : ((BitVec 6) × regidx))
| C_LI (_ : ((BitVec 6) × regidx))
| C_ADDI16SP (_ : (BitVec 6))
| C_LUI (_ : ((BitVec 6) × regidx))
| C_SRLI (_ : ((BitVec 6) × cregidx))
| C_SRAI (_ : ((BitVec 6) × cregidx))
| C_ANDI (_ : ((BitVec 6) × cregidx))
| C_SUB (_ : (cregidx × cregidx))
| C_XOR (_ : (cregidx × cregidx))
| C_OR (_ : (cregidx × cregidx))
| C_AND (_ : (cregidx × cregidx))
| C_SUBW (_ : (cregidx × cregidx))
| C_ADDW (_ : (cregidx × cregidx))
| C_J (_ : (BitVec 11))
| C_BEQZ (_ : ((BitVec 8) × cregidx))
| C_BNEZ (_ : ((BitVec 8) × cregidx))
| C_SLLI (_ : ((BitVec 6) × regidx))
| C_LWSP (_ : ((BitVec 6) × regidx))
| C_LDSP (_ : ((BitVec 6) × regidx))
| C_SWSP (_ : ((BitVec 6) × regidx))
| C_SDSP (_ : ((BitVec 6) × regidx))
| C_JR (_ : regidx)
| C_JALR (_ : regidx)
| C_MV (_ : (regidx × regidx))
| C_EBREAK (_ : Unit)
| C_ADD (_ : (regidx × regidx))
| MUL (_ : (regidx × regidx × regidx × mul_op))
| DIV (_ : (regidx × regidx × regidx × Bool))
| REM (_ : (regidx × regidx × regidx × Bool))
| MULW (_ : (regidx × regidx × regidx))
| DIVW (_ : (regidx × regidx × regidx × Bool))
| REMW (_ : (regidx × regidx × regidx × Bool))
| CSRReg (_ : (csreg × regidx × regidx × csrop))
| CSRImm (_ : (csreg × (BitVec 5) × regidx × csrop))
| C_NOP_HINT (_ : (BitVec 6))
| C_ADDI_HINT (_ : regidx)
| C_LI_HINT (_ : (BitVec 6))
| C_LUI_HINT (_ : (BitVec 6))
| C_MV_HINT (_ : regidx)
| C_ADD_HINT (_ : regidx)
| C_SLLI_HINT (_ : ((BitVec 6) × regidx))
| C_SRLI_HINT (_ : cregidx)
| C_SRAI_HINT (_ : cregidx)
| FENCE_RESERVED (_ : ((BitVec 4) × (BitVec 4) × (BitVec 4) × regidx × regidx))
| FENCEI_RESERVED (_ : ((BitVec 12) × regidx × regidx))
| LOAD_FP (_ : ((BitVec 12) × regidx × fregidx × word_width))
| STORE_FP (_ : ((BitVec 12) × fregidx × regidx × word_width))
| F_MADD_TYPE_S (_ : (fregidx × fregidx × fregidx × rounding_mode × fregidx × f_madd_op_S))
| F_BIN_RM_TYPE_S (_ : (fregidx × fregidx × rounding_mode × fregidx × f_bin_rm_op_S))
| F_UN_RM_FF_TYPE_S (_ : (fregidx × rounding_mode × fregidx × f_un_rm_ff_op_S))
| F_UN_RM_FX_TYPE_S (_ : (fregidx × rounding_mode × regidx × f_un_rm_fx_op_S))
| F_UN_RM_XF_TYPE_S (_ : (regidx × rounding_mode × fregidx × f_un_rm_xf_op_S))
| F_BIN_TYPE_F_S (_ : (fregidx × fregidx × fregidx × f_bin_op_f_S))
| F_BIN_TYPE_X_S (_ : (fregidx × fregidx × regidx × f_bin_op_x_S))
| F_UN_TYPE_F_S (_ : (regidx × fregidx × f_un_op_f_S))
| F_UN_TYPE_X_S (_ : (fregidx × regidx × f_un_op_x_S))
| C_FLWSP (_ : ((BitVec 6) × fregidx))
| C_FSWSP (_ : ((BitVec 6) × fregidx))
| C_FLW (_ : ((BitVec 5) × cregidx × cregidx))
| C_FSW (_ : ((BitVec 5) × cregidx × cregidx))
| F_MADD_TYPE_D (_ : (fregidx × fregidx × fregidx × rounding_mode × fregidx × f_madd_op_D))
| F_BIN_RM_TYPE_D (_ : (fregidx × fregidx × rounding_mode × fregidx × f_bin_rm_op_D))
| F_UN_RM_FF_TYPE_D (_ : (fregidx × rounding_mode × fregidx × f_un_rm_ff_op_D))
| F_UN_RM_XF_TYPE_D (_ : (regidx × rounding_mode × fregidx × f_un_rm_xf_op_D))
| F_UN_RM_FX_TYPE_D (_ : (fregidx × rounding_mode × regidx × f_un_rm_fx_op_D))
| F_BIN_F_TYPE_D (_ : (fregidx × fregidx × fregidx × f_bin_f_op_D))
| F_BIN_X_TYPE_D (_ : (fregidx × fregidx × regidx × f_bin_x_op_D))
| F_UN_X_TYPE_D (_ : (fregidx × regidx × f_un_x_op_D))
| F_UN_F_TYPE_D (_ : (regidx × fregidx × f_un_f_op_D))
| C_FLDSP (_ : ((BitVec 6) × fregidx))
| C_FSDSP (_ : ((BitVec 6) × fregidx))
| C_FLD (_ : ((BitVec 5) × cregidx × cregidx))
| C_FSD (_ : ((BitVec 5) × cregidx × cregidx))
| SINVAL_VMA (_ : (regidx × regidx))
| SFENCE_W_INVAL (_ : Unit)
| SFENCE_INVAL_IR (_ : Unit)
| RISCV_SLLIUW (_ : ((BitVec 6) × regidx × regidx))
| ZBA_RTYPEUW (_ : (regidx × regidx × regidx × bropw_zba))
| ZBA_RTYPE (_ : (regidx × regidx × regidx × brop_zba))
| RISCV_RORIW (_ : ((BitVec 5) × regidx × regidx))
| RISCV_RORI (_ : ((BitVec 6) × regidx × regidx))
| ZBB_RTYPEW (_ : (regidx × regidx × regidx × bropw_zbb))
| ZBB_RTYPE (_ : (regidx × regidx × regidx × brop_zbb))
| ZBB_EXTOP (_ : (regidx × regidx × extop_zbb))
| RISCV_REV8 (_ : (regidx × regidx))
| RISCV_ORCB (_ : (regidx × regidx))
| RISCV_CPOP (_ : (regidx × regidx))
| RISCV_CPOPW (_ : (regidx × regidx))
| RISCV_CLZ (_ : (regidx × regidx))
| RISCV_CLZW (_ : (regidx × regidx))
| RISCV_CTZ (_ : (regidx × regidx))
| RISCV_CTZW (_ : (regidx × regidx))
| RISCV_CLMUL (_ : (regidx × regidx × regidx))
| RISCV_CLMULH (_ : (regidx × regidx × regidx))
| RISCV_CLMULR (_ : (regidx × regidx × regidx))
| ZBS_IOP (_ : ((BitVec 6) × regidx × regidx × biop_zbs))
| ZBS_RTYPE (_ : (regidx × regidx × regidx × brop_zbs))
| C_LBU (_ : ((BitVec 2) × cregidx × cregidx))
| C_LHU (_ : ((BitVec 2) × cregidx × cregidx))
| C_LH (_ : ((BitVec 2) × cregidx × cregidx))
| C_SB (_ : ((BitVec 2) × cregidx × cregidx))
| C_SH (_ : ((BitVec 2) × cregidx × cregidx))
| C_ZEXT_B (_ : cregidx)
| C_SEXT_B (_ : cregidx)
| C_ZEXT_H (_ : cregidx)
| C_SEXT_H (_ : cregidx)
| C_ZEXT_W (_ : cregidx)
| C_NOT (_ : cregidx)
| C_MUL (_ : (cregidx × cregidx))
| F_BIN_RM_TYPE_H (_ : (fregidx × fregidx × rounding_mode × fregidx × f_bin_rm_op_H))
| F_MADD_TYPE_H (_ : (fregidx × fregidx × fregidx × rounding_mode × fregidx × f_madd_op_H))
| F_BIN_F_TYPE_H (_ : (fregidx × fregidx × fregidx × f_bin_f_op_H))
| F_BIN_X_TYPE_H (_ : (fregidx × fregidx × regidx × f_bin_x_op_H))
| F_UN_RM_FF_TYPE_H (_ : (fregidx × rounding_mode × fregidx × f_un_rm_ff_op_H))
| F_UN_RM_FX_TYPE_H (_ : (fregidx × rounding_mode × regidx × f_un_rm_fx_op_H))
| F_UN_RM_XF_TYPE_H (_ : (regidx × rounding_mode × fregidx × f_un_rm_xf_op_H))
| F_UN_F_TYPE_H (_ : (regidx × fregidx × f_un_f_op_H))
| F_UN_X_TYPE_H (_ : (fregidx × regidx × f_un_x_op_H))
| RISCV_FLI_H (_ : ((BitVec 5) × fregidx))
| RISCV_FLI_S (_ : ((BitVec 5) × fregidx))
| RISCV_FLI_D (_ : ((BitVec 5) × fregidx))
| RISCV_FMINM_H (_ : (fregidx × fregidx × fregidx))
| RISCV_FMAXM_H (_ : (fregidx × fregidx × fregidx))
| RISCV_FMINM_S (_ : (fregidx × fregidx × fregidx))
| RISCV_FMAXM_S (_ : (fregidx × fregidx × fregidx))
| RISCV_FMINM_D (_ : (fregidx × fregidx × fregidx))
| RISCV_FMAXM_D (_ : (fregidx × fregidx × fregidx))
| RISCV_FROUND_H (_ : (fregidx × rounding_mode × fregidx))
| RISCV_FROUNDNX_H (_ : (fregidx × rounding_mode × fregidx))
| RISCV_FROUND_S (_ : (fregidx × rounding_mode × fregidx))
| RISCV_FROUNDNX_S (_ : (fregidx × rounding_mode × fregidx))
| RISCV_FROUND_D (_ : (fregidx × rounding_mode × fregidx))
| RISCV_FROUNDNX_D (_ : (fregidx × rounding_mode × fregidx))
| RISCV_FMVH_X_D (_ : (fregidx × regidx))
| RISCV_FMVP_D_X (_ : (regidx × regidx × fregidx))
| RISCV_FLEQ_H (_ : (fregidx × fregidx × regidx))
| RISCV_FLTQ_H (_ : (fregidx × fregidx × regidx))
| RISCV_FLEQ_S (_ : (fregidx × fregidx × regidx))
| RISCV_FLTQ_S (_ : (fregidx × fregidx × regidx))
| RISCV_FLEQ_D (_ : (fregidx × fregidx × regidx))
| RISCV_FLTQ_D (_ : (fregidx × fregidx × regidx))
| RISCV_FCVTMOD_W_D (_ : (fregidx × regidx))
| SHA256SIG0 (_ : (regidx × regidx))
| SHA256SIG1 (_ : (regidx × regidx))
| SHA256SUM0 (_ : (regidx × regidx))
| SHA256SUM1 (_ : (regidx × regidx))
| AES32ESMI (_ : ((BitVec 2) × regidx × regidx × regidx))
| AES32ESI (_ : ((BitVec 2) × regidx × regidx × regidx))
| AES32DSMI (_ : ((BitVec 2) × regidx × regidx × regidx))
| AES32DSI (_ : ((BitVec 2) × regidx × regidx × regidx))
| SHA512SIG0L (_ : (regidx × regidx × regidx))
| SHA512SIG0H (_ : (regidx × regidx × regidx))
| SHA512SIG1L (_ : (regidx × regidx × regidx))
| SHA512SIG1H (_ : (regidx × regidx × regidx))
| SHA512SUM0R (_ : (regidx × regidx × regidx))
| SHA512SUM1R (_ : (regidx × regidx × regidx))
| AES64KS1I (_ : ((BitVec 4) × regidx × regidx))
| AES64KS2 (_ : (regidx × regidx × regidx))
| AES64IM (_ : (regidx × regidx))
| AES64ESM (_ : (regidx × regidx × regidx))
| AES64ES (_ : (regidx × regidx × regidx))
| AES64DSM (_ : (regidx × regidx × regidx))
| AES64DS (_ : (regidx × regidx × regidx))
| SHA512SIG0 (_ : (regidx × regidx))
| SHA512SIG1 (_ : (regidx × regidx))
| SHA512SUM0 (_ : (regidx × regidx))
#exit -- inserted for benchmarking purposes
| SHA512SUM1 (_ : (regidx × regidx))
| SM3P0 (_ : (regidx × regidx))
| SM3P1 (_ : (regidx × regidx))
| SM4ED (_ : ((BitVec 2) × regidx × regidx × regidx))
| SM4KS (_ : ((BitVec 2) × regidx × regidx × regidx))
| ZBKB_RTYPE (_ : (regidx × regidx × regidx × brop_zbkb))
| ZBKB_PACKW (_ : (regidx × regidx × regidx))
| RISCV_ZIP (_ : (regidx × regidx))
| RISCV_UNZIP (_ : (regidx × regidx))
| RISCV_BREV8 (_ : (regidx × regidx))
| RISCV_XPERM8 (_ : (regidx × regidx × regidx))
| RISCV_XPERM4 (_ : (regidx × regidx × regidx))
| ZICOND_RTYPE (_ : (regidx × regidx × regidx × zicondop))
| VSETVLI (_ : ((BitVec 1) × (BitVec 1) × (BitVec 3) × (BitVec 3) × regidx × regidx))
| VSETVL (_ : (regidx × regidx × regidx))
| VSETIVLI (_ : ((BitVec 1) × (BitVec 1) × (BitVec 3) × (BitVec 3) × (BitVec 5) × regidx))
| VVTYPE (_ : (vvfunct6 × (BitVec 1) × vregidx × vregidx × vregidx))
| NVSTYPE (_ : (nvsfunct6 × (BitVec 1) × vregidx × vregidx × vregidx))
| NVTYPE (_ : (nvfunct6 × (BitVec 1) × vregidx × vregidx × vregidx))
| MASKTYPEV (_ : (vregidx × vregidx × vregidx))
| MOVETYPEV (_ : (vregidx × vregidx))
| VXTYPE (_ : (vxfunct6 × (BitVec 1) × vregidx × regidx × vregidx))
| NXSTYPE (_ : (nxsfunct6 × (BitVec 1) × vregidx × regidx × vregidx))
| NXTYPE (_ : (nxfunct6 × (BitVec 1) × vregidx × regidx × vregidx))
| VXSG (_ : (vxsgfunct6 × (BitVec 1) × vregidx × regidx × vregidx))
| MASKTYPEX (_ : (vregidx × regidx × vregidx))
| MOVETYPEX (_ : (regidx × vregidx))
| VITYPE (_ : (vifunct6 × (BitVec 1) × vregidx × (BitVec 5) × vregidx))
| NISTYPE (_ : (nisfunct6 × (BitVec 1) × vregidx × (BitVec 5) × vregidx))
| NITYPE (_ : (nifunct6 × (BitVec 1) × vregidx × (BitVec 5) × vregidx))
| VISG (_ : (visgfunct6 × (BitVec 1) × vregidx × (BitVec 5) × vregidx))
| MASKTYPEI (_ : (vregidx × (BitVec 5) × vregidx))
| MOVETYPEI (_ : (vregidx × (BitVec 5)))
| VMVRTYPE (_ : (vregidx × (BitVec 5) × vregidx))
| MVVTYPE (_ : (mvvfunct6 × (BitVec 1) × vregidx × vregidx × vregidx))
| MVVMATYPE (_ : (mvvmafunct6 × (BitVec 1) × vregidx × vregidx × vregidx))
| WVVTYPE (_ : (wvvfunct6 × (BitVec 1) × vregidx × vregidx × vregidx))
| WVTYPE (_ : (wvfunct6 × (BitVec 1) × vregidx × vregidx × vregidx))
| WMVVTYPE (_ : (wmvvfunct6 × (BitVec 1) × vregidx × vregidx × vregidx))
| VEXT2TYPE (_ : (vext2funct6 × (BitVec 1) × vregidx × vregidx))
| VEXT4TYPE (_ : (vext4funct6 × (BitVec 1) × vregidx × vregidx))
| VEXT8TYPE (_ : (vext8funct6 × (BitVec 1) × vregidx × vregidx))
| VMVXS (_ : (vregidx × regidx))
| MVVCOMPRESS (_ : (vregidx × vregidx × vregidx))
| MVXTYPE (_ : (mvxfunct6 × (BitVec 1) × vregidx × regidx × vregidx))
| MVXMATYPE (_ : (mvxmafunct6 × (BitVec 1) × vregidx × regidx × vregidx))
| WVXTYPE (_ : (wvxfunct6 × (BitVec 1) × vregidx × regidx × vregidx))
| WXTYPE (_ : (wxfunct6 × (BitVec 1) × vregidx × regidx × vregidx))
| WMVXTYPE (_ : (wmvxfunct6 × (BitVec 1) × vregidx × regidx × vregidx))
| VMVSX (_ : (regidx × vregidx))
| FVVTYPE (_ : (fvvfunct6 × (BitVec 1) × vregidx × vregidx × vregidx))
| FVVMATYPE (_ : (fvvmafunct6 × (BitVec 1) × vregidx × vregidx × vregidx))
| FWVVTYPE (_ : (fwvvfunct6 × (BitVec 1) × vregidx × vregidx × vregidx))
| FWVVMATYPE (_ : (fwvvmafunct6 × (BitVec 1) × vregidx × vregidx × vregidx))
| FWVTYPE (_ : (fwvfunct6 × (BitVec 1) × vregidx × vregidx × vregidx))
| VFUNARY0 (_ : ((BitVec 1) × vregidx × vfunary0 × vregidx))
| VFWUNARY0 (_ : ((BitVec 1) × vregidx × vfwunary0 × vregidx))
| VFNUNARY0 (_ : ((BitVec 1) × vregidx × vfnunary0 × vregidx))
| VFUNARY1 (_ : ((BitVec 1) × vregidx × vfunary1 × vregidx))
| VFMVFS (_ : (vregidx × fregidx))
| FVFTYPE (_ : (fvffunct6 × (BitVec 1) × vregidx × fregidx × vregidx))
| FVFMATYPE (_ : (fvfmafunct6 × (BitVec 1) × vregidx × fregidx × vregidx))
| FWVFTYPE (_ : (fwvffunct6 × (BitVec 1) × vregidx × fregidx × vregidx))
| FWVFMATYPE (_ : (fwvfmafunct6 × (BitVec 1) × fregidx × vregidx × vregidx))
| FWFTYPE (_ : (fwffunct6 × (BitVec 1) × vregidx × fregidx × vregidx))
| VFMERGE (_ : (vregidx × fregidx × vregidx))
| VFMV (_ : (fregidx × vregidx))
| VFMVSF (_ : (fregidx × vregidx))
| VLSEGTYPE (_ : ((BitVec 3) × (BitVec 1) × regidx × vlewidth × vregidx))
| VLSEGFFTYPE (_ : ((BitVec 3) × (BitVec 1) × regidx × vlewidth × vregidx))
| VSSEGTYPE (_ : ((BitVec 3) × (BitVec 1) × regidx × vlewidth × vregidx))
| VLSSEGTYPE (_ : ((BitVec 3) × (BitVec 1) × regidx × regidx × vlewidth × vregidx))
| VSSSEGTYPE (_ : ((BitVec 3) × (BitVec 1) × regidx × regidx × vlewidth × vregidx))
| VLUXSEGTYPE (_ : ((BitVec 3) × (BitVec 1) × vregidx × regidx × vlewidth × vregidx))
| VLOXSEGTYPE (_ : ((BitVec 3) × (BitVec 1) × vregidx × regidx × vlewidth × vregidx))
| VSUXSEGTYPE (_ : ((BitVec 3) × (BitVec 1) × vregidx × regidx × vlewidth × vregidx))
| VSOXSEGTYPE (_ : ((BitVec 3) × (BitVec 1) × vregidx × regidx × vlewidth × vregidx))
| VLRETYPE (_ : ((BitVec 3) × regidx × vlewidth × vregidx))
| VSRETYPE (_ : ((BitVec 3) × regidx × vregidx))
| VMTYPE (_ : (regidx × vregidx × vmlsop))
| MMTYPE (_ : (mmfunct6 × vregidx × vregidx × vregidx))
| VCPOP_M (_ : ((BitVec 1) × vregidx × regidx))
| VFIRST_M (_ : ((BitVec 1) × vregidx × regidx))
| VMSBF_M (_ : ((BitVec 1) × vregidx × vregidx))
| VMSIF_M (_ : ((BitVec 1) × vregidx × vregidx))
| VMSOF_M (_ : ((BitVec 1) × vregidx × vregidx))
| VIOTA_M (_ : ((BitVec 1) × vregidx × vregidx))
| VID_V (_ : ((BitVec 1) × vregidx))
| VVMTYPE (_ : (vvmfunct6 × vregidx × vregidx × vregidx))
| VVMCTYPE (_ : (vvmcfunct6 × vregidx × vregidx × vregidx))
| VVMSTYPE (_ : (vvmsfunct6 × vregidx × vregidx × vregidx))
| VVCMPTYPE (_ : (vvcmpfunct6 × (BitVec 1) × vregidx × vregidx × vregidx))
| VXMTYPE (_ : (vxmfunct6 × vregidx × regidx × vregidx))
| VXMCTYPE (_ : (vxmcfunct6 × vregidx × regidx × vregidx))
| VXMSTYPE (_ : (vxmsfunct6 × vregidx × regidx × vregidx))
| VXCMPTYPE (_ : (vxcmpfunct6 × (BitVec 1) × vregidx × regidx × vregidx))
| VIMTYPE (_ : (vimfunct6 × vregidx × (BitVec 5) × vregidx))
| VIMCTYPE (_ : (vimcfunct6 × vregidx × (BitVec 5) × vregidx))
| VIMSTYPE (_ : (vimsfunct6 × vregidx × (BitVec 5) × vregidx))
| VICMPTYPE (_ : (vicmpfunct6 × (BitVec 1) × vregidx × (BitVec 5) × vregidx))
| FVVMTYPE (_ : (fvvmfunct6 × (BitVec 1) × vregidx × vregidx × vregidx))
| FVFMTYPE (_ : (fvfmfunct6 × (BitVec 1) × vregidx × fregidx × vregidx))
| RIVVTYPE (_ : (rivvfunct6 × (BitVec 1) × vregidx × vregidx × vregidx))
| RMVVTYPE (_ : (rmvvfunct6 × (BitVec 1) × vregidx × vregidx × vregidx))
| RFVVTYPE (_ : (rfvvfunct6 × (BitVec 1) × vregidx × vregidx × vregidx))
| RISCV_ZICBOM (_ : (cbop_zicbom × regidx))
| RISCV_ZICBOZ (_ : regidx)
| VANDN_VV (_ : ((BitVec 1) × vregidx × vregidx × vregidx))
| VANDN_VX (_ : ((BitVec 1) × vregidx × regidx × vregidx))
| VBREV_V (_ : ((BitVec 1) × vregidx × vregidx))
| VBREV8_V (_ : ((BitVec 1) × vregidx × vregidx))
| VREV8_V (_ : ((BitVec 1) × vregidx × vregidx))
| VCLZ_V (_ : ((BitVec 1) × vregidx × vregidx))
| VCTZ_V (_ : ((BitVec 1) × vregidx × vregidx))
| VCPOP_V (_ : ((BitVec 1) × vregidx × vregidx))
| VROL_VV (_ : ((BitVec 1) × vregidx × vregidx × vregidx))
| VROL_VX (_ : ((BitVec 1) × vregidx × regidx × vregidx))
| VROR_VV (_ : ((BitVec 1) × vregidx × vregidx × vregidx))
| VROR_VX (_ : ((BitVec 1) × vregidx × regidx × vregidx))
| VROR_VI (_ : ((BitVec 1) × vregidx × (BitVec 5) × vregidx))
| VWSLL_VV (_ : ((BitVec 1) × vregidx × vregidx × vregidx))
| VWSLL_VX (_ : ((BitVec 1) × vregidx × regidx × vregidx))
| VWSLL_VI (_ : ((BitVec 1) × vregidx × (BitVec 5) × vregidx))
| VCLMUL_VV (_ : ((BitVec 1) × vregidx × vregidx × vregidx))
| VCLMUL_VX (_ : ((BitVec 1) × vregidx × regidx × vregidx))
| VCLMULH_VV (_ : ((BitVec 1) × vregidx × vregidx × vregidx))
| VCLMULH_VX (_ : ((BitVec 1) × vregidx × regidx × vregidx))
| VSHA2MS_VV (_ : (vregidx × vregidx × vregidx))
| ZVKSHA2TYPE (_ : (zvkfunct6 × vregidx × vregidx × vregidx))
| ZIMOP_MOP_R (_ : ((BitVec 5) × regidx × regidx))
| ZIMOP_MOP_RR (_ : ((BitVec 3) × regidx × regidx × regidx))
| ZCMOP (_ : (BitVec 3))
-- deriving Inhabited, BEq
deriving Inhabited
#exit -- inserted for benchmarking purposes
inductive PTW_Error where
| PTW_Invalid_Addr (_ : Unit)
| PTW_Access (_ : Unit)
| PTW_Invalid_PTE (_ : Unit)
| PTW_No_Permission (_ : Unit)
| PTW_Misaligned (_ : Unit)
| PTW_PTE_Update (_ : Unit)
| PTW_Ext_Error (_ : ext_ptw_error)
deriving Inhabited, BEq
/-- Type quantifiers: k_a : Type -/
inductive ExecutionResult (k_a : Type) where
| RETIRE_OK (_ : Unit)
| RETIRE_FAIL (_ : k_a)
deriving Inhabited, BEq
inductive InterruptType where | I_U_Software | I_S_Software | I_M_Software | I_U_Timer | I_S_Timer | I_M_Timer | I_U_External | I_S_External | I_M_External
deriving Inhabited, BEq
abbrev tv_mode := (BitVec 2)
inductive TrapVectorMode where | TV_Direct | TV_Vector | TV_Reserved
deriving Inhabited, BEq
abbrev ext_status := (BitVec 2)
inductive ExtStatus where | Off | Initial | Clean | Dirty
deriving Inhabited, BEq
abbrev satp_mode := (BitVec 4)
inductive SATPMode where | Bare | Sv32 | Sv39 | Sv48 | Sv57
deriving Inhabited, BEq
abbrev csrRW := (BitVec 2)
abbrev level_range (k_v : Nat) := Nat
abbrev pte_bits k_v := (BitVec (bif k_v = 32 then 32 else 64))
abbrev ppn_bits k_v := (BitVec (bif k_v = 32 then 22 else 44))
abbrev vpn_bits k_v := (BitVec (k_v - 12))
abbrev ext_access_type := Unit
abbrev regtype := xlenbits
abbrev fregtype := flenbits
abbrev Misa := (BitVec (2 ^ 3 * 8))
abbrev Mstatus := (BitVec 64)
abbrev MEnvcfg := (BitVec 64)
abbrev SEnvcfg := (BitVec (2 ^ 3 * 8))
abbrev Minterrupts := (BitVec (2 ^ 3 * 8))
abbrev Medeleg := (BitVec 64)
abbrev Mtvec := (BitVec (2 ^ 3 * 8))
abbrev Mcause := (BitVec (2 ^ 3 * 8))
abbrev Counteren := (BitVec 32)
abbrev Counterin := (BitVec 32)
abbrev Sstatus := (BitVec 64)
abbrev Sinterrupts := (BitVec (2 ^ 3 * 8))
abbrev Satp64 := (BitVec 64)
abbrev Satp32 := (BitVec 32)
abbrev Vtype := (BitVec (2 ^ 3 * 8))
inductive agtype where | UNDISTURBED | AGNOSTIC
deriving Inhabited, BEq
inductive PmpAddrMatchType where | OFF | TOR | NA4 | NAPOT
deriving Inhabited, BEq
abbrev Pmpcfg_ent := (BitVec 8)
inductive pmpAddrMatch where | PMP_NoMatch | PMP_PartialMatch | PMP_Match
deriving Inhabited, BEq
inductive pmpMatch where | PMP_Success | PMP_Continue | PMP_Fail
deriving Inhabited, BEq
/-- Type quantifiers: k_a : Type -/
inductive Ext_FetchAddr_Check (k_a : Type) where
| Ext_FetchAddr_OK (_ : virtaddr)
| Ext_FetchAddr_Error (_ : k_a)
deriving Inhabited, BEq
/-- Type quantifiers: k_a : Type -/
inductive Ext_ControlAddr_Check (k_a : Type) where
| Ext_ControlAddr_OK (_ : virtaddr)
| Ext_ControlAddr_Error (_ : k_a)
deriving Inhabited, BEq
/-- Type quantifiers: k_a : Type -/
inductive Ext_DataAddr_Check (k_a : Type) where
| Ext_DataAddr_OK (_ : virtaddr)
| Ext_DataAddr_Error (_ : k_a)
deriving Inhabited, BEq
inductive Ext_PhysAddr_Check where
| Ext_PhysAddr_OK (_ : Unit)
| Ext_PhysAddr_Error (_ : ExceptionType)
deriving Inhabited, BEq
abbrev ext_fetch_addr_error := Unit
abbrev ext_control_addr_error := Unit
abbrev ext_data_addr_error := Unit
abbrev vreglenbits := (BitVec 65536)
abbrev vregtype := vreglenbits
inductive maskfunct3 where | VV_VMERGE | VI_VMERGE | VX_VMERGE
deriving Inhabited, BEq
inductive vregno where
| Vregno (_ : Nat)
deriving Inhabited, BEq
abbrev Vcsr := (BitVec 3)
abbrev ext_exception := Unit
structure sync_exception where
trap : ExceptionType
excinfo : (Option xlenbits)
ext : (Option ext_exception)
deriving Inhabited, BEq
abbrev HpmEvent := (BitVec 64)
abbrev hpmidx := Nat
inductive seed_opst where | BIST | ES16 | WAIT | DEAD
deriving Inhabited, BEq
abbrev bits_rm := (BitVec 3)
abbrev bits_fflags := (BitVec 5)
abbrev bits_H := (BitVec 16)
abbrev bits_S := (BitVec 32)
abbrev bits_D := (BitVec 64)
abbrev bits_W := (BitVec 32)
abbrev bits_WU := (BitVec 32)
abbrev bits_L := (BitVec 64)
abbrev bits_LU := (BitVec 64)
inductive fregno where
| Fregno (_ : Nat)
deriving Inhabited, BEq
abbrev Fcsr := (BitVec 32)
abbrev CountSmcntrpmf := (BitVec 64)
inductive ctl_result where
| CTL_TRAP (_ : sync_exception)
| CTL_SRET (_ : Unit)
| CTL_MRET (_ : Unit)
deriving Inhabited, BEq
abbrev MemoryOpResult k_a := (Result k_a ExceptionType)
abbrev htif_cmd := (BitVec 64)
abbrev pte_flags_bits := (BitVec 8)
abbrev pte_ext_bits := (BitVec 10)
abbrev PTE_Ext := (BitVec 10)
abbrev PTE_Flags := (BitVec 8)
inductive PTE_Check where
| PTE_Check_Success (_ : ext_ptw)
| PTE_Check_Failure (_ : (ext_ptw × ext_ptw_fail))
deriving Inhabited, BEq
abbrev tlb_vpn_bits : Int := (57 - 12)
abbrev tlb_ppn_bits : Int := 44
structure TLB_Entry where
asid : asidbits
global : Bool
vpn : (BitVec (57 - 12))
levelMask : (BitVec (57 - 12))
ppn : (BitVec 44)
pte : (BitVec 64)
pteAddr : physaddr
deriving Inhabited, BEq
abbrev num_tlb_entries : Int := 64
abbrev tlb_index_range := Nat
/-- Type quantifiers: k_v : Int, is_sv_mode(k_v) -/
structure PTW_Output (k_v : Nat) where
ppn : (ppn_bits k_v)
pte : (pte_bits k_v)
pteAddr : physaddr
level : (level_range k_v)
global : Bool
deriving Inhabited, BEq
/-- Type quantifiers: k_v : Int, is_sv_mode(k_v) -/
inductive PTW_Result (k_v : Nat) where
| PTW_Success (_ : ((PTW_Output k_v) × ext_ptw))
| PTW_Failure (_ : (PTW_Error × ext_ptw))
deriving Inhabited, BEq
/-- Type quantifiers: k_paddr : Type, k_failure : Type -/
inductive TR_Result (k_paddr : Type) (k_failure : Type) where
| TR_Address (_ : (k_paddr × ext_ptw))
| TR_Failure (_ : (k_failure × ext_ptw))
deriving Inhabited, BEq
inductive Retire_Failure where
| Illegal_Instruction (_ : Unit)
| Wait_For_Interrupt (_ : Unit)
| Trap (_ : (Privilege × ctl_result × xlenbits))
| Memory_Exception (_ : (virtaddr × ExceptionType))
| Ext_CSR_Check_Failure (_ : Unit)
| Ext_ControlAddr_Check_Failure (_ : ext_control_addr_error)
| Ext_DataAddr_Check_Failure (_ : ext_data_addr_error)
| Ext_XRET_Priv_Failure (_ : Unit)
deriving Inhabited, BEq
abbrev nfields := Int
inductive cbie where | CBIE_ILLEGAL | CBIE_EXEC_FLUSH | CBIE_EXEC_INVAL
deriving Inhabited, BEq
inductive checked_cbop where | CBOP_ILLEGAL | CBOP_ILLEGAL_VIRTUAL | CBOP_INVAL_FLUSH | CBOP_INVAL_INVAL
deriving Inhabited, BEq
abbrev instbits := xlenbits
inductive HartState where
| HART_ACTIVE (_ : Unit)
| HART_WAITING (_ : instbits)
deriving Inhabited, BEq
inductive FetchResult where
| F_Ext_Error (_ : ext_fetch_addr_error)
| F_Base (_ : word)
| F_RVC (_ : half)
| F_Error (_ : (ExceptionType × xlenbits))
deriving Inhabited, BEq
inductive Step where
| Step_Pending_Interrupt (_ : (InterruptType × Privilege))
| Step_Ext_Fetch_Failure (_ : ext_fetch_addr_error)
| Step_Fetch_Failure (_ : (virtaddr × ExceptionType))
| Step_Execute (_ : ((ExecutionResult Retire_Failure) × instbits))
| Step_Waiting (_ : Unit)
deriving Inhabited, BEq
inductive Register : Type where
| hart_state
| satp
| tlb
| htif_payload_writes
| htif_cmd_write
| htif_exit_code
| htif_done
| htif_tohost
| stimecmp
| mtimecmp
| minstretcfg
| mcyclecfg
| fcsr
| f31
| f30
| f29
| f28
| f27
| f26
| f25
| f24
| f23
| f22
| f21
| f20
| f19
| f18
| f17
| f16
| f15
| f14
| f13
| f12
| f11
| f10
| f9
| f8
| f7
| f6
| f5
| f4
| f3
| f2
| f1
| f0
| float_fflags
| float_result
| mhpmcounter
| mhpmevent
| vcsr
| vr31
| vr30
| vr29
| vr28
| vr27
| vr26
| vr25
| vr24
| vr23
| vr22
| vr21
| vr20
| vr19
| vr18
| vr17
| vr16
| vr15
| vr14
| vr13
| vr12
| vr11
| vr10
| vr9
| vr8
| vr7
| vr6
| vr5
| vr4
| vr3
| vr2
| vr1
| vr0
| pmpaddr_n
| pmpcfg_n
| vtype
| vl
| vstart
| tselect
| stval
| scause
| sepc
| sscratch
| stvec
| mconfigptr
| mhartid
| marchid
| mimpid
| mvendorid
| minstret_increment
| minstret
| mtime
| mcycle
| mcountinhibit
| mcounteren
| scounteren
| mscratch
| mtval
| mepc
| mcause
| mtvec
| mideleg
| medeleg
| mip
| mie
| senvcfg
| menvcfg
| mstatus
| misa
| cur_inst
| cur_privilege
| x31
| x30
| x29
| x28
| x27
| x26
| x25
| x24
| x23
| x22
| x21
| x20
| x19
| x18
| x17
| x16
| x15
| x14
| x13
| x12
| x11
| x10
| x9
| x8
| x7
| x6
| x5
| x4
| x3
| x2
| x1
| nextPC
| PC
deriving DecidableEq, Hashable
open Register
abbrev RegisterType : Register → Type
| .hart_state => HartState
| .satp => (BitVec (2 ^ 3 * 8))
| .tlb => (Vector (Option TLB_Entry) 64)
| .htif_payload_writes => (BitVec 4)
| .htif_cmd_write => (BitVec 1)
| .htif_exit_code => (BitVec 64)
| .htif_done => Bool
| .htif_tohost => (BitVec 64)
| .stimecmp => (BitVec 64)
| .mtimecmp => (BitVec 64)
| .minstretcfg => (BitVec 64)
| .mcyclecfg => (BitVec 64)
| .fcsr => (BitVec 32)
| .f31 => (BitVec (8 * 8))
| .f30 => (BitVec (8 * 8))
| .f29 => (BitVec (8 * 8))
| .f28 => (BitVec (8 * 8))
| .f27 => (BitVec (8 * 8))
| .f26 => (BitVec (8 * 8))
| .f25 => (BitVec (8 * 8))
| .f24 => (BitVec (8 * 8))
| .f23 => (BitVec (8 * 8))
| .f22 => (BitVec (8 * 8))
| .f21 => (BitVec (8 * 8))
| .f20 => (BitVec (8 * 8))
| .f19 => (BitVec (8 * 8))
| .f18 => (BitVec (8 * 8))
| .f17 => (BitVec (8 * 8))
| .f16 => (BitVec (8 * 8))
| .f15 => (BitVec (8 * 8))
| .f14 => (BitVec (8 * 8))
| .f13 => (BitVec (8 * 8))
| .f12 => (BitVec (8 * 8))
| .f11 => (BitVec (8 * 8))
| .f10 => (BitVec (8 * 8))
| .f9 => (BitVec (8 * 8))
| .f8 => (BitVec (8 * 8))
| .f7 => (BitVec (8 * 8))
| .f6 => (BitVec (8 * 8))
| .f5 => (BitVec (8 * 8))
| .f4 => (BitVec (8 * 8))
| .f3 => (BitVec (8 * 8))
| .f2 => (BitVec (8 * 8))
| .f1 => (BitVec (8 * 8))
| .f0 => (BitVec (8 * 8))
| .float_fflags => (BitVec 64)
| .float_result => (BitVec 64)
| .mhpmcounter => (Vector (BitVec 64) 32)
| .mhpmevent => (Vector (BitVec 64) 32)
| .vcsr => (BitVec 3)
| .vr31 => (BitVec 65536)
| .vr30 => (BitVec 65536)
| .vr29 => (BitVec 65536)
| .vr28 => (BitVec 65536)
| .vr27 => (BitVec 65536)
| .vr26 => (BitVec 65536)
| .vr25 => (BitVec 65536)
| .vr24 => (BitVec 65536)
| .vr23 => (BitVec 65536)
| .vr22 => (BitVec 65536)
| .vr21 => (BitVec 65536)
| .vr20 => (BitVec 65536)
| .vr19 => (BitVec 65536)
| .vr18 => (BitVec 65536)
| .vr17 => (BitVec 65536)
| .vr16 => (BitVec 65536)
| .vr15 => (BitVec 65536)
| .vr14 => (BitVec 65536)
| .vr13 => (BitVec 65536)
| .vr12 => (BitVec 65536)
| .vr11 => (BitVec 65536)
| .vr10 => (BitVec 65536)
| .vr9 => (BitVec 65536)
| .vr8 => (BitVec 65536)
| .vr7 => (BitVec 65536)
| .vr6 => (BitVec 65536)
| .vr5 => (BitVec 65536)
| .vr4 => (BitVec 65536)
| .vr3 => (BitVec 65536)
| .vr2 => (BitVec 65536)
| .vr1 => (BitVec 65536)
| .vr0 => (BitVec 65536)
| .pmpaddr_n => (Vector (BitVec (2 ^ 3 * 8)) 64)
| .pmpcfg_n => (Vector (BitVec 8) 64)
| .vtype => (BitVec (2 ^ 3 * 8))
| .vl => (BitVec (2 ^ 3 * 8))
| .vstart => (BitVec 16)
| .tselect => (BitVec (2 ^ 3 * 8))
| .stval => (BitVec (2 ^ 3 * 8))
| .scause => (BitVec (2 ^ 3 * 8))
| .sepc => (BitVec (2 ^ 3 * 8))
| .sscratch => (BitVec (2 ^ 3 * 8))
| .stvec => (BitVec (2 ^ 3 * 8))
| .mconfigptr => (BitVec (2 ^ 3 * 8))
| .mhartid => (BitVec (2 ^ 3 * 8))
| .marchid => (BitVec (2 ^ 3 * 8))
| .mimpid => (BitVec (2 ^ 3 * 8))
| .mvendorid => (BitVec 32)
| .minstret_increment => Bool
| .minstret => (BitVec 64)
| .mtime => (BitVec 64)
| .mcycle => (BitVec 64)
| .mcountinhibit => (BitVec 32)
| .mcounteren => (BitVec 32)
| .scounteren => (BitVec 32)
| .mscratch => (BitVec (2 ^ 3 * 8))
| .mtval => (BitVec (2 ^ 3 * 8))
| .mepc => (BitVec (2 ^ 3 * 8))
| .mcause => (BitVec (2 ^ 3 * 8))
| .mtvec => (BitVec (2 ^ 3 * 8))
| .mideleg => (BitVec (2 ^ 3 * 8))
| .medeleg => (BitVec 64)
| .mip => (BitVec (2 ^ 3 * 8))
| .mie => (BitVec (2 ^ 3 * 8))
| .senvcfg => (BitVec (2 ^ 3 * 8))
| .menvcfg => (BitVec 64)
| .mstatus => (BitVec 64)
| .misa => (BitVec (2 ^ 3 * 8))
| .cur_inst => (BitVec (2 ^ 3 * 8))
| .cur_privilege => Privilege
| .x31 => (BitVec (2 ^ 3 * 8))
| .x30 => (BitVec (2 ^ 3 * 8))
| .x29 => (BitVec (2 ^ 3 * 8))
| .x28 => (BitVec (2 ^ 3 * 8))
| .x27 => (BitVec (2 ^ 3 * 8))
| .x26 => (BitVec (2 ^ 3 * 8))
| .x25 => (BitVec (2 ^ 3 * 8))
| .x24 => (BitVec (2 ^ 3 * 8))
| .x23 => (BitVec (2 ^ 3 * 8))
| .x22 => (BitVec (2 ^ 3 * 8))
| .x21 => (BitVec (2 ^ 3 * 8))
| .x20 => (BitVec (2 ^ 3 * 8))
| .x19 => (BitVec (2 ^ 3 * 8))
| .x18 => (BitVec (2 ^ 3 * 8))
| .x17 => (BitVec (2 ^ 3 * 8))
| .x16 => (BitVec (2 ^ 3 * 8))
| .x15 => (BitVec (2 ^ 3 * 8))
| .x14 => (BitVec (2 ^ 3 * 8))
| .x13 => (BitVec (2 ^ 3 * 8))
| .x12 => (BitVec (2 ^ 3 * 8))
| .x11 => (BitVec (2 ^ 3 * 8))
| .x10 => (BitVec (2 ^ 3 * 8))
| .x9 => (BitVec (2 ^ 3 * 8))
| .x8 => (BitVec (2 ^ 3 * 8))
| .x7 => (BitVec (2 ^ 3 * 8))
| .x6 => (BitVec (2 ^ 3 * 8))
| .x5 => (BitVec (2 ^ 3 * 8))
| .x4 => (BitVec (2 ^ 3 * 8))
| .x3 => (BitVec (2 ^ 3 * 8))
| .x2 => (BitVec (2 ^ 3 * 8))
| .x1 => (BitVec (2 ^ 3 * 8))
| .nextPC => (BitVec (2 ^ 3 * 8))
| .PC => (BitVec (2 ^ 3 * 8))
instance : Inhabited (RegisterRef RegisterType HartState) where
default := .Reg hart_state
instance : Inhabited (RegisterRef RegisterType Privilege) where
default := .Reg cur_privilege
instance : Inhabited (RegisterRef RegisterType (BitVec 1)) where
default := .Reg htif_cmd_write
instance : Inhabited (RegisterRef RegisterType (BitVec 16)) where
default := .Reg vstart
instance : Inhabited (RegisterRef RegisterType (BitVec 3)) where
default := .Reg vcsr
instance : Inhabited (RegisterRef RegisterType (BitVec 32)) where
default := .Reg scounteren
instance : Inhabited (RegisterRef RegisterType (BitVec 4)) where
default := .Reg htif_payload_writes
instance : Inhabited (RegisterRef RegisterType (BitVec (2 ^ 3 * 8))) where
default := .Reg PC
instance : Inhabited (RegisterRef RegisterType (BitVec 65536)) where
default := .Reg vr0
instance : Inhabited (RegisterRef RegisterType Bool) where
default := .Reg minstret_increment
instance : Inhabited (RegisterRef RegisterType (Vector (BitVec 64) 32)) where
default := .Reg mhpmevent
instance : Inhabited (RegisterRef RegisterType (Vector (BitVec (2 ^ 3 * 8)) 64)) where
default := .Reg pmpaddr_n
instance : Inhabited (RegisterRef RegisterType (Vector (BitVec 8) 64)) where
default := .Reg pmpcfg_n
instance : Inhabited (RegisterRef RegisterType (Vector (Option TLB_Entry) 64)) where
default := .Reg tlb
abbrev SailM := PreSailM RegisterType trivialChoiceSource exception
instance : Arch where
va_size := 64
pa := (BitVec 64)
abort := Unit
translation := Unit
fault := Unit
tlb_op := Unit
cache_op := Unit
barrier := barrier_kind
arch_ak := RISCV_strong_access
sys_reg_id := Unit