/- 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