(* riscvScript.sml - generated by L3 - Mon Jul 03 09:59:13 2017 *) open HolKernel boolLib bossLib Import val () = Import.start "riscv" val _ = Construct [("accessType",[("Read",[]),("Write",[])])] ; val _ = Construct [("fetchType",[("Instruction",[]),("Data",[])])] ; val _ = Construct [("Architecture",[("RV32I",[]),("RV64I",[]),("RV128I",[])])] ; val _ = Construct [("Privilege", [("User",[]),("Supervisor",[]),("Hypervisor",[]),("Machine",[])])] ; val _ = Construct [("VM_Mode", [("Mbare",[]),("Mbb",[]),("Mbbid",[]),("Sv32",[]),("Sv39",[]), ("Sv48",[]),("Sv57",[]),("Sv64",[])])] ; val _ = Construct [("ExtStatus",[("Off",[]),("Initial",[]),("Clean",[]),("Dirty",[])])] ; val _ = Construct [("Interrupt",[("Software",[]),("Timer",[])])] ; val _ = Construct [("ExceptionType", [("Fetch_Misaligned",[]),("Fetch_Fault",[]),("Illegal_Instr",[]), ("Breakpoint",[]),("Load_Fault",[]),("AMO_Misaligned",[]), ("Store_AMO_Fault",[]),("UMode_Env_Call",[]),("SMode_Env_Call",[]), ("HMode_Env_Call",[]),("MMode_Env_Call",[])])] ; val _ = Record ("mcpuid", [("ArchBase",FTy 2),("I",bTy),("M",bTy),("S",bTy),("U",bTy), ("mcpuid'rst",FTy 58)]) ; val _ = Record ("mimpid",[("RVImpl",FTy 48),("RVSource",F16)]) ; val _ = Record ("mstatus", [("MFS",FTy 2),("MIE",bTy),("MIE1",bTy),("MIE2",bTy),("MIE3",bTy), ("MMPRV",bTy),("MPRV",FTy 2),("MPRV1",FTy 2),("MPRV2",FTy 2), ("MPRV3",FTy 2),("MSD",bTy),("MXS",FTy 2),("VM",FTy 5), ("mstatus'rst",FTy 41)]) ; val _ = Record ("mtdeleg",[("Exc_deleg",F16),("Intr_deleg",FTy 48)]) ; val _ = Record ("mip", [("HSIP",bTy),("HTIP",bTy),("MSIP",bTy),("MTIP",bTy),("SSIP",bTy), ("STIP",bTy),("mip'rst",FTy 58)]) ; val _ = Record ("mie", [("HSIE",bTy),("HTIE",bTy),("MSIE",bTy),("MTIE",bTy),("SSIE",bTy), ("STIE",bTy),("mie'rst",FTy 58)]) ; val _ = Record ("mcause",[("EC",F4),("Int",bTy),("mcause'rst",FTy 59)]) ; val _ = Record ("MachineCSR", [("mbadaddr",F64),("mbase",F64),("mbound",F64),("mcause",CTy"mcause"), ("mcpuid",CTy"mcpuid"),("mdbase",F64),("mdbound",F64),("mepc",F64), ("mfromhost",F64),("mhartid",F64),("mibase",F64),("mibound",F64), ("mie",CTy"mie"),("mimpid",CTy"mimpid"),("mip",CTy"mip"), ("mscratch",F64),("mstatus",CTy"mstatus"),("mtdeleg",CTy"mtdeleg"), ("mtime_delta",F64),("mtimecmp",F64),("mtohost",F64),("mtvec",F64)]) ; val _ = Record ("HypervisorCSR", [("hbadaddr",F64),("hcause",CTy"mcause"),("hepc",F64),("hscratch",F64), ("hstatus",CTy"mstatus"),("htdeleg",CTy"mtdeleg"),("htime_delta",F64), ("htimecmp",F64),("htvec",F64)]) ; val _ = Record ("sstatus", [("SFS",FTy 2),("SIE",bTy),("SMPRV",bTy),("SPIE",bTy),("SPS",bTy), ("SSD",bTy),("SXS",FTy 2),("sstatus'rst",FTy 55)]) ; val _ = Record ("sip",[("SSIP",bTy),("STIP",bTy),("sip'rst",FTy 62)]) ; val _ = Record ("sie",[("SSIE",bTy),("STIE",bTy),("sie'rst",FTy 62)]) ; val _ = Record ("SupervisorCSR", [("sasid",F64),("sbadaddr",F64),("scause",CTy"mcause"),("sepc",F64), ("sptbr",F64),("sscratch",F64),("stime_delta",F64),("stimecmp",F64), ("stvec",F64)]) ; val _ = Record ("FPCSR", [("DZ",bTy),("FRM",FTy 3),("NV",bTy),("NX",bTy),("OF",bTy),("UF",bTy), ("fpcsr'rst",FTy 24)]) ; val _ = Record ("UserCSR", [("cycle_delta",F64),("fpcsr",CTy"FPCSR"),("instret_delta",F64), ("time_delta",F64)]) ; val _ = Record ("SynchronousTrap",[("badaddr",OTy F64),("trap",CTy"ExceptionType")]) ; val _ = Construct [("TransferControl", [("BranchTo",[F64]),("Ereturn",[]),("Mrts",[]), ("Trap",[CTy"SynchronousTrap"])])] ; val _ = Construct [("Rounding", [("RNE",[]),("RTZ",[]),("RDN",[]),("RUP",[]),("RMM",[]),("RDYN",[])])] ; val _ = Record ("StateDelta", [("addr",OTy F64),("data1",OTy F64),("data2",OTy F64), ("exc_taken",bTy),("fetch_exc",bTy),("fp_data",OTy F64),("pc",F64), ("rinstr",F32),("st_width",OTy F32)]) ; val _ = Record ("SV_PTE", [("PTE_D",bTy),("PTE_PPNi",FTy 38),("PTE_R",bTy),("PTE_SW",FTy 3), ("PTE_T",F4),("PTE_V",bTy),("sv_pte'rst",F16)]) ; val _ = Record ("SV_Vaddr", [("Sv_PgOfs",FTy 12),("Sv_VPNi",FTy 36),("sv_vaddr'rst",F16)]) ; val _ = Record ("TLBEntry", [("age",F64),("asid",FTy 6),("global",bTy),("pAddr",F64), ("pte",CTy"SV_PTE"),("pteAddr",F64),("vAddr",F64),("vAddrMask",F64), ("vMatchMask",F64)]) ; val _ = Construct [("Internal",[("FETCH_FAULT",[F64]),("FETCH_MISALIGNED",[F64])])] ; val _ = Construct [("System", [("CSRRC",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("CSRRCI",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("CSRRS",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("CSRRSI",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("CSRRW",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("CSRRWI",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),("EBREAK",[]),("ECALL",[]), ("ERET",[]),("MRTS",[]),("SFENCE_VM",[FTy 5]),("WFI",[])])] ; val _ = Construct [("FConv", [("FCLASS_D",[PTy(FTy 5,FTy 5)]),("FCLASS_S",[PTy(FTy 5,FTy 5)]), ("FCVT_D_L",[PTy(FTy 5,PTy(FTy 5,FTy 3))]), ("FCVT_D_LU",[PTy(FTy 5,PTy(FTy 5,FTy 3))]), ("FCVT_D_S",[PTy(FTy 5,PTy(FTy 5,FTy 3))]), ("FCVT_D_W",[PTy(FTy 5,PTy(FTy 5,FTy 3))]), ("FCVT_D_WU",[PTy(FTy 5,PTy(FTy 5,FTy 3))]), ("FCVT_LU_D",[PTy(FTy 5,PTy(FTy 5,FTy 3))]), ("FCVT_LU_S",[PTy(FTy 5,PTy(FTy 5,FTy 3))]), ("FCVT_L_D",[PTy(FTy 5,PTy(FTy 5,FTy 3))]), ("FCVT_L_S",[PTy(FTy 5,PTy(FTy 5,FTy 3))]), ("FCVT_S_D",[PTy(FTy 5,PTy(FTy 5,FTy 3))]), ("FCVT_S_L",[PTy(FTy 5,PTy(FTy 5,FTy 3))]), ("FCVT_S_LU",[PTy(FTy 5,PTy(FTy 5,FTy 3))]), ("FCVT_S_W",[PTy(FTy 5,PTy(FTy 5,FTy 3))]), ("FCVT_S_WU",[PTy(FTy 5,PTy(FTy 5,FTy 3))]), ("FCVT_WU_D",[PTy(FTy 5,PTy(FTy 5,FTy 3))]), ("FCVT_WU_S",[PTy(FTy 5,PTy(FTy 5,FTy 3))]), ("FCVT_W_D",[PTy(FTy 5,PTy(FTy 5,FTy 3))]), ("FCVT_W_S",[PTy(FTy 5,PTy(FTy 5,FTy 3))]), ("FMV_D_X",[PTy(FTy 5,FTy 5)]),("FMV_S_X",[PTy(FTy 5,FTy 5)]), ("FMV_X_D",[PTy(FTy 5,FTy 5)]),("FMV_X_S",[PTy(FTy 5,FTy 5)]), ("FSGNJN_D",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("FSGNJN_S",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("FSGNJX_D",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("FSGNJX_S",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("FSGNJ_D",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("FSGNJ_S",[PTy(FTy 5,PTy(FTy 5,FTy 5))])])] ; val _ = Construct [("FArith", [("FADD_D",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))]), ("FADD_S",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))]), ("FDIV_D",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))]), ("FDIV_S",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))]), ("FEQ_D",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("FEQ_S",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("FLE_D",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("FLE_S",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("FLT_D",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("FLT_S",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("FMADD_D",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))]), ("FMADD_S",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))]), ("FMAX_D",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("FMAX_S",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("FMIN_D",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("FMIN_S",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("FMSUB_D",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))]), ("FMSUB_S",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))]), ("FMUL_D",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))]), ("FMUL_S",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))]), ("FNMADD_D",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))]), ("FNMADD_S",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))]), ("FNMSUB_D",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))]), ("FNMSUB_S",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))]), ("FSQRT_D",[PTy(FTy 5,PTy(FTy 5,FTy 3))]), ("FSQRT_S",[PTy(FTy 5,PTy(FTy 5,FTy 3))]), ("FSUB_D",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))]), ("FSUB_S",[PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))])])] ; val _ = Construct [("FPStore", [("FSD",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("FSW",[PTy(FTy 5,PTy(FTy 5,FTy 12))])])] ; val _ = Construct [("FPLoad", [("FLD",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("FLW",[PTy(FTy 5,PTy(FTy 5,FTy 12))])])] ; val _ = Construct [("AMO", [("AMOADD_D",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("AMOADD_W",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("AMOAND_D",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("AMOAND_W",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("AMOMAXU_D",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("AMOMAXU_W",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("AMOMAX_D",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("AMOMAX_W",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("AMOMINU_D",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("AMOMINU_W",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("AMOMIN_D",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("AMOMIN_W",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("AMOOR_D",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("AMOOR_W",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("AMOSWAP_D",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("AMOSWAP_W",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("AMOXOR_D",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("AMOXOR_W",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("LR_D",[PTy(F1,PTy(F1,PTy(FTy 5,FTy 5)))]), ("LR_W",[PTy(F1,PTy(F1,PTy(FTy 5,FTy 5)))]), ("SC_D",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("SC_W",[PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5))))])])] ; val _ = Construct [("Store", [("SB",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("SD",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("SH",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("SW",[PTy(FTy 5,PTy(FTy 5,FTy 12))])])] ; val _ = Construct [("Load", [("LB",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("LBU",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("LD",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("LH",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("LHU",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("LW",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("LWU",[PTy(FTy 5,PTy(FTy 5,FTy 12))])])] ; val _ = Construct [("Branch", [("BEQ",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("BGE",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("BGEU",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("BLT",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("BLTU",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("BNE",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),("JAL",[PTy(FTy 5,FTy 20)]), ("JALR",[PTy(FTy 5,PTy(FTy 5,FTy 12))])])] ; val _ = Construct [("MulDiv", [("DIV",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("DIVU",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("DIVUW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("DIVW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("MUL",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("MULH",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("MULHSU",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("MULHU",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("MULW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("REM",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("REMU",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("REMUW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("REMW",[PTy(FTy 5,PTy(FTy 5,FTy 5))])])] ; val _ = Construct [("Shift", [("SLL",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("SLLI",[PTy(FTy 5,PTy(FTy 5,FTy 6))]), ("SLLIW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("SLLW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("SRA",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("SRAI",[PTy(FTy 5,PTy(FTy 5,FTy 6))]), ("SRAIW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("SRAW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("SRL",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("SRLI",[PTy(FTy 5,PTy(FTy 5,FTy 6))]), ("SRLIW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("SRLW",[PTy(FTy 5,PTy(FTy 5,FTy 5))])])] ; val _ = Construct [("ArithR", [("ADD",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("ADDW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("AND",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("OR",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("SLT",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("SLTU",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("SUB",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("SUBW",[PTy(FTy 5,PTy(FTy 5,FTy 5))]), ("XOR",[PTy(FTy 5,PTy(FTy 5,FTy 5))])])] ; val _ = Construct [("ArithI", [("ADDI",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("ADDIW",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("ANDI",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("AUIPC",[PTy(FTy 5,FTy 20)]),("LUI",[PTy(FTy 5,FTy 20)]), ("ORI",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("SLTI",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("SLTIU",[PTy(FTy 5,PTy(FTy 5,FTy 12))]), ("XORI",[PTy(FTy 5,PTy(FTy 5,FTy 12))])])] ; val _ = Construct [("instruction", [("AMO",[CTy"AMO"]),("ArithI",[CTy"ArithI"]),("ArithR",[CTy"ArithR"]), ("Branch",[CTy"Branch"]),("FArith",[CTy"FArith"]), ("FConv",[CTy"FConv"]),("FENCE",[PTy(FTy 5,PTy(FTy 5,PTy(F4,F4)))]), ("FENCE_I",[PTy(FTy 5,PTy(FTy 5,FTy 12))]),("FPLoad",[CTy"FPLoad"]), ("FPStore",[CTy"FPStore"]),("Internal",[CTy"Internal"]), ("Load",[CTy"Load"]),("MulDiv",[CTy"MulDiv"]),("Shift",[CTy"Shift"]), ("Store",[CTy"Store"]),("System",[CTy"System"]), ("UnknownInstruction",[])])] ; val _ = Construct [("FetchResult",[("F_Error",[CTy"instruction"]),("F_Result",[F32])])] ; val _ = Construct [("exception", [("INTERNAL_ERROR",[sTy]),("NoException",[]),("UNDEFINED",[sTy])])] ; val _ = Record ("riscv_state", [("MEM8",ATy(F64,F8)),("c_ExitCode",ATy(F8,F64)), ("c_HCSR",ATy(F8,CTy"HypervisorCSR")), ("c_MCSR",ATy(F8,CTy"MachineCSR")), ("c_NextFetch",ATy(F8,OTy(CTy"TransferControl"))), ("c_PC",ATy(F8,F64)),("c_ReserveLoad",ATy(F8,OTy F64)), ("c_SCSR",ATy(F8,CTy"SupervisorCSR")),("c_UCSR",ATy(F8,CTy"UserCSR")), ("c_cycles",ATy(F8,F64)),("c_fpr",ATy(F8,ATy(FTy 5,F64))), ("c_gpr",ATy(F8,ATy(FTy 5,F64))),("c_instret",ATy(F8,F64)), ("c_tlb",ATy(F8,ATy(F4,OTy(CTy"TLBEntry")))), ("c_update",ATy(F8,CTy"StateDelta")),("clock",F64),("done",bTy), ("exception",CTy"exception"),("log",LTy(PTy(nTy,sTy))),("procID",F8), ("totalCore",nTy)]) ; val qTy = CTy "riscv_state"; fun qVar v = Term.mk_var (v, ParseDatatype.pretypeToType qTy); val raise'exception_def = Def ("raise'exception",Var("e",CTy"exception"), Close (qVar"state", TP[LX(VTy"a"), ITE(EQ(Dest("exception",CTy"exception",qVar"state"), Const("NoException",CTy"exception")), Rupd("exception",TP[qVar"state",Var("e",CTy"exception")]), qVar"state")])) ; val ASID_SIZE_def = Def0 ("ASID_SIZE",LN 6) ; val PAGESIZE_BITS_def = Def0 ("PAGESIZE_BITS",LN 12) ; val LEVEL_BITS_def = Def0 ("LEVEL_BITS",LN 9) ; val BYTE_def = Def0 ("BYTE",LW(0,3)) ; val HALFWORD_def = Def0 ("HALFWORD",LW(1,3)) ; val WORD_def = Def0 ("WORD",LW(3,3)) ; val DOUBLEWORD_def = Def0 ("DOUBLEWORD",LW(7,3)) ; val archBase_def = Def ("archBase",Var("a",CTy"Architecture"), CS(Var("a",CTy"Architecture"), [(LC("RV32I",CTy"Architecture"),LW(0,2)), (LC("RV64I",CTy"Architecture"),LW(2,2)), (LC("RV128I",CTy"Architecture"),LW(3,2))])) ; val architecture_def = Def ("architecture",Var("ab",FTy 2), Close (qVar"state", CS(Var("ab",FTy 2), [(LW(0,2),TP[LC("RV32I",CTy"Architecture"),qVar"state"]), (LW(2,2),TP[LC("RV64I",CTy"Architecture"),qVar"state"]), (LW(3,2),TP[LC("RV128I",CTy"Architecture"),qVar"state"]), (AVar(FTy 2), Apply (Call ("raise'exception",ATy(qTy,PTy(CTy"Architecture",qTy)), Call ("UNDEFINED",CTy"exception", CC[LS"Unknown architecture: ", Mop(Cast sTy,Mop(Cast nTy,Var("ab",FTy 2)))])), qVar"state"))]))) ; val archName_def = Def ("archName",Var("a",CTy"Architecture"), CS(Var("a",CTy"Architecture"), [(LC("RV32I",CTy"Architecture"),LS"RV32I"), (LC("RV64I",CTy"Architecture"),LS"RV64I"), (LC("RV128I",CTy"Architecture"),LS"RV128I")])) ; val privLevel_def = Def ("privLevel",Var("p",CTy"Privilege"), CS(Var("p",CTy"Privilege"), [(LC("User",CTy"Privilege"),LW(0,2)), (LC("Supervisor",CTy"Privilege"),LW(1,2)), (LC("Hypervisor",CTy"Privilege"),LW(2,2)), (LC("Machine",CTy"Privilege"),LW(3,2))])) ; val privilege_def = Def ("privilege",Var("p",FTy 2), CS(Var("p",FTy 2), [(LW(0,2),LC("User",CTy"Privilege")), (LW(1,2),LC("Supervisor",CTy"Privilege")), (LW(2,2),LC("Hypervisor",CTy"Privilege")), (LW(3,2),LC("Machine",CTy"Privilege"))])) ; val privName_def = Def ("privName",Var("p",CTy"Privilege"), CS(Var("p",CTy"Privilege"), [(LC("User",CTy"Privilege"),LS"U"), (LC("Supervisor",CTy"Privilege"),LS"S"), (LC("Hypervisor",CTy"Privilege"),LS"H"), (LC("Machine",CTy"Privilege"),LS"M")])) ; val vmType_def = Def ("vmType",Var("vm",FTy 5), Close (qVar"state", CS(Var("vm",FTy 5), [(LW(0,5),TP[LC("Mbare",CTy"VM_Mode"),qVar"state"]), (LW(1,5),TP[LC("Mbb",CTy"VM_Mode"),qVar"state"]), (LW(2,5),TP[LC("Mbbid",CTy"VM_Mode"),qVar"state"]), (LW(8,5),TP[LC("Sv32",CTy"VM_Mode"),qVar"state"]), (LW(9,5),TP[LC("Sv39",CTy"VM_Mode"),qVar"state"]), (LW(10,5),TP[LC("Sv48",CTy"VM_Mode"),qVar"state"]), (LW(11,5),TP[LC("Sv57",CTy"VM_Mode"),qVar"state"]), (LW(12,5),TP[LC("Sv64",CTy"VM_Mode"),qVar"state"]), (AVar(FTy 5), Apply (Call ("raise'exception",ATy(qTy,PTy(CTy"VM_Mode",qTy)), Call ("UNDEFINED",CTy"exception", CC[LS"Unknown address translation mode: ", Mop(Cast sTy,Mop(Cast nTy,Var("vm",FTy 5)))])), qVar"state"))]))) ; val isValidVM_def = Def ("isValidVM",Var("vm",FTy 5), CS(Var("vm",FTy 5), [(LW(0,5),LT),(LW(1,5),LT),(LW(2,5),LT),(LW(8,5),LT),(LW(9,5),LT), (LW(10,5),LT),(LW(11,5),LT),(LW(12,5),LT),(AVar(FTy 5),LF)])) ; val vmMode_def = Def ("vmMode",Var("vm",CTy"VM_Mode"), CS(Var("vm",CTy"VM_Mode"), [(LC("Mbare",CTy"VM_Mode"),LW(0,5)), (LC("Mbb",CTy"VM_Mode"),LW(1,5)), (LC("Mbbid",CTy"VM_Mode"),LW(2,5)), (LC("Sv32",CTy"VM_Mode"),LW(8,5)), (LC("Sv39",CTy"VM_Mode"),LW(9,5)), (LC("Sv48",CTy"VM_Mode"),LW(10,5)), (LC("Sv57",CTy"VM_Mode"),LW(11,5)), (LC("Sv64",CTy"VM_Mode"),LW(12,5))])) ; val vmModeName_def = Def ("vmModeName",Var("vm",CTy"VM_Mode"), CS(Var("vm",CTy"VM_Mode"), [(LC("Mbare",CTy"VM_Mode"),LS"Mbare"), (LC("Mbb",CTy"VM_Mode"),LS"Mbb"), (LC("Mbbid",CTy"VM_Mode"),LS"Mbbid"), (LC("Sv32",CTy"VM_Mode"),LS"Sv32"), (LC("Sv39",CTy"VM_Mode"),LS"Sv39"), (LC("Sv48",CTy"VM_Mode"),LS"Sv48"), (LC("Sv57",CTy"VM_Mode"),LS"Sv57"), (LC("Sv64",CTy"VM_Mode"),LS"Sv64")])) ; val ext_status_def = Def ("ext_status",Var("e",CTy"ExtStatus"), CS(Var("e",CTy"ExtStatus"), [(LC("Off",CTy"ExtStatus"),LW(0,2)), (LC("Initial",CTy"ExtStatus"),LW(1,2)), (LC("Clean",CTy"ExtStatus"),LW(2,2)), (LC("Dirty",CTy"ExtStatus"),LW(3,2))])) ; val extStatus_def = Def ("extStatus",Var("e",FTy 2), CS(Var("e",FTy 2), [(LW(0,2),LC("Off",CTy"ExtStatus")), (LW(1,2),LC("Initial",CTy"ExtStatus")), (LW(2,2),LC("Clean",CTy"ExtStatus")), (LW(3,2),LC("Dirty",CTy"ExtStatus"))])) ; val extStatusName_def = Def ("extStatusName",Var("e",CTy"ExtStatus"), CS(Var("e",CTy"ExtStatus"), [(LC("Off",CTy"ExtStatus"),LS"Off"), (LC("Initial",CTy"ExtStatus"),LS"Initial"), (LC("Clean",CTy"ExtStatus"),LS"Clean"), (LC("Dirty",CTy"ExtStatus"),LS"Dirty")])) ; val interruptIndex_def = Def ("interruptIndex",Var("i",CTy"Interrupt"), CS(Var("i",CTy"Interrupt"), [(LC("Software",CTy"Interrupt"),LW(0,4)), (LC("Timer",CTy"Interrupt"),LW(1,4))])) ; val excCode_def = Def ("excCode",Var("e",CTy"ExceptionType"), CS(Var("e",CTy"ExceptionType"), [(LC("Fetch_Misaligned",CTy"ExceptionType"),LW(0,4)), (LC("Fetch_Fault",CTy"ExceptionType"),LW(1,4)), (LC("Illegal_Instr",CTy"ExceptionType"),LW(2,4)), (LC("Breakpoint",CTy"ExceptionType"),LW(3,4)), (LC("Load_Fault",CTy"ExceptionType"),LW(5,4)), (LC("AMO_Misaligned",CTy"ExceptionType"),LW(6,4)), (LC("Store_AMO_Fault",CTy"ExceptionType"),LW(7,4)), (LC("UMode_Env_Call",CTy"ExceptionType"),LW(8,4)), (LC("SMode_Env_Call",CTy"ExceptionType"),LW(9,4)), (LC("HMode_Env_Call",CTy"ExceptionType"),LW(10,4)), (LC("MMode_Env_Call",CTy"ExceptionType"),LW(11,4))])) ; val excType_def = Def ("excType",Var("e",F4), Close (qVar"state", CS(Var("e",F4), [(LW(0,4), TP[LC("Fetch_Misaligned",CTy"ExceptionType"),qVar"state"]), (LW(1,4),TP[LC("Fetch_Fault",CTy"ExceptionType"),qVar"state"]), (LW(2,4),TP[LC("Illegal_Instr",CTy"ExceptionType"),qVar"state"]), (LW(3,4),TP[LC("Breakpoint",CTy"ExceptionType"),qVar"state"]), (LW(5,4),TP[LC("Load_Fault",CTy"ExceptionType"),qVar"state"]), (LW(6,4),TP[LC("AMO_Misaligned",CTy"ExceptionType"),qVar"state"]), (LW(7,4), TP[LC("Store_AMO_Fault",CTy"ExceptionType"),qVar"state"]), (LW(8,4),TP[LC("UMode_Env_Call",CTy"ExceptionType"),qVar"state"]), (LW(9,4),TP[LC("SMode_Env_Call",CTy"ExceptionType"),qVar"state"]), (LW(10,4), TP[LC("HMode_Env_Call",CTy"ExceptionType"),qVar"state"]), (LW(11,4), TP[LC("MMode_Env_Call",CTy"ExceptionType"),qVar"state"]), (AVar F4, Apply (Call ("raise'exception",ATy(qTy,PTy(CTy"ExceptionType",qTy)), Call ("UNDEFINED",CTy"exception", CC[LS"Unknown exception: ", Mop(Cast sTy,Mop(Cast nTy,Var("e",F4)))])), qVar"state"))]))) ; val excName_def = Def ("excName",Var("e",CTy"ExceptionType"), CS(Var("e",CTy"ExceptionType"), [(LC("Fetch_Misaligned",CTy"ExceptionType"),LS"MISALIGNED_FETCH"), (LC("Fetch_Fault",CTy"ExceptionType"),LS"FAULT_FETCH"), (LC("Illegal_Instr",CTy"ExceptionType"),LS"ILLEGAL_INSTRUCTION"), (LC("Breakpoint",CTy"ExceptionType"),LS"BREAKPOINT"), (LC("Load_Fault",CTy"ExceptionType"),LS"FAULT_LOAD"), (LC("AMO_Misaligned",CTy"ExceptionType"),LS"MISALIGNED_AMO"), (LC("Store_AMO_Fault",CTy"ExceptionType"),LS"FAULT_STORE_AMO"), (LC("UMode_Env_Call",CTy"ExceptionType"),LS"U-EnvCall"), (LC("SMode_Env_Call",CTy"ExceptionType"),LS"S-EnvCall"), (LC("HMode_Env_Call",CTy"ExceptionType"),LS"H-EnvCall"), (LC("MMode_Env_Call",CTy"ExceptionType"),LS"M-EnvCall")])) ; val rec'mcpuid_def = Def ("rec'mcpuid",Var("x",F64), Rec(CTy"mcpuid", [EX(Var("x",F64),LN 63,LN 62,FTy 2),Bop(Bit,Var("x",F64),LN 8), Bop(Bit,Var("x",F64),LN 12),Bop(Bit,Var("x",F64),LN 18), Bop(Bit,Var("x",F64),LN 20), CC[EX(Var("x",F64),LN 7,LN 0,F8), EX(Var("x",F64),LN 11,LN 9,FTy 3), EX(Var("x",F64),LN 17,LN 13,FTy 5), EX(Var("x",F64),LN 19,LN 19,F1), EX(Var("x",F64),LN 61,LN 21,FTy 41)]])) ; val reg'mcpuid_def = Def ("reg'mcpuid",Var("x",CTy"mcpuid"), CS(Var("x",CTy"mcpuid"), [(Rec(CTy"mcpuid", [Var("ArchBase",FTy 2),bVar"I",bVar"M",bVar"S",bVar"U", Var("mcpuid'rst",FTy 58)]), CC[Var("ArchBase",FTy 2), EX(Var("mcpuid'rst",FTy 58),LN 40,LN 0,FTy 41), Mop(Cast F1,bVar"U"), EX(Var("mcpuid'rst",FTy 58),LN 41,LN 41,F1), Mop(Cast F1,bVar"S"), EX(Var("mcpuid'rst",FTy 58),LN 46,LN 42,FTy 5), Mop(Cast F1,bVar"M"), EX(Var("mcpuid'rst",FTy 58),LN 49,LN 47,FTy 3), Mop(Cast F1,bVar"I"), EX(Var("mcpuid'rst",FTy 58),LN 57,LN 50,F8)])])) ; val write'rec'mcpuid_def = Def ("write'rec'mcpuid",TP[AVar F64,Var("x",CTy"mcpuid")], Call("reg'mcpuid",F64,Var("x",CTy"mcpuid"))) ; val write'reg'mcpuid_def = Def ("write'reg'mcpuid",TP[AVar(CTy"mcpuid"),Var("x",F64)], Call("rec'mcpuid",CTy"mcpuid",Var("x",F64))) ; val rec'mimpid_def = Def ("rec'mimpid",Var("x",F64), Rec(CTy"mimpid", [EX(Var("x",F64),LN 63,LN 16,FTy 48), EX(Var("x",F64),LN 15,LN 0,F16)])) ; val reg'mimpid_def = Def ("reg'mimpid",Var("x",CTy"mimpid"), CS(Var("x",CTy"mimpid"), [(Rec(CTy"mimpid",[Var("RVImpl",FTy 48),Var("RVSource",F16)]), CC[Var("RVImpl",FTy 48),Var("RVSource",F16)])])) ; val write'rec'mimpid_def = Def ("write'rec'mimpid",TP[AVar F64,Var("x",CTy"mimpid")], Call("reg'mimpid",F64,Var("x",CTy"mimpid"))) ; val write'reg'mimpid_def = Def ("write'reg'mimpid",TP[AVar(CTy"mimpid"),Var("x",F64)], Call("rec'mimpid",CTy"mimpid",Var("x",F64))) ; val rec'mstatus_def = Def ("rec'mstatus",Var("x",F64), Rec(CTy"mstatus", [EX(Var("x",F64),LN 13,LN 12,FTy 2),Bop(Bit,Var("x",F64),LN 0), Bop(Bit,Var("x",F64),LN 3),Bop(Bit,Var("x",F64),LN 6), Bop(Bit,Var("x",F64),LN 9),Bop(Bit,Var("x",F64),LN 16), EX(Var("x",F64),LN 2,LN 1,FTy 2),EX(Var("x",F64),LN 5,LN 4,FTy 2), EX(Var("x",F64),LN 8,LN 7,FTy 2), EX(Var("x",F64),LN 11,LN 10,FTy 2),Bop(Bit,Var("x",F64),LN 63), EX(Var("x",F64),LN 15,LN 14,FTy 2), EX(Var("x",F64),LN 21,LN 17,FTy 5), EX(Var("x",F64),LN 62,LN 22,FTy 41)])) ; val reg'mstatus_def = Def ("reg'mstatus",Var("x",CTy"mstatus"), CS(Var("x",CTy"mstatus"), [(Rec(CTy"mstatus", [Var("MFS",FTy 2),bVar"MIE",bVar"MIE1",bVar"MIE2",bVar"MIE3", bVar"MMPRV",Var("MPRV",FTy 2),Var("MPRV1",FTy 2), Var("MPRV2",FTy 2),Var("MPRV3",FTy 2),bVar"MSD", Var("MXS",FTy 2),Var("VM",FTy 5),Var("mstatus'rst",FTy 41)]), CC[Mop(Cast F1,bVar"MSD"),Var("mstatus'rst",FTy 41), Var("VM",FTy 5),Mop(Cast F1,bVar"MMPRV"),Var("MXS",FTy 2), Var("MFS",FTy 2),Var("MPRV3",FTy 2),Mop(Cast F1,bVar"MIE3"), Var("MPRV2",FTy 2),Mop(Cast F1,bVar"MIE2"),Var("MPRV1",FTy 2), Mop(Cast F1,bVar"MIE1"),Var("MPRV",FTy 2), Mop(Cast F1,bVar"MIE")])])) ; val write'rec'mstatus_def = Def ("write'rec'mstatus",TP[AVar F64,Var("x",CTy"mstatus")], Call("reg'mstatus",F64,Var("x",CTy"mstatus"))) ; val write'reg'mstatus_def = Def ("write'reg'mstatus",TP[AVar(CTy"mstatus"),Var("x",F64)], Call("rec'mstatus",CTy"mstatus",Var("x",F64))) ; val rec'mtdeleg_def = Def ("rec'mtdeleg",Var("x",F64), Rec(CTy"mtdeleg", [EX(Var("x",F64),LN 15,LN 0,F16), EX(Var("x",F64),LN 63,LN 16,FTy 48)])) ; val reg'mtdeleg_def = Def ("reg'mtdeleg",Var("x",CTy"mtdeleg"), CS(Var("x",CTy"mtdeleg"), [(Rec(CTy"mtdeleg",[Var("Exc_deleg",F16),Var("Intr_deleg",FTy 48)]), CC[Var("Intr_deleg",FTy 48),Var("Exc_deleg",F16)])])) ; val write'rec'mtdeleg_def = Def ("write'rec'mtdeleg",TP[AVar F64,Var("x",CTy"mtdeleg")], Call("reg'mtdeleg",F64,Var("x",CTy"mtdeleg"))) ; val write'reg'mtdeleg_def = Def ("write'reg'mtdeleg",TP[AVar(CTy"mtdeleg"),Var("x",F64)], Call("rec'mtdeleg",CTy"mtdeleg",Var("x",F64))) ; val rec'mip_def = Def ("rec'mip",Var("x",F64), Rec(CTy"mip", [Bop(Bit,Var("x",F64),LN 2),Bop(Bit,Var("x",F64),LN 6), Bop(Bit,Var("x",F64),LN 3),Bop(Bit,Var("x",F64),LN 7), Bop(Bit,Var("x",F64),LN 1),Bop(Bit,Var("x",F64),LN 5), CC[EX(Var("x",F64),LN 0,LN 0,F1),EX(Var("x",F64),LN 4,LN 4,F1), EX(Var("x",F64),LN 63,LN 8,FTy 56)]])) ; val reg'mip_def = Def ("reg'mip",Var("x",CTy"mip"), CS(Var("x",CTy"mip"), [(Rec(CTy"mip", [bVar"HSIP",bVar"HTIP",bVar"MSIP",bVar"MTIP",bVar"SSIP", bVar"STIP",Var("mip'rst",FTy 58)]), CC[EX(Var("mip'rst",FTy 58),LN 55,LN 0,FTy 56), Mop(Cast F1,bVar"MTIP"),Mop(Cast F1,bVar"HTIP"), Mop(Cast F1,bVar"STIP"), EX(Var("mip'rst",FTy 58),LN 56,LN 56,F1), Mop(Cast F1,bVar"MSIP"),Mop(Cast F1,bVar"HSIP"), Mop(Cast F1,bVar"SSIP"), EX(Var("mip'rst",FTy 58),LN 57,LN 57,F1)])])) ; val write'rec'mip_def = Def ("write'rec'mip",TP[AVar F64,Var("x",CTy"mip")], Call("reg'mip",F64,Var("x",CTy"mip"))) ; val write'reg'mip_def = Def ("write'reg'mip",TP[AVar(CTy"mip"),Var("x",F64)], Call("rec'mip",CTy"mip",Var("x",F64))) ; val rec'mie_def = Def ("rec'mie",Var("x",F64), Rec(CTy"mie", [Bop(Bit,Var("x",F64),LN 2),Bop(Bit,Var("x",F64),LN 6), Bop(Bit,Var("x",F64),LN 3),Bop(Bit,Var("x",F64),LN 7), Bop(Bit,Var("x",F64),LN 1),Bop(Bit,Var("x",F64),LN 5), CC[EX(Var("x",F64),LN 0,LN 0,F1),EX(Var("x",F64),LN 4,LN 4,F1), EX(Var("x",F64),LN 63,LN 8,FTy 56)]])) ; val reg'mie_def = Def ("reg'mie",Var("x",CTy"mie"), CS(Var("x",CTy"mie"), [(Rec(CTy"mie", [bVar"HSIE",bVar"HTIE",bVar"MSIE",bVar"MTIE",bVar"SSIE", bVar"STIE",Var("mie'rst",FTy 58)]), CC[EX(Var("mie'rst",FTy 58),LN 55,LN 0,FTy 56), Mop(Cast F1,bVar"MTIE"),Mop(Cast F1,bVar"HTIE"), Mop(Cast F1,bVar"STIE"), EX(Var("mie'rst",FTy 58),LN 56,LN 56,F1), Mop(Cast F1,bVar"MSIE"),Mop(Cast F1,bVar"HSIE"), Mop(Cast F1,bVar"SSIE"), EX(Var("mie'rst",FTy 58),LN 57,LN 57,F1)])])) ; val write'rec'mie_def = Def ("write'rec'mie",TP[AVar F64,Var("x",CTy"mie")], Call("reg'mie",F64,Var("x",CTy"mie"))) ; val write'reg'mie_def = Def ("write'reg'mie",TP[AVar(CTy"mie"),Var("x",F64)], Call("rec'mie",CTy"mie",Var("x",F64))) ; val rec'mcause_def = Def ("rec'mcause",Var("x",F64), Rec(CTy"mcause", [EX(Var("x",F64),LN 3,LN 0,F4),Bop(Bit,Var("x",F64),LN 63), EX(Var("x",F64),LN 62,LN 4,FTy 59)])) ; val reg'mcause_def = Def ("reg'mcause",Var("x",CTy"mcause"), CS(Var("x",CTy"mcause"), [(Rec(CTy"mcause",[Var("EC",F4),bVar"Int",Var("mcause'rst",FTy 59)]), CC[Mop(Cast F1,bVar"Int"),Var("mcause'rst",FTy 59),Var("EC",F4)])])) ; val write'rec'mcause_def = Def ("write'rec'mcause",TP[AVar F64,Var("x",CTy"mcause")], Call("reg'mcause",F64,Var("x",CTy"mcause"))) ; val write'reg'mcause_def = Def ("write'reg'mcause",TP[AVar(CTy"mcause"),Var("x",F64)], Call("rec'mcause",CTy"mcause",Var("x",F64))) ; val rec'sstatus_def = Def ("rec'sstatus",Var("x",F64), Rec(CTy"sstatus", [EX(Var("x",F64),LN 13,LN 12,FTy 2),Bop(Bit,Var("x",F64),LN 0), Bop(Bit,Var("x",F64),LN 16),Bop(Bit,Var("x",F64),LN 3), Bop(Bit,Var("x",F64),LN 4),Bop(Bit,Var("x",F64),LN 63), EX(Var("x",F64),LN 15,LN 14,FTy 2), CC[EX(Var("x",F64),LN 2,LN 1,FTy 2), EX(Var("x",F64),LN 11,LN 5,FTy 7), EX(Var("x",F64),LN 62,LN 17,FTy 46)]])) ; val reg'sstatus_def = Def ("reg'sstatus",Var("x",CTy"sstatus"), CS(Var("x",CTy"sstatus"), [(Rec(CTy"sstatus", [Var("SFS",FTy 2),bVar"SIE",bVar"SMPRV",bVar"SPIE",bVar"SPS", bVar"SSD",Var("SXS",FTy 2),Var("sstatus'rst",FTy 55)]), CC[Mop(Cast F1,bVar"SSD"), EX(Var("sstatus'rst",FTy 55),LN 45,LN 0,FTy 46), Mop(Cast F1,bVar"SMPRV"),Var("SXS",FTy 2),Var("SFS",FTy 2), EX(Var("sstatus'rst",FTy 55),LN 52,LN 46,FTy 7), Mop(Cast F1,bVar"SPS"),Mop(Cast F1,bVar"SPIE"), EX(Var("sstatus'rst",FTy 55),LN 54,LN 53,FTy 2), Mop(Cast F1,bVar"SIE")])])) ; val write'rec'sstatus_def = Def ("write'rec'sstatus",TP[AVar F64,Var("x",CTy"sstatus")], Call("reg'sstatus",F64,Var("x",CTy"sstatus"))) ; val write'reg'sstatus_def = Def ("write'reg'sstatus",TP[AVar(CTy"sstatus"),Var("x",F64)], Call("rec'sstatus",CTy"sstatus",Var("x",F64))) ; val rec'sip_def = Def ("rec'sip",Var("x",F64), Rec(CTy"sip", [Bop(Bit,Var("x",F64),LN 1),Bop(Bit,Var("x",F64),LN 5), CC[EX(Var("x",F64),LN 0,LN 0,F1),EX(Var("x",F64),LN 4,LN 2,FTy 3), EX(Var("x",F64),LN 63,LN 6,FTy 58)]])) ; val reg'sip_def = Def ("reg'sip",Var("x",CTy"sip"), CS(Var("x",CTy"sip"), [(Rec(CTy"sip",[bVar"SSIP",bVar"STIP",Var("sip'rst",FTy 62)]), CC[EX(Var("sip'rst",FTy 62),LN 57,LN 0,FTy 58), Mop(Cast F1,bVar"STIP"), EX(Var("sip'rst",FTy 62),LN 60,LN 58,FTy 3), Mop(Cast F1,bVar"SSIP"), EX(Var("sip'rst",FTy 62),LN 61,LN 61,F1)])])) ; val write'rec'sip_def = Def ("write'rec'sip",TP[AVar F64,Var("x",CTy"sip")], Call("reg'sip",F64,Var("x",CTy"sip"))) ; val write'reg'sip_def = Def ("write'reg'sip",TP[AVar(CTy"sip"),Var("x",F64)], Call("rec'sip",CTy"sip",Var("x",F64))) ; val rec'sie_def = Def ("rec'sie",Var("x",F64), Rec(CTy"sie", [Bop(Bit,Var("x",F64),LN 1),Bop(Bit,Var("x",F64),LN 5), CC[EX(Var("x",F64),LN 0,LN 0,F1),EX(Var("x",F64),LN 4,LN 2,FTy 3), EX(Var("x",F64),LN 63,LN 6,FTy 58)]])) ; val reg'sie_def = Def ("reg'sie",Var("x",CTy"sie"), CS(Var("x",CTy"sie"), [(Rec(CTy"sie",[bVar"SSIE",bVar"STIE",Var("sie'rst",FTy 62)]), CC[EX(Var("sie'rst",FTy 62),LN 57,LN 0,FTy 58), Mop(Cast F1,bVar"STIE"), EX(Var("sie'rst",FTy 62),LN 60,LN 58,FTy 3), Mop(Cast F1,bVar"SSIE"), EX(Var("sie'rst",FTy 62),LN 61,LN 61,F1)])])) ; val write'rec'sie_def = Def ("write'rec'sie",TP[AVar F64,Var("x",CTy"sie")], Call("reg'sie",F64,Var("x",CTy"sie"))) ; val write'reg'sie_def = Def ("write'reg'sie",TP[AVar(CTy"sie"),Var("x",F64)], Call("rec'sie",CTy"sie",Var("x",F64))) ; val rec'FPCSR_def = Def ("rec'FPCSR",Var("x",F32), Rec(CTy"FPCSR", [Bop(Bit,Var("x",F32),LN 3),EX(Var("x",F32),LN 7,LN 5,FTy 3), Bop(Bit,Var("x",F32),LN 4),Bop(Bit,Var("x",F32),LN 0), Bop(Bit,Var("x",F32),LN 2),Bop(Bit,Var("x",F32),LN 1), EX(Var("x",F32),LN 31,LN 8,FTy 24)])) ; val reg'FPCSR_def = Def ("reg'FPCSR",Var("x",CTy"FPCSR"), CS(Var("x",CTy"FPCSR"), [(Rec(CTy"FPCSR", [bVar"DZ",Var("FRM",FTy 3),bVar"NV",bVar"NX",bVar"OF", bVar"UF",Var("fpcsr'rst",FTy 24)]), CC[Var("fpcsr'rst",FTy 24),Var("FRM",FTy 3),Mop(Cast F1,bVar"NV"), Mop(Cast F1,bVar"DZ"),Mop(Cast F1,bVar"OF"), Mop(Cast F1,bVar"UF"),Mop(Cast F1,bVar"NX")])])) ; val write'rec'FPCSR_def = Def ("write'rec'FPCSR",TP[AVar F32,Var("x",CTy"FPCSR")], Call("reg'FPCSR",F32,Var("x",CTy"FPCSR"))) ; val write'reg'FPCSR_def = Def ("write'reg'FPCSR",TP[AVar(CTy"FPCSR"),Var("x",F32)], Call("rec'FPCSR",CTy"FPCSR",Var("x",F32))) ; val lift_mip_sip_def = Def ("lift_mip_sip",Var("mip",CTy"mip"), Rupd ("SSIP", TP[Rupd ("STIP", TP[Call("rec'sip",CTy"sip",LW(0,64)), Dest("STIP",bTy,Var("mip",CTy"mip"))]), Dest("SSIP",bTy,Var("mip",CTy"mip"))])) ; val lift_mie_sie_def = Def ("lift_mie_sie",Var("mie",CTy"mie"), Rupd ("SSIE", TP[Rupd ("STIE", TP[Call("rec'sie",CTy"sie",LW(0,64)), Dest("STIE",bTy,Var("mie",CTy"mie"))]), Dest("SSIE",bTy,Var("mie",CTy"mie"))])) ; val lower_sip_mip_def = Def ("lower_sip_mip",TP[Var("sip",CTy"sip"),Var("mip",CTy"mip")], Rupd ("SSIP", TP[Rupd ("STIP", TP[Var("mip",CTy"mip"),Dest("STIP",bTy,Var("sip",CTy"sip"))]), Dest("SSIP",bTy,Var("sip",CTy"sip"))])) ; val lower_sie_mie_def = Def ("lower_sie_mie",TP[Var("sie",CTy"sie"),Var("mie",CTy"mie")], Rupd ("SSIE", TP[Rupd ("STIE", TP[Var("mie",CTy"mie"),Dest("STIE",bTy,Var("sie",CTy"sie"))]), Dest("SSIE",bTy,Var("sie",CTy"sie"))])) ; val update_mstatus_def = Def ("update_mstatus",TP[Var("orig",CTy"mstatus"),Var("v",CTy"mstatus")], Let(Var("s0",CTy"mstatus"), Rupd ("MPRV3", TP[Rupd ("MIE3", TP[Rupd ("MPRV2", TP[Rupd ("MIE2", TP[Rupd ("MPRV1", TP[Rupd ("MIE1", TP[Rupd ("MPRV", TP[Rupd ("MIE", TP[Var("orig", CTy"mstatus"), Dest ("MIE",bTy, Var("v", CTy"mstatus"))]), Dest ("MPRV",FTy 2, Var("v",CTy"mstatus"))]), Dest ("MIE1",bTy, Var("v",CTy"mstatus"))]), Dest ("MPRV1",FTy 2, Var("v",CTy"mstatus"))]), Dest("MIE2",bTy,Var("v",CTy"mstatus"))]), Dest("MPRV2",FTy 2,Var("v",CTy"mstatus"))]), Dest("MIE3",bTy,Var("v",CTy"mstatus"))]), Dest("MPRV3",FTy 2,Var("v",CTy"mstatus"))]), Rupd ("MSD", TP[Rupd ("MXS", TP[Rupd ("MFS", TP[Rupd ("MMPRV", TP[ITE(Call ("isValidVM",bTy, Dest ("VM",FTy 5,Var("v",CTy"mstatus"))), Rupd ("VM", TP[Var("s0",CTy"mstatus"), Dest ("VM",FTy 5, Var("v",CTy"mstatus"))]), Var("s0",CTy"mstatus")), Dest("MMPRV",bTy,Var("v",CTy"mstatus"))]), Dest("MFS",FTy 2,Var("v",CTy"mstatus"))]), Dest("MXS",FTy 2,Var("v",CTy"mstatus"))]), Bop(Or, EQ(Call ("extStatus",CTy"ExtStatus", Dest("MXS",FTy 2,Var("v",CTy"mstatus"))), LC("Dirty",CTy"ExtStatus")), EQ(Call ("extStatus",CTy"ExtStatus", Dest("MFS",FTy 2,Var("v",CTy"mstatus"))), LC("Dirty",CTy"ExtStatus")))]))) ; val lift_mstatus_sstatus_def = Def ("lift_mstatus_sstatus",Var("mst",CTy"mstatus"), Rupd ("SIE", TP[Rupd ("SPIE", TP[Rupd ("SPS", TP[Rupd ("SSD", TP[Rupd ("SFS", TP[Rupd ("SXS", TP[Rupd ("SMPRV", TP[Call ("rec'sstatus", CTy"sstatus",LW(0,64)), Dest ("MMPRV",bTy, Var("mst",CTy"mstatus"))]), Dest ("MXS",FTy 2, Var("mst",CTy"mstatus"))]), Dest("MFS",FTy 2,Var("mst",CTy"mstatus"))]), Bop(Or, EQ(Call ("extStatus",CTy"ExtStatus", Dest ("MXS",FTy 2, Var("mst",CTy"mstatus"))), LC("Dirty",CTy"ExtStatus")), EQ(Call ("extStatus",CTy"ExtStatus", Dest ("MFS",FTy 2, Var("mst",CTy"mstatus"))), LC("Dirty",CTy"ExtStatus")))]), Mop(Not, EQ(Call ("privilege",CTy"Privilege", Dest("MPRV1",FTy 2,Var("mst",CTy"mstatus"))), LC("User",CTy"Privilege")))]), Dest("MIE1",bTy,Var("mst",CTy"mstatus"))]), Dest("MIE",bTy,Var("mst",CTy"mstatus"))])) ; val lower_sstatus_mstatus_def = Def ("lower_sstatus_mstatus", TP[Var("sst",CTy"sstatus"),Var("mst",CTy"mstatus")], Call ("update_mstatus",CTy"mstatus", TP[Var("mst",CTy"mstatus"), Rupd ("MIE", TP[Rupd ("MIE1", TP[Rupd ("MPRV1", TP[Rupd ("MFS", TP[Rupd ("MXS", TP[Rupd ("MMPRV", TP[Call ("rec'mstatus", CTy"mstatus", Call ("reg'mstatus",F64, Var("mst",CTy"mstatus"))), Dest ("SMPRV",bTy, Var("sst",CTy"sstatus"))]), Dest ("SXS",FTy 2, Var("sst",CTy"sstatus"))]), Dest("SFS",FTy 2,Var("sst",CTy"sstatus"))]), Call ("privLevel",FTy 2, ITE(Dest("SPS",bTy,Var("sst",CTy"sstatus")), LC("Supervisor",CTy"Privilege"), LC("User",CTy"Privilege")))]), Dest("SPIE",bTy,Var("sst",CTy"sstatus"))]), Dest("SIE",bTy,Var("sst",CTy"sstatus"))])])) ; val popPrivilegeStack_def = Def ("popPrivilegeStack",Var("mst",CTy"mstatus"), Rupd ("MPRV2", TP[Rupd ("MIE2", TP[Rupd ("MPRV1", TP[Rupd ("MIE1", TP[Rupd ("MPRV", TP[Rupd ("MIE", TP[Var("mst",CTy"mstatus"), Dest ("MIE1",bTy, Var("mst",CTy"mstatus"))]), Dest ("MPRV1",FTy 2,Var("mst",CTy"mstatus"))]), Dest("MIE2",bTy,Var("mst",CTy"mstatus"))]), Dest("MPRV2",FTy 2,Var("mst",CTy"mstatus"))]),LT]), Call("privLevel",FTy 2,LC("User",CTy"Privilege"))])) ; val pushPrivilegeStack_def = Def ("pushPrivilegeStack", TP[Var("mst",CTy"mstatus"),Var("p",CTy"Privilege")], Rupd ("MPRV", TP[Rupd ("MIE", TP[Rupd ("MPRV1", TP[Rupd ("MIE1", TP[Rupd ("MPRV2", TP[Rupd ("MIE2", TP[Var("mst",CTy"mstatus"), Dest ("MIE1",bTy, Var("mst",CTy"mstatus"))]), Dest ("MPRV1",FTy 2,Var("mst",CTy"mstatus"))]), Dest("MIE",bTy,Var("mst",CTy"mstatus"))]), Dest("MPRV",FTy 2,Var("mst",CTy"mstatus"))]),LF]), Call("privLevel",FTy 2,Var("p",CTy"Privilege"))])) ; val scheduleCore_def = Def ("scheduleCore",nVar"id", Close (qVar"state", ITE(Bop(Lt,nVar"id",Dest("totalCore",nTy,qVar"state")), Rupd("procID",TP[qVar"state",Mop(Cast F8,nVar"id")]),qVar"state"))) ; val gpr_def = Def ("gpr",Var("n",FTy 5), Close (qVar"state", Apply (Apply (Dest("c_gpr",ATy(F8,ATy(FTy 5,F64)),qVar"state"), Dest("procID",F8,qVar"state")),Var("n",FTy 5)))) ; val write'gpr_def = Def ("write'gpr",TP[Var("value",F64),Var("n",FTy 5)], Close (qVar"state", Rupd ("c_gpr", TP[qVar"state", Fupd (Dest("c_gpr",ATy(F8,ATy(FTy 5,F64)),qVar"state"), Dest("procID",F8,qVar"state"), Fupd (Apply (Dest("c_gpr",ATy(F8,ATy(FTy 5,F64)),qVar"state"), Dest("procID",F8,qVar"state")),Var("n",FTy 5), Var("value",F64)))]))) ; val fcsr_def = Def ("fcsr",qVar"state", Dest ("fpcsr",CTy"FPCSR", Apply (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state")))) ; val write'fcsr_def = Def ("write'fcsr",Var("value",CTy"FPCSR"), Close (qVar"state", Let(qVar"s", Rupd ("c_UCSR", TP[qVar"state", Fupd (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("fpcsr", TP[Apply (Dest ("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state")), Var("value",CTy"FPCSR")]))]), Let(qVar"s", Let(Var("v",CTy"MachineCSR"), Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"), Dest("procID",F8,qVar"s")), Rupd ("c_MCSR", TP[qVar"s", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"), Dest("procID",F8,qVar"s"), Rupd ("mstatus", TP[Var("v",CTy"MachineCSR"), Rupd ("MFS", TP[Dest ("mstatus",CTy"mstatus", Var("v",CTy"MachineCSR")), Call ("ext_status",FTy 2, LC("Dirty",CTy"ExtStatus"))])]))])), Let(Var("v",CTy"MachineCSR"), Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"), Dest("procID",F8,qVar"s")), Rupd ("c_MCSR", TP[qVar"s", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"), Dest("procID",F8,qVar"s"), Rupd ("mstatus", TP[Var("v",CTy"MachineCSR"), Rupd ("MSD", TP[Dest ("mstatus",CTy"mstatus", Var("v",CTy"MachineCSR")),LT])]))])))))) ; val fpr_def = Def ("fpr",Var("n",FTy 5), Close (qVar"state", Apply (Apply (Dest("c_fpr",ATy(F8,ATy(FTy 5,F64)),qVar"state"), Dest("procID",F8,qVar"state")),Var("n",FTy 5)))) ; val write'fpr_def = Def ("write'fpr",TP[Var("value",F64),Var("n",FTy 5)], Close (qVar"state", Rupd ("c_fpr", TP[qVar"state", Fupd (Dest("c_fpr",ATy(F8,ATy(FTy 5,F64)),qVar"state"), Dest("procID",F8,qVar"state"), Fupd (Apply (Dest("c_fpr",ATy(F8,ATy(FTy 5,F64)),qVar"state"), Dest("procID",F8,qVar"state")),Var("n",FTy 5), Var("value",F64)))]))) ; val PC_def = Def ("PC",qVar"state", Apply (Dest("c_PC",ATy(F8,F64),qVar"state"),Dest("procID",F8,qVar"state"))) ; val write'PC_def = Def ("write'PC",Var("value",F64), Close (qVar"state", Rupd ("c_PC", TP[qVar"state", Fupd (Dest("c_PC",ATy(F8,F64),qVar"state"), Dest("procID",F8,qVar"state"),Var("value",F64))]))) ; val UCSR_def = Def ("UCSR",qVar"state", Apply (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state"))) ; val write'UCSR_def = Def ("write'UCSR",Var("value",CTy"UserCSR"), Close (qVar"state", Rupd ("c_UCSR", TP[qVar"state", Fupd (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state"),Var("value",CTy"UserCSR"))]))) ; val SCSR_def = Def ("SCSR",qVar"state", Apply (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"))) ; val write'SCSR_def = Def ("write'SCSR",Var("value",CTy"SupervisorCSR"), Close (qVar"state", Rupd ("c_SCSR", TP[qVar"state", Fupd (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Var("value",CTy"SupervisorCSR"))]))) ; val HCSR_def = Def ("HCSR",qVar"state", Apply (Dest("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"))) ; val write'HCSR_def = Def ("write'HCSR",Var("value",CTy"HypervisorCSR"), Close (qVar"state", Rupd ("c_HCSR", TP[qVar"state", Fupd (Dest("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Var("value",CTy"HypervisorCSR"))]))) ; val MCSR_def = Def ("MCSR",qVar"state", Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"))) ; val write'MCSR_def = Def ("write'MCSR",Var("value",CTy"MachineCSR"), Close (qVar"state", Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"),Var("value",CTy"MachineCSR"))]))) ; val NextFetch_def = Def ("NextFetch",qVar"state", Apply (Dest("c_NextFetch",ATy(F8,OTy(CTy"TransferControl")),qVar"state"), Dest("procID",F8,qVar"state"))) ; val write'NextFetch_def = Def ("write'NextFetch",Var("value",OTy(CTy"TransferControl")), Close (qVar"state", Rupd ("c_NextFetch", TP[qVar"state", Fupd (Dest ("c_NextFetch",ATy(F8,OTy(CTy"TransferControl")), qVar"state"),Dest("procID",F8,qVar"state"), Var("value",OTy(CTy"TransferControl")))]))) ; val ReserveLoad_def = Def ("ReserveLoad",qVar"state", Apply (Dest("c_ReserveLoad",ATy(F8,OTy F64),qVar"state"), Dest("procID",F8,qVar"state"))) ; val write'ReserveLoad_def = Def ("write'ReserveLoad",Var("value",OTy F64), Close (qVar"state", Rupd ("c_ReserveLoad", TP[qVar"state", Fupd (Dest("c_ReserveLoad",ATy(F8,OTy F64),qVar"state"), Dest("procID",F8,qVar"state"),Var("value",OTy F64))]))) ; val ExitCode_def = Def ("ExitCode",qVar"state", Apply (Dest("c_ExitCode",ATy(F8,F64),qVar"state"), Dest("procID",F8,qVar"state"))) ; val write'ExitCode_def = Def ("write'ExitCode",Var("value",F64), Close (qVar"state", Rupd ("c_ExitCode", TP[qVar"state", Fupd (Dest("c_ExitCode",ATy(F8,F64),qVar"state"), Dest("procID",F8,qVar"state"),Var("value",F64))]))) ; val curArch_def = Def ("curArch",AVar uTy, Close (qVar"state", Apply (Call ("architecture",ATy(qTy,PTy(CTy"Architecture",qTy)), Dest ("ArchBase",FTy 2, Dest ("mcpuid",CTy"mcpuid", Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"state")))), qVar"state"))) ; val in32BitMode_def = Def ("in32BitMode",AVar uTy, Close (qVar"state", Let(TP[Var("v",CTy"Architecture"),qVar"s"], Apply (Call("curArch",ATy(qTy,PTy(CTy"Architecture",qTy)),LU), qVar"state"), TP[EQ(Var("v",CTy"Architecture"),LC("RV32I",CTy"Architecture")), qVar"s"]))) ; val curPrivilege_def = Def ("curPrivilege",AVar uTy, Close (qVar"state", Call ("privilege",CTy"Privilege", Dest ("MPRV",FTy 2, Dest ("mstatus",CTy"mstatus", Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"state")))))) ; val curEPC_def = Def ("curEPC",AVar uTy, Close (qVar"state", CS(Apply (Call("curPrivilege",ATy(qTy,CTy"Privilege"),LU),qVar"state"), [(LC("User",CTy"Privilege"), Apply (Call ("raise'exception",ATy(qTy,PTy(F64,qTy)), Call ("INTERNAL_ERROR",CTy"exception",LS"No EPC in U-mode")), qVar"state")), (LC("Supervisor",CTy"Privilege"), TP[Dest ("sepc",F64, Apply (Const("SCSR",ATy(qTy,CTy"SupervisorCSR")),qVar"state")), qVar"state"]), (LC("Hypervisor",CTy"Privilege"), TP[Dest ("hepc",F64, Apply (Const("HCSR",ATy(qTy,CTy"HypervisorCSR")),qVar"state")), qVar"state"]), (LC("Machine",CTy"Privilege"), TP[Dest ("mepc",F64, Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"state")), qVar"state"])]))) ; val sendIPI_def = Def ("sendIPI",Var("core",F64), Close (qVar"state", Let(Var("id",F8),Mop(Cast F8,Var("core",F64)), ITE(Bop(Lt,Mop(Cast nTy,Var("id",F8)), Dest("totalCore",nTy,qVar"state")), Let(Var("v",CTy"MachineCSR"), Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Var("id",F8)), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Var("id",F8), Rupd ("mip", TP[Var("v",CTy"MachineCSR"), Rupd ("MSIP", TP[Dest ("mip",CTy"mip", Var("v",CTy"MachineCSR")),LT])]))])), qVar"state")))) ; val rnd_mode_static_def = Def ("rnd_mode_static",Var("rnd",FTy 3), CS(Var("rnd",FTy 3), [(LW(0,3),Mop(Some,LC("RNE",CTy"Rounding"))), (LW(1,3),Mop(Some,LC("RTZ",CTy"Rounding"))), (LW(2,3),Mop(Some,LC("RDN",CTy"Rounding"))), (LW(3,3),Mop(Some,LC("RUP",CTy"Rounding"))), (LW(4,3),Mop(Some,LC("RMM",CTy"Rounding"))), (LW(7,3),Mop(Some,LC("RDYN",CTy"Rounding"))), (AVar(FTy 3),LO(CTy"Rounding"))])) ; val rnd_mode_dynamic_def = Def ("rnd_mode_dynamic",Var("rnd",FTy 3), CS(Var("rnd",FTy 3), [(LW(0,3),Mop(Some,LC("RNE",CTy"Rounding"))), (LW(1,3),Mop(Some,LC("RTZ",CTy"Rounding"))), (LW(2,3),Mop(Some,LC("RDN",CTy"Rounding"))), (LW(3,3),Mop(Some,LC("RUP",CTy"Rounding"))), (LW(4,3),Mop(Some,LC("RMM",CTy"Rounding"))), (AVar(FTy 3),LO(CTy"Rounding"))])) ; val l3round_def = Def ("l3round",Var("rnd",CTy"Rounding"), CS(Var("rnd",CTy"Rounding"), [(LC("RNE",CTy"Rounding"), Mop(Some,binary_ieeeSyntax.roundTiesToEven_tm)), (LC("RTZ",CTy"Rounding"), Mop(Some,binary_ieeeSyntax.roundTowardZero_tm)), (LC("RDN",CTy"Rounding"), Mop(Some,binary_ieeeSyntax.roundTowardNegative_tm)), (LC("RUP",CTy"Rounding"), Mop(Some,binary_ieeeSyntax.roundTowardPositive_tm)), (LC("RMM",CTy"Rounding"),LO rTy),(LC("RDYN",CTy"Rounding"),LO rTy)])) ; val round_def = Def ("round",Var("rnd",FTy 3), Close (qVar"state", CS(Call("rnd_mode_static",OTy(CTy"Rounding"),Var("rnd",FTy 3)), [(Mop(Some,LC("RDYN",CTy"Rounding")), CS(Call ("rnd_mode_dynamic",OTy(CTy"Rounding"), Dest ("FRM",FTy 3, Apply(Const("fcsr",ATy(qTy,CTy"FPCSR")),qVar"state"))), [(Mop(Some,Var("frm",CTy"Rounding")), Call("l3round",OTy rTy,Var("frm",CTy"Rounding"))), (LO(CTy"Rounding"),LO rTy)])), (Mop(Some,Var("frm",CTy"Rounding")), Call("l3round",OTy rTy,Var("frm",CTy"Rounding"))), (LO(CTy"Rounding"),LO rTy)]))) ; val RV32_CanonicalNan_def = Def0 ("RV32_CanonicalNan",LW(2143289344,32)) ; val RV64_CanonicalNan_def = Def0 ("RV64_CanonicalNan",LW(9221120237041090560,64)) ; val FP32_IsSignalingNan_def = Def ("FP32_IsSignalingNan",Var("x",F32), Bop(And,EQ(EX(Var("x",F32),LN 30,LN 23,F8),LW(255,8)), Bop(And,EQ(Bop(Bit,Var("x",F32),LN 22),LF), Mop(Not,EQ(EX(Var("x",F32),LN 21,LN 0,FTy 22),LW(0,22)))))) ; val FP64_IsSignalingNan_def = Def ("FP64_IsSignalingNan",Var("x",F64), Bop(And,EQ(EX(Var("x",F64),LN 62,LN 52,FTy 11),LW(2047,11)), Bop(And,EQ(Bop(Bit,Var("x",F64),LN 51),LF), Mop(Not,EQ(EX(Var("x",F64),LN 50,LN 0,FTy 51),LW(0,51)))))) ; val FP32_Sign_def = Def ("FP32_Sign",Var("x",F32),Bop(Bit,Var("x",F32),LN 31)) ; val FP64_Sign_def = Def ("FP64_Sign",Var("x",F64),Bop(Bit,Var("x",F64),LN 63)) ; val setFP_Invalid_def = Def ("setFP_Invalid",AVar uTy, Close (qVar"state", Apply (Call ("write'fcsr",ATy(qTy,qTy), Rupd ("NV", TP[Apply(Const("fcsr",ATy(qTy,CTy"FPCSR")),qVar"state"),LT])), qVar"state"))) ; val setFP_DivZero_def = Def ("setFP_DivZero",AVar uTy, Close (qVar"state", Apply (Call ("write'fcsr",ATy(qTy,qTy), Rupd ("DZ", TP[Apply(Const("fcsr",ATy(qTy,CTy"FPCSR")),qVar"state"),LT])), qVar"state"))) ; val setFP_Overflow_def = Def ("setFP_Overflow",AVar uTy, Close (qVar"state", Apply (Call ("write'fcsr",ATy(qTy,qTy), Rupd ("OF", TP[Apply(Const("fcsr",ATy(qTy,CTy"FPCSR")),qVar"state"),LT])), qVar"state"))) ; val setFP_Underflow_def = Def ("setFP_Underflow",AVar uTy, Close (qVar"state", Apply (Call ("write'fcsr",ATy(qTy,qTy), Rupd ("OF", TP[Apply(Const("fcsr",ATy(qTy,CTy"FPCSR")),qVar"state"),LT])), qVar"state"))) ; val setFP_Inexact_def = Def ("setFP_Inexact",AVar uTy, Close (qVar"state", Apply (Call ("write'fcsr",ATy(qTy,qTy), Rupd ("OF", TP[Apply(Const("fcsr",ATy(qTy,CTy"FPCSR")),qVar"state"),LT])), qVar"state"))) ; val csrRW_def = Def ("csrRW",Var("csr",FTy 12),EX(Var("csr",FTy 12),LN 11,LN 10,FTy 2)) ; val csrPR_def = Def ("csrPR",Var("csr",FTy 12),EX(Var("csr",FTy 12),LN 9,LN 8,FTy 2)) ; val check_CSR_access_def = Def ("check_CSR_access", TP[Var("rw",FTy 2),Var("pr",FTy 2),Var("p",CTy"Privilege"), Var("a",CTy"accessType")], Bop(And, Bop(Or,EQ(Var("a",CTy"accessType"),LC("Read",CTy"accessType")), Mop(Not,EQ(Var("rw",FTy 2),LW(3,2)))), Bop(Uge,Call("privLevel",FTy 2,Var("p",CTy"Privilege")), Var("pr",FTy 2)))) ; val is_CSR_defined_def = Def ("is_CSR_defined",Var("csr",FTy 12), Close (qVar"state", ITB([(Bop(And,Bop(Ge,Var("csr",FTy 12),LW(1,12)), Bop(Le,Var("csr",FTy 12),LW(3,12))),TP[LT,qVar"state"]), (Bop(And,Bop(Ge,Var("csr",FTy 12),LW(3072,12)), Bop(Le,Var("csr",FTy 12),LW(3074,12))),TP[LT,qVar"state"])], Let(TP[bVar"v",qVar"s"], ITE(Bop(Ge,Var("csr",FTy 12),LW(3200,12)), ITE(Bop(Le,Var("csr",FTy 12),LW(3202,12)), Apply (Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU), qVar"state"),TP[LF,qVar"state"]), TP[LF,qVar"state"]), ITB([(bVar"v",TP[LT,qVar"s"]), (Bop(And,Bop(Ge,Var("csr",FTy 12),LW(256,12)), Bop(Le,Var("csr",FTy 12),LW(257,12))), TP[LT,qVar"s"]), (EQ(Var("csr",FTy 12),LW(260,12)),TP[LT,qVar"s"]), (EQ(Var("csr",FTy 12),LW(289,12)),TP[LT,qVar"s"]), (EQ(Var("csr",FTy 12),LW(3329,12)),TP[LT,qVar"s"])], Let(TP[bVar"v",qVar"s"], ITE(EQ(Var("csr",FTy 12),LW(3457,12)), Apply (Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU), qVar"s"),TP[LF,qVar"s"]), ITB([(bVar"v",TP[LT,qVar"s"]), (Bop(And,Bop(Ge,Var("csr",FTy 12),LW(320,12)), Bop(Le,Var("csr",FTy 12),LW(321,12))), TP[LT,qVar"s"]), (EQ(Var("csr",FTy 12),LW(324,12)), TP[LT,qVar"s"]), (Bop(And,Bop(Ge,Var("csr",FTy 12),LW(3394,12)), Bop(Le,Var("csr",FTy 12),LW(3395,12))), TP[LT,qVar"s"]), (Bop(And,Bop(Ge,Var("csr",FTy 12),LW(384,12)), Bop(Le,Var("csr",FTy 12),LW(385,12))), TP[LT,qVar"s"]), (Bop(And,Bop(Ge,Var("csr",FTy 12),LW(2304,12)), Bop(Le,Var("csr",FTy 12),LW(2306,12))), TP[LT,qVar"s"])], Let(TP[bVar"v",qVar"s"], ITE(Bop(Ge,Var("csr",FTy 12),LW(2432,12)), ITE(Bop(Le,Var("csr",FTy 12),LW(2434,12)), Apply (Call ("in32BitMode", ATy(qTy,PTy(bTy,qTy)),LU), qVar"s"),TP[LF,qVar"s"]), TP[LF,qVar"s"]), ITB([(bVar"v",TP[LT,qVar"s"]), (Bop(And, Bop(Ge,Var("csr",FTy 12), LW(3840,12)), Bop(Le,Var("csr",FTy 12), LW(3841,12))),TP[LT,qVar"s"]), (EQ(Var("csr",FTy 12),LW(3856,12)), TP[LT,qVar"s"]), (Bop(And, Bop(Ge,Var("csr",FTy 12), LW(768,12)), Bop(Le,Var("csr",FTy 12), LW(770,12))),TP[LT,qVar"s"]), (EQ(Var("csr",FTy 12),LW(772,12)), TP[LT,qVar"s"]), (EQ(Var("csr",FTy 12),LW(801,12)), TP[LT,qVar"s"]), (EQ(Var("csr",FTy 12),LW(1793,12)), TP[LT,qVar"s"])], Let(TP[bVar"v",qVar"s"], ITE(EQ(Var("csr",FTy 12),LW(1857,12)), Apply (Call ("in32BitMode", ATy(qTy,PTy(bTy,qTy)),LU), qVar"s"),TP[LF,qVar"s"]), ITB([(bVar"v",TP[LT,qVar"s"]), (Bop(And, Bop(Ge,Var("csr",FTy 12), LW(832,12)), Bop(Le,Var("csr",FTy 12), LW(836,12))), TP[LT,qVar"s"]), (Bop(And, Bop(Ge,Var("csr",FTy 12), LW(896,12)), Bop(Le,Var("csr",FTy 12), LW(901,12))), TP[LT,qVar"s"]), (Bop(Ge,Var("csr",FTy 12), LW(2817,12)), TP[LT,qVar"s"])], Let(TP[bVar"v",qVar"s"], ITE(EQ(Var("csr",FTy 12), LW(2945,12)), Apply (Call ("in32BitMode", ATy(qTy, PTy(bTy,qTy)), LU),qVar"s"), TP[LF,qVar"s"]), TP[Bop(Or,bVar"v", Bop(And, Bop(Ge, Var("csr", FTy 12), LW(1920,12)), Bop(And, Bop(Le, Var("csr", FTy 12), LW(1923, 12)), Mop(Not, EQ(Var("csr", FTy 12), LW(1922, 12)))))), qVar"s"])))))))))))) ; val CSRMap_def = Def ("CSRMap",Var("csr",FTy 12), Close (qVar"state", CS(Var("csr",FTy 12), [(LW(1,12), TP[Mop(Cast F64, EX(Call ("reg'FPCSR",F32, Dest ("fpcsr",CTy"FPCSR", Apply (Dest ("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),LN 4,LN 0, FTy 5)),qVar"state"]), (LW(2,12), TP[Mop(Cast F64, Dest ("FRM",FTy 3, Dest ("fpcsr",CTy"FPCSR", Apply (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state"))))),qVar"state"]), (LW(3,12), TP[Mop(Cast F64, EX(Call ("reg'FPCSR",F32, Dest ("fpcsr",CTy"FPCSR", Apply (Dest ("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),LN 7,LN 0, F8)),qVar"state"]), (LW(3072,12), TP[Bop(Add, Apply (Dest("c_cycles",ATy(F8,F64),qVar"state"), Dest("procID",F8,qVar"state")), Dest ("cycle_delta",F64, Apply (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(3073,12), TP[Bop(Add,Dest("clock",F64,qVar"state"), Dest ("time_delta",F64, Apply (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(3074,12), TP[Bop(Add, Apply (Dest("c_instret",ATy(F8,F64),qVar"state"), Dest("procID",F8,qVar"state")), Dest ("instret_delta",F64, Apply (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(3200,12), TP[Mop(SE F64, EX(Bop(Add, Apply (Dest("c_cycles",ATy(F8,F64),qVar"state"), Dest("procID",F8,qVar"state")), Dest ("cycle_delta",F64, Apply (Dest ("c_UCSR",ATy(F8,CTy"UserCSR"), qVar"state"), Dest("procID",F8,qVar"state")))),LN 63, LN 32,F32)),qVar"state"]), (LW(3201,12), TP[Mop(SE F64, EX(Bop(Add,Dest("clock",F64,qVar"state"), Dest ("time_delta",F64, Apply (Dest ("c_UCSR",ATy(F8,CTy"UserCSR"), qVar"state"), Dest("procID",F8,qVar"state")))),LN 63, LN 32,F32)),qVar"state"]), (LW(3202,12), TP[Mop(SE F64, EX(Bop(Add, Apply (Dest("c_instret",ATy(F8,F64),qVar"state"), Dest("procID",F8,qVar"state")), Dest ("instret_delta",F64, Apply (Dest ("c_UCSR",ATy(F8,CTy"UserCSR"), qVar"state"), Dest("procID",F8,qVar"state")))),LN 63, LN 32,F32)),qVar"state"]), (LW(256,12), TP[Call ("reg'sstatus",F64, Call ("lift_mstatus_sstatus",CTy"sstatus", Dest ("mstatus",CTy"mstatus", Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"))))),qVar"state"]), (LW(257,12), TP[Dest ("stvec",F64, Apply (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(260,12), TP[Call ("reg'sie",F64, Call ("lift_mie_sie",CTy"sie", Dest ("mie",CTy"mie", Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"))))),qVar"state"]), (LW(289,12), TP[Dest ("stimecmp",F64, Apply (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(3329,12), TP[Bop(Add,Dest("clock",F64,qVar"state"), Dest ("stime_delta",F64, Apply (Dest ("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(3457,12), TP[Mop(SE F64, EX(Bop(Add,Dest("clock",F64,qVar"state"), Dest ("stime_delta",F64, Apply (Dest ("c_SCSR",ATy(F8,CTy"SupervisorCSR"), qVar"state"), Dest("procID",F8,qVar"state")))),LN 63, LN 32,F32)),qVar"state"]), (LW(320,12), TP[Dest ("sscratch",F64, Apply (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(321,12), TP[Dest ("sepc",F64, Apply (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(3394,12), TP[Call ("reg'mcause",F64, Dest ("scause",CTy"mcause", Apply (Dest ("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(3395,12), TP[Dest ("sbadaddr",F64, Apply (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(324,12), TP[Call ("reg'sip",F64, Call ("lift_mip_sip",CTy"sip", Dest ("mip",CTy"mip", Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"))))),qVar"state"]), (LW(384,12), TP[Dest ("sptbr",F64, Apply (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(385,12), TP[Dest ("sasid",F64, Apply (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(2304,12), TP[Bop(Add, Apply (Dest("c_cycles",ATy(F8,F64),qVar"state"), Dest("procID",F8,qVar"state")), Dest ("cycle_delta",F64, Apply (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(2305,12), TP[Bop(Add,Dest("clock",F64,qVar"state"), Dest ("time_delta",F64, Apply (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(2306,12), TP[Bop(Add, Apply (Dest("c_instret",ATy(F8,F64),qVar"state"), Dest("procID",F8,qVar"state")), Dest ("instret_delta",F64, Apply (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(2432,12), TP[Mop(SE F64, EX(Bop(Add, Apply (Dest("c_cycles",ATy(F8,F64),qVar"state"), Dest("procID",F8,qVar"state")), Dest ("cycle_delta",F64, Apply (Dest ("c_UCSR",ATy(F8,CTy"UserCSR"), qVar"state"), Dest("procID",F8,qVar"state")))),LN 63, LN 32,F32)),qVar"state"]), (LW(2433,12), TP[Mop(SE F64, EX(Bop(Add,Dest("clock",F64,qVar"state"), Dest ("time_delta",F64, Apply (Dest ("c_UCSR",ATy(F8,CTy"UserCSR"), qVar"state"), Dest("procID",F8,qVar"state")))),LN 63, LN 32,F32)),qVar"state"]), (LW(2434,12), TP[Mop(SE F64, EX(Bop(Add, Apply (Dest("c_instret",ATy(F8,F64),qVar"state"), Dest("procID",F8,qVar"state")), Dest ("instret_delta",F64, Apply (Dest ("c_UCSR",ATy(F8,CTy"UserCSR"), qVar"state"), Dest("procID",F8,qVar"state")))),LN 63, LN 32,F32)),qVar"state"]), (LW(512,12), TP[Call ("reg'mstatus",F64, Dest ("hstatus",CTy"mstatus", Apply (Dest ("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(513,12), TP[Dest ("htvec",F64, Apply (Dest("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(514,12), TP[Call ("reg'mtdeleg",F64, Dest ("htdeleg",CTy"mtdeleg", Apply (Dest ("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(545,12), TP[Dest ("htimecmp",F64, Apply (Dest("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(3585,12), TP[Bop(Add,Dest("clock",F64,qVar"state"), Dest ("htime_delta",F64, Apply (Dest ("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(3713,12), TP[Mop(SE F64, EX(Bop(Add,Dest("clock",F64,qVar"state"), Dest ("htime_delta",F64, Apply (Dest ("c_HCSR",ATy(F8,CTy"HypervisorCSR"), qVar"state"), Dest("procID",F8,qVar"state")))),LN 63, LN 32,F32)),qVar"state"]), (LW(576,12), TP[Dest ("hscratch",F64, Apply (Dest("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(577,12), TP[Dest ("hepc",F64, Apply (Dest("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(578,12), TP[Call ("reg'mcause",F64, Dest ("hcause",CTy"mcause", Apply (Dest ("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(579,12), TP[Dest ("hbadaddr",F64, Apply (Dest("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(2561,12), TP[Bop(Add,Dest("clock",F64,qVar"state"), Dest ("stime_delta",F64, Apply (Dest ("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(2689,12), TP[Mop(SE F64, EX(Bop(Add,Dest("clock",F64,qVar"state"), Dest ("stime_delta",F64, Apply (Dest ("c_SCSR",ATy(F8,CTy"SupervisorCSR"), qVar"state"), Dest("procID",F8,qVar"state")))),LN 63, LN 32,F32)),qVar"state"]), (LW(3840,12), TP[Call ("reg'mcpuid",F64, Dest ("mcpuid",CTy"mcpuid", Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(3841,12), TP[Call ("reg'mimpid",F64, Dest ("mimpid",CTy"mimpid", Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(3856,12), TP[Dest ("mhartid",F64, Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(768,12), TP[Call ("reg'mstatus",F64, Dest ("mstatus",CTy"mstatus", Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(769,12), TP[Dest ("mtvec",F64, Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(770,12), TP[Call ("reg'mtdeleg",F64, Dest ("mtdeleg",CTy"mtdeleg", Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(772,12), TP[Call ("reg'mie",F64, Dest ("mie",CTy"mie", Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(801,12), TP[Dest ("mtimecmp",F64, Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(1793,12), TP[Bop(Add,Dest("clock",F64,qVar"state"), Dest ("mtime_delta",F64, Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(1857,12), TP[Mop(SE F64, EX(Bop(Add,Dest("clock",F64,qVar"state"), Dest ("mtime_delta",F64, Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"), Dest("procID",F8,qVar"state")))),LN 63, LN 32,F32)),qVar"state"]), (LW(832,12), TP[Dest ("mscratch",F64, Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(833,12), TP[Dest ("mepc",F64, Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(834,12), TP[Call ("reg'mcause",F64, Dest ("mcause",CTy"mcause", Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(835,12), TP[Dest ("mbadaddr",F64, Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(836,12), TP[Call ("reg'mip",F64, Dest ("mip",CTy"mip", Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(896,12), TP[Dest ("mbase",F64, Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(897,12), TP[Dest ("mbound",F64, Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(898,12), TP[Dest ("mibase",F64, Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(899,12), TP[Dest ("mibound",F64, Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(900,12), TP[Dest ("mdbase",F64, Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(901,12), TP[Dest ("mdbound",F64, Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(2817,12), TP[Bop(Add,Dest("clock",F64,qVar"state"), Dest ("htime_delta",F64, Apply (Dest ("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state")))),qVar"state"]), (LW(2945,12), TP[Mop(SE F64, EX(Bop(Add,Dest("clock",F64,qVar"state"), Dest ("htime_delta",F64, Apply (Dest ("c_HCSR",ATy(F8,CTy"HypervisorCSR"), qVar"state"), Dest("procID",F8,qVar"state")))),LN 63, LN 32,F32)),qVar"state"]), (LW(1920,12), TP[Dest ("mtohost",F64, Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(1921,12), TP[Dest ("mfromhost",F64, Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"))),qVar"state"]), (LW(1923,12),TP[LW(0,64),qVar"state"]), (AVar(FTy 12), Apply (Call ("raise'exception",ATy(qTy,PTy(F64,qTy)), Call ("UNDEFINED",CTy"exception", CC[LS"unexpected CSR read at ", Mop(Cast sTy,Var("csr",FTy 12))])),qVar"state"))]))) ; val write'CSRMap_def = Def ("write'CSRMap",TP[Var("value",F64),Var("csr",FTy 12)], Close (qVar"state", CS(Var("csr",FTy 12), [(LW(1,12), Let(qVar"s", Let(Var("v",CTy"UserCSR"), Apply (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state")), Let(Var("x1",CTy"FPCSR"), Dest("fpcsr",CTy"FPCSR",Var("v",CTy"UserCSR")), Rupd ("c_UCSR", TP[qVar"state", Fupd (Dest ("c_UCSR",ATy(F8,CTy"UserCSR"), qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("fpcsr", TP[Var("v",CTy"UserCSR"), Call ("write'reg'FPCSR",CTy"FPCSR", TP[Var("x1",CTy"FPCSR"), BFI(LN 4,LN 0, EX(Var("value",F64),LN 4, LN 0,FTy 5), Call ("reg'FPCSR",F32, Var("x1",CTy"FPCSR")))])]))]))), Let(qVar"s", Let(Var("v",CTy"MachineCSR"), Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"), Dest("procID",F8,qVar"s")), Rupd ("c_MCSR", TP[qVar"s", Fupd (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"s"),Dest("procID",F8,qVar"s"), Rupd ("mstatus", TP[Var("v",CTy"MachineCSR"), Rupd ("MFS", TP[Dest ("mstatus",CTy"mstatus", Var("v",CTy"MachineCSR")), Call ("ext_status",FTy 2, LC("Dirty",CTy"ExtStatus"))])]))])), Let(Var("v",CTy"MachineCSR"), Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"), Dest("procID",F8,qVar"s")), Rupd ("c_MCSR", TP[qVar"s", Fupd (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"s"),Dest("procID",F8,qVar"s"), Rupd ("mstatus", TP[Var("v",CTy"MachineCSR"), Rupd ("MSD", TP[Dest ("mstatus",CTy"mstatus", Var("v",CTy"MachineCSR")), LT])]))]))))), (LW(2,12), Let(qVar"s", Let(Var("v",CTy"UserCSR"), Apply (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state")), Rupd ("c_UCSR", TP[qVar"state", Fupd (Dest ("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("fpcsr", TP[Var("v",CTy"UserCSR"), Rupd ("FRM", TP[Dest ("fpcsr",CTy"FPCSR", Var("v",CTy"UserCSR")), EX(Var("value",F64),LN 2,LN 0, FTy 3)])]))])), Let(qVar"s", Let(Var("v",CTy"MachineCSR"), Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"), Dest("procID",F8,qVar"s")), Rupd ("c_MCSR", TP[qVar"s", Fupd (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"s"),Dest("procID",F8,qVar"s"), Rupd ("mstatus", TP[Var("v",CTy"MachineCSR"), Rupd ("MFS", TP[Dest ("mstatus",CTy"mstatus", Var("v",CTy"MachineCSR")), Call ("ext_status",FTy 2, LC("Dirty",CTy"ExtStatus"))])]))])), Let(Var("v",CTy"MachineCSR"), Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"), Dest("procID",F8,qVar"s")), Rupd ("c_MCSR", TP[qVar"s", Fupd (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"s"),Dest("procID",F8,qVar"s"), Rupd ("mstatus", TP[Var("v",CTy"MachineCSR"), Rupd ("MSD", TP[Dest ("mstatus",CTy"mstatus", Var("v",CTy"MachineCSR")), LT])]))]))))), (LW(3,12), Let(qVar"s", Let(Var("v",CTy"UserCSR"), Apply (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state")), Rupd ("c_UCSR", TP[qVar"state", Fupd (Dest ("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("fpcsr", TP[Var("v",CTy"UserCSR"), Call ("write'reg'FPCSR",CTy"FPCSR", TP[Dest ("fpcsr",CTy"FPCSR", Var("v",CTy"UserCSR")), EX(Var("value",F64),LN 31,LN 0,F32)])]))])), Let(qVar"s", Let(Var("v",CTy"MachineCSR"), Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"), Dest("procID",F8,qVar"s")), Rupd ("c_MCSR", TP[qVar"s", Fupd (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"s"),Dest("procID",F8,qVar"s"), Rupd ("mstatus", TP[Var("v",CTy"MachineCSR"), Rupd ("MFS", TP[Dest ("mstatus",CTy"mstatus", Var("v",CTy"MachineCSR")), Call ("ext_status",FTy 2, LC("Dirty",CTy"ExtStatus"))])]))])), Let(Var("v",CTy"MachineCSR"), Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"), Dest("procID",F8,qVar"s")), Rupd ("c_MCSR", TP[qVar"s", Fupd (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"s"),Dest("procID",F8,qVar"s"), Rupd ("mstatus", TP[Var("v",CTy"MachineCSR"), Rupd ("MSD", TP[Dest ("mstatus",CTy"mstatus", Var("v",CTy"MachineCSR")), LT])]))]))))), (LW(256,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mstatus", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Call ("lower_sstatus_mstatus",CTy"mstatus", TP[Call ("rec'sstatus",CTy"sstatus", Var("value",F64)), Dest ("mstatus",CTy"mstatus", Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"), Dest("procID",F8,qVar"state")))])]))])), (LW(257,12), Rupd ("c_SCSR", TP[qVar"state", Fupd (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("stvec", TP[Apply (Dest ("c_SCSR",ATy(F8,CTy"SupervisorCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Var("value",F64)]))])), (LW(260,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mie", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Call ("lower_sie_mie",CTy"mie", TP[Call("rec'sie",CTy"sie",Var("value",F64)), Dest ("mie",CTy"mie", Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"), Dest("procID",F8,qVar"state")))])]))])), (LW(289,12), Let(qVar"s", Rupd ("c_SCSR", TP[qVar"state", Fupd (Dest ("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("stimecmp", TP[Apply (Dest ("c_SCSR",ATy(F8,CTy"SupervisorCSR"), qVar"state"), Dest("procID",F8,qVar"state")), Var("value",F64)]))]), Let(Var("v",CTy"MachineCSR"), Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"), Dest("procID",F8,qVar"s")), Rupd ("c_MCSR", TP[qVar"s", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"), Dest("procID",F8,qVar"s"), Rupd ("mip", TP[Var("v",CTy"MachineCSR"), Rupd ("STIP", TP[Dest ("mip",CTy"mip", Var("v",CTy"MachineCSR")),LF])]))])))), (LW(320,12), Rupd ("c_SCSR", TP[qVar"state", Fupd (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("sscratch", TP[Apply (Dest ("c_SCSR",ATy(F8,CTy"SupervisorCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Var("value",F64)]))])), (LW(321,12), Rupd ("c_SCSR", TP[qVar"state", Fupd (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("sepc", TP[Apply (Dest ("c_SCSR",ATy(F8,CTy"SupervisorCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Bop(BAnd,Var("value",F64),Mop(SE F64,LW(4,3)))]))])), (LW(324,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mip", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Call ("lower_sip_mip",CTy"mip", TP[Call("rec'sip",CTy"sip",Var("value",F64)), Dest ("mip",CTy"mip", Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"), Dest("procID",F8,qVar"state")))])]))])), (LW(384,12), Rupd ("c_SCSR", TP[qVar"state", Fupd (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("sptbr", TP[Apply (Dest ("c_SCSR",ATy(F8,CTy"SupervisorCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Var("value",F64)]))])), (LW(385,12), Rupd ("c_SCSR", TP[qVar"state", Fupd (Dest("c_SCSR",ATy(F8,CTy"SupervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("sasid", TP[Apply (Dest ("c_SCSR",ATy(F8,CTy"SupervisorCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Var("value",F64)]))])), (LW(2304,12), Rupd ("c_UCSR", TP[qVar"state", Fupd (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("cycle_delta", TP[Apply (Dest ("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state")), Bop(Sub,Var("value",F64), Apply (Dest("c_cycles",ATy(F8,F64),qVar"state"), Dest("procID",F8,qVar"state")))]))])), (LW(2305,12), Rupd ("c_UCSR", TP[qVar"state", Fupd (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("time_delta", TP[Apply (Dest ("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state")), Bop(Sub,Var("value",F64), Dest("clock",F64,qVar"state"))]))])), (LW(2306,12), Rupd ("c_UCSR", TP[qVar"state", Fupd (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("instret_delta", TP[Apply (Dest ("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state")), Bop(Sub,Var("value",F64), Apply (Dest("c_instret",ATy(F8,F64),qVar"state"), Dest("procID",F8,qVar"state")))]))])), (LW(2432,12), Let(Var("v",CTy"UserCSR"), Apply (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state")), Rupd ("c_UCSR", TP[qVar"state", Fupd (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("cycle_delta", TP[Var("v",CTy"UserCSR"), BFI(LN 63,LN 32, Bop(Lsl, Bop(Sub, EX(Var("value",F64),LN 31,LN 0, F32), EX(Apply (Dest ("c_cycles",ATy(F8,F64), qVar"state"), Dest ("procID",F8,qVar"state")), LN 63,LN 32,F32)),LN 32), Dest ("cycle_delta",F64, Var("v",CTy"UserCSR")))]))]))), (LW(2433,12), Let(Var("v",CTy"UserCSR"), Apply (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state")), Rupd ("c_UCSR", TP[qVar"state", Fupd (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("time_delta", TP[Var("v",CTy"UserCSR"), BFI(LN 63,LN 32, Bop(Lsl, Bop(Sub, EX(Var("value",F64),LN 31,LN 0, F32), EX(Dest("clock",F64,qVar"state"), LN 63,LN 32,F32)),LN 32), Dest ("time_delta",F64, Var("v",CTy"UserCSR")))]))]))), (LW(2434,12), Let(Var("v",CTy"UserCSR"), Apply (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state")), Rupd ("c_UCSR", TP[qVar"state", Fupd (Dest("c_UCSR",ATy(F8,CTy"UserCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("instret_delta", TP[Var("v",CTy"UserCSR"), BFI(LN 63,LN 32, Bop(Lsl, Bop(Sub, EX(Var("value",F64),LN 31,LN 0, F32), EX(Apply (Dest ("c_instret", ATy(F8,F64),qVar"state"), Dest ("procID",F8,qVar"state")), LN 63,LN 32,F32)),LN 32), Dest ("instret_delta",F64, Var("v",CTy"UserCSR")))]))]))), (LW(768,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mstatus", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Call ("update_mstatus",CTy"mstatus", TP[Dest ("mstatus",CTy"mstatus", Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"), Dest("procID",F8,qVar"state"))), Call ("rec'mstatus",CTy"mstatus", Var("value",F64))])]))])), (LW(769,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mtvec", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Var("value",F64)]))])), (LW(770,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mtdeleg", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Call ("rec'mtdeleg",CTy"mtdeleg",Var("value",F64))]))])), (LW(772,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mie", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Call("rec'mie",CTy"mie",Var("value",F64))]))])), (LW(801,12), Let(qVar"s", Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mtimecmp", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"), Dest("procID",F8,qVar"state")), Var("value",F64)]))]), Let(Var("v",CTy"MachineCSR"), Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"), Dest("procID",F8,qVar"s")), Rupd ("c_MCSR", TP[qVar"s", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"s"), Dest("procID",F8,qVar"s"), Rupd ("mip", TP[Var("v",CTy"MachineCSR"), Rupd ("MTIP", TP[Dest ("mip",CTy"mip", Var("v",CTy"MachineCSR")),LF])]))])))), (LW(1793,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mtime_delta", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Bop(Sub,Var("value",F64), Dest("clock",F64,qVar"state"))]))])), (LW(1857,12), Let(Var("v",CTy"MachineCSR"), Apply (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state")), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mtime_delta", TP[Var("v",CTy"MachineCSR"), BFI(LN 63,LN 32, Bop(Lsl, Bop(Sub, EX(Var("value",F64),LN 31,LN 0, F32), EX(Dest("clock",F64,qVar"state"), LN 63,LN 32,F32)),LN 32), Dest ("mtime_delta",F64, Var("v",CTy"MachineCSR")))]))]))), (LW(832,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mscratch", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Var("value",F64)]))])), (LW(833,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mepc", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Bop(BAnd,Var("value",F64),Mop(SE F64,LW(4,3)))]))])), (LW(834,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mcause", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Call("rec'mcause",CTy"mcause",Var("value",F64))]))])), (LW(835,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mbadaddr", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Var("value",F64)]))])), (LW(836,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mip", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Call("rec'mip",CTy"mip",Var("value",F64))]))])), (LW(896,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mbase", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Var("value",F64)]))])), (LW(897,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mbound", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Var("value",F64)]))])), (LW(898,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mibase", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Var("value",F64)]))])), (LW(899,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mibound", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Var("value",F64)]))])), (LW(900,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mdbase", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Var("value",F64)]))])), (LW(901,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mdbound", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Var("value",F64)]))])), (LW(2817,12), Rupd ("c_HCSR", TP[qVar"state", Fupd (Dest("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("htime_delta", TP[Apply (Dest ("c_HCSR",ATy(F8,CTy"HypervisorCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Bop(Sub,Var("value",F64), Dest("clock",F64,qVar"state"))]))])), (LW(2945,12), Let(Var("v",CTy"HypervisorCSR"), Apply (Dest("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state")), Rupd ("c_HCSR", TP[qVar"state", Fupd (Dest ("c_HCSR",ATy(F8,CTy"HypervisorCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("htime_delta", TP[Var("v",CTy"HypervisorCSR"), BFI(LN 63,LN 32, Bop(Lsl, Bop(Sub, EX(Var("value",F64),LN 31,LN 0, F32), EX(Dest("clock",F64,qVar"state"), LN 63,LN 32,F32)),LN 32), Dest ("htime_delta",F64, Var("v",CTy"HypervisorCSR")))]))]))), (LW(1920,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mtohost", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Var("value",F64)]))])), (LW(1921,12), Rupd ("c_MCSR", TP[qVar"state", Fupd (Dest("c_MCSR",ATy(F8,CTy"MachineCSR"),qVar"state"), Dest("procID",F8,qVar"state"), Rupd ("mfromhost", TP[Apply (Dest ("c_MCSR",ATy(F8,CTy"MachineCSR"), qVar"state"),Dest("procID",F8,qVar"state")), Var("value",F64)]))])), (LW(1923,12), Apply (Call("sendIPI",ATy(qTy,qTy),Var("value",F64)),qVar"state")), (AVar(FTy 12), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("INTERNAL_ERROR",CTy"exception", CC[LS"unexpected CSR write to ", Mop(Cast sTy,Var("csr",FTy 12))])),qVar"state")))]))) ; val csrName_def = Def ("csrName",Var("csr",FTy 12), CS(Var("csr",FTy 12), [(LW(1,12),LS"fflags"),(LW(2,12),LS"frm"),(LW(3,12),LS"fcsr"), (LW(3072,12),LS"cycle"),(LW(3073,12),LS"time"), (LW(3074,12),LS"instret"),(LW(3200,12),LS"cycleh"), (LW(3201,12),LS"timeh"),(LW(3202,12),LS"instreth"), (LW(256,12),LS"sstatus"),(LW(257,12),LS"stvec"), (LW(260,12),LS"sie"),(LW(289,12),LS"stimecmp"), (LW(3329,12),LS"stime"),(LW(3457,12),LS"stimeh"), (LW(320,12),LS"sscratch"),(LW(321,12),LS"sepc"), (LW(3394,12),LS"scause"),(LW(3395,12),LS"sbadaddr"), (LW(324,12),LS"mip"),(LW(384,12),LS"sptbr"),(LW(385,12),LS"sasid"), (LW(2304,12),LS"cycle"),(LW(2305,12),LS"time"), (LW(2306,12),LS"instret"),(LW(2432,12),LS"cycleh"), (LW(2433,12),LS"timeh"),(LW(2434,12),LS"instreth"), (LW(512,12),LS"hstatus"),(LW(513,12),LS"htvec"), (LW(514,12),LS"htdeleg"),(LW(545,12),LS"htimecmp"), (LW(3585,12),LS"htime"),(LW(3713,12),LS"htimeh"), (LW(576,12),LS"hscratch"),(LW(577,12),LS"hepc"), (LW(578,12),LS"hcause"),(LW(579,12),LS"hbadaddr"), (LW(2561,12),LS"stime"),(LW(2689,12),LS"stimeh"), (LW(3840,12),LS"mcpuid"),(LW(3841,12),LS"mimpid"), (LW(3856,12),LS"mhartid"),(LW(768,12),LS"mstatus"), (LW(769,12),LS"mtvec"),(LW(770,12),LS"mtdeleg"), (LW(772,12),LS"mie"),(LW(801,12),LS"mtimecmp"), (LW(1793,12),LS"mtime"),(LW(1857,12),LS"mtimeh"), (LW(832,12),LS"mscratch"),(LW(833,12),LS"mepc"), (LW(834,12),LS"mcause"),(LW(835,12),LS"mbadaddr"), (LW(836,12),LS"mip"),(LW(896,12),LS"mbase"), (LW(897,12),LS"mbound"),(LW(898,12),LS"mibase"), (LW(899,12),LS"mibound"),(LW(900,12),LS"mdbase"), (LW(901,12),LS"mdbound"),(LW(2817,12),LS"htime"), (LW(2945,12),LS"htimeh"),(LW(1920,12),LS"mtohost"), (LW(1921,12),LS"mfromhost"),(LW(1923,12),LS"send_ipi"), (AVar(FTy 12),LS"UNKNOWN")])) ; val Delta_def = Def ("Delta",qVar"state", Apply (Dest("c_update",ATy(F8,CTy"StateDelta"),qVar"state"), Dest("procID",F8,qVar"state"))) ; val write'Delta_def = Def ("write'Delta",Var("value",CTy"StateDelta"), Close (qVar"state", Rupd ("c_update", TP[qVar"state", Fupd (Dest("c_update",ATy(F8,CTy"StateDelta"),qVar"state"), Dest("procID",F8,qVar"state"),Var("value",CTy"StateDelta"))]))) ; val hex32_def = Def ("hex32",Var("x",F32), Mop(PadLeft,TP[LSC #"0",LN 8,Mop(Cast sTy,Var("x",F32))])) ; val hex64_def = Def ("hex64",Var("x",F64), Mop(PadLeft,TP[LSC #"0",LN 16,Mop(Cast sTy,Var("x",F64))])) ; val log_w_csr_def = Def ("log_w_csr",TP[Var("csr",FTy 12),Var("data",F64)], CC[LS"CSR (",Call("csrName",sTy,Var("csr",FTy 12)),LS") <- 0x", Call("hex64",sTy,Var("data",F64))]) ; val reg_def = Def ("reg",Var("r",FTy 5), ITB([(EQ(Var("r",FTy 5),LW(0,5)),LS"$0"), (EQ(Var("r",FTy 5),LW(1,5)),LS"ra"), (EQ(Var("r",FTy 5),LW(2,5)),LS"sp"), (EQ(Var("r",FTy 5),LW(3,5)),LS"gp"), (EQ(Var("r",FTy 5),LW(4,5)),LS"tp"), (EQ(Var("r",FTy 5),LW(5,5)),LS"t0"), (EQ(Var("r",FTy 5),LW(6,5)),LS"t1"), (EQ(Var("r",FTy 5),LW(7,5)),LS"t2"), (EQ(Var("r",FTy 5),LW(8,5)),LS"fp"), (EQ(Var("r",FTy 5),LW(9,5)),LS"s1"), (EQ(Var("r",FTy 5),LW(10,5)),LS"a0"), (EQ(Var("r",FTy 5),LW(11,5)),LS"a1"), (EQ(Var("r",FTy 5),LW(12,5)),LS"a2"), (EQ(Var("r",FTy 5),LW(13,5)),LS"a3"), (EQ(Var("r",FTy 5),LW(14,5)),LS"a4"), (EQ(Var("r",FTy 5),LW(15,5)),LS"a5"), (EQ(Var("r",FTy 5),LW(16,5)),LS"a6"), (EQ(Var("r",FTy 5),LW(17,5)),LS"a7"), (EQ(Var("r",FTy 5),LW(18,5)),LS"s2"), (EQ(Var("r",FTy 5),LW(19,5)),LS"s3"), (EQ(Var("r",FTy 5),LW(20,5)),LS"s4"), (EQ(Var("r",FTy 5),LW(21,5)),LS"s5"), (EQ(Var("r",FTy 5),LW(22,5)),LS"s6"), (EQ(Var("r",FTy 5),LW(23,5)),LS"s7"), (EQ(Var("r",FTy 5),LW(24,5)),LS"s8"), (EQ(Var("r",FTy 5),LW(25,5)),LS"s9"), (EQ(Var("r",FTy 5),LW(26,5)),LS"s10"), (EQ(Var("r",FTy 5),LW(27,5)),LS"s11"), (EQ(Var("r",FTy 5),LW(28,5)),LS"t3"), (EQ(Var("r",FTy 5),LW(29,5)),LS"t4"), (EQ(Var("r",FTy 5),LW(30,5)),LS"t5")],LS"t6")) ; val fpreg_def = Def ("fpreg",Var("r",FTy 5), ITB([(EQ(Var("r",FTy 5),LW(0,5)),LS"fs0"), (EQ(Var("r",FTy 5),LW(1,5)),LS"fs1"), (EQ(Var("r",FTy 5),LW(2,5)),LS"fs2"), (EQ(Var("r",FTy 5),LW(3,5)),LS"fs3"), (EQ(Var("r",FTy 5),LW(4,5)),LS"fs4"), (EQ(Var("r",FTy 5),LW(5,5)),LS"fs5"), (EQ(Var("r",FTy 5),LW(6,5)),LS"fs6"), (EQ(Var("r",FTy 5),LW(7,5)),LS"fs7"), (EQ(Var("r",FTy 5),LW(8,5)),LS"fs8"), (EQ(Var("r",FTy 5),LW(9,5)),LS"fs9"), (EQ(Var("r",FTy 5),LW(10,5)),LS"fs10"), (EQ(Var("r",FTy 5),LW(11,5)),LS"fs11"), (EQ(Var("r",FTy 5),LW(12,5)),LS"fs12"), (EQ(Var("r",FTy 5),LW(13,5)),LS"fs13"), (EQ(Var("r",FTy 5),LW(14,5)),LS"fs14"), (EQ(Var("r",FTy 5),LW(15,5)),LS"fs15"), (EQ(Var("r",FTy 5),LW(16,5)),LS"fv0"), (EQ(Var("r",FTy 5),LW(17,5)),LS"fv1"), (EQ(Var("r",FTy 5),LW(18,5)),LS"fa0"), (EQ(Var("r",FTy 5),LW(19,5)),LS"fa1"), (EQ(Var("r",FTy 5),LW(20,5)),LS"fa2"), (EQ(Var("r",FTy 5),LW(21,5)),LS"fa3"), (EQ(Var("r",FTy 5),LW(22,5)),LS"fa4"), (EQ(Var("r",FTy 5),LW(23,5)),LS"fa5"), (EQ(Var("r",FTy 5),LW(24,5)),LS"fa6"), (EQ(Var("r",FTy 5),LW(25,5)),LS"fa7"), (EQ(Var("r",FTy 5),LW(26,5)),LS"ft0"), (EQ(Var("r",FTy 5),LW(27,5)),LS"ft1"), (EQ(Var("r",FTy 5),LW(28,5)),LS"ft2"), (EQ(Var("r",FTy 5),LW(29,5)),LS"ft3"), (EQ(Var("r",FTy 5),LW(30,5)),LS"ft4")],LS"ft5")) ; val log_w_gpr_def = Def ("log_w_gpr",TP[Var("r",FTy 5),Var("data",F64)], CC[LS"Reg ",Call("reg",sTy,Var("r",FTy 5)),LS" (", Mop(Cast sTy,Mop(Cast nTy,Var("r",FTy 5))),LS") <- 0x", Call("hex64",sTy,Var("data",F64))]) ; val log_w_fprs_def = Def ("log_w_fprs",TP[Var("r",FTy 5),Var("data",F32)], CC[LS"FPR ",Call("reg",sTy,Var("r",FTy 5)),LS" (", Mop(Cast sTy,Mop(Cast nTy,Var("r",FTy 5))),LS") <- 0x", Call("hex32",sTy,Var("data",F32))]) ; val log_w_fprd_def = Def ("log_w_fprd",TP[Var("r",FTy 5),Var("data",F64)], CC[LS"FPR ",Call("reg",sTy,Var("r",FTy 5)),LS" (", Mop(Cast sTy,Mop(Cast nTy,Var("r",FTy 5))),LS") <- 0x", Call("hex64",sTy,Var("data",F64))]) ; val log_w_mem_mask_def = Def ("log_w_mem_mask", TP[Var("pAddrIdx",FTy 61),Var("vAddr",F64),Var("mask",F64), Var("data",F64),Var("old",F64),Var("new",F64)], CC[LS"MEM[0x",Call("hex64",sTy,Mop(Cast F64,Var("pAddrIdx",FTy 61))), LS"/",Call("hex64",sTy,Var("vAddr",F64)),LS"] <- (data: 0x", Call("hex64",sTy,Var("data",F64)),LS", mask: 0x", Call("hex64",sTy,Var("mask",F64)),LS", old: 0x", Call("hex64",sTy,Var("old",F64)),LS", new: 0x", Call("hex64",sTy,Var("new",F64)),LS")"]) ; val log_w_mem_mask_misaligned_def = Def ("log_w_mem_mask_misaligned", TP[Var("pAddrIdx",FTy 61),Var("vAddr",F64),Var("mask",F64), Var("data",F64),nVar"align",Var("old",F64),Var("new",F64)], CC[LS"MEM[0x",Call("hex64",sTy,Mop(Cast F64,Var("pAddrIdx",FTy 61))), LS"/",Call("hex64",sTy,Var("vAddr",F64)),LS"/ misaligned@", Mop(Cast sTy,nVar"align"),LS"] <- (data: 0x", Call("hex64",sTy,Var("data",F64)),LS", mask: 0x", Call("hex64",sTy,Var("mask",F64)),LS", old: 0x", Call("hex64",sTy,Var("old",F64)),LS", new: 0x", Call("hex64",sTy,Var("new",F64)),LS")"]) ; val log_w_mem_def = Def ("log_w_mem", TP[Var("pAddrIdx",FTy 61),Var("vAddr",F64),Var("data",F64)], CC[LS"MEM[0x",Call("hex64",sTy,Mop(Cast F64,Var("pAddrIdx",FTy 61))), LS"/",Call("hex64",sTy,Var("vAddr",F64)),LS"] <- (data: 0x", Call("hex64",sTy,Var("data",F64)),LS")"]) ; val log_r_mem_def = Def ("log_r_mem", TP[Var("pAddrIdx",FTy 61),Var("vAddr",F64),Var("data",F64)], CC[LS"data <- MEM[0x", Mop(PadLeft,TP[LSC #"0",LN 10,Mop(Cast sTy,Var("pAddrIdx",FTy 61))]), LS"/",Call("hex64",sTy,Var("vAddr",F64)),LS"]: 0x", Call("hex64",sTy,Var("data",F64))]) ; val log_exc_def = Def ("log_exc",Var("e",CTy"ExceptionType"), CC[LS" Exception ",Call("excName",sTy,Var("e",CTy"ExceptionType")), LS" raised!"]) ; val log_tohost_def = Def ("log_tohost",Var("tohost",F64), CC[LS"-> host: ", Mop(Cast sTy,Mop(Cast cTy,EX(Var("tohost",F64),LN 7,LN 0,F8)))]) ; val clear_logs_def = Def ("clear_logs",AVar uTy, Close(qVar"state",Rupd("log",TP[qVar"state",LNL(PTy(nTy,sTy))]))) ; val setTrap_def = Def ("setTrap",TP[Var("e",CTy"ExceptionType"),Var("badaddr",OTy F64)], Close (qVar"state", Apply (Call ("write'NextFetch",ATy(qTy,qTy), Mop(Some, Call ("Trap",CTy"TransferControl", Rupd ("badaddr", TP[Rupd ("trap", TP[LX(CTy"SynchronousTrap"), Var("e",CTy"ExceptionType")]), Var("badaddr",OTy F64)])))),qVar"state"))) ; val signalException_def = Def ("signalException",Var("e",CTy"ExceptionType"), Close (qVar"state", Apply (Call ("setTrap",ATy(qTy,qTy),TP[Var("e",CTy"ExceptionType"),LO F64]), qVar"state"))) ; val signalAddressException_def = Def ("signalAddressException", TP[Var("e",CTy"ExceptionType"),Var("vAddr",F64)], Close (qVar"state", Apply (Call ("setTrap",ATy(qTy,qTy), TP[Var("e",CTy"ExceptionType"),Mop(Some,Var("vAddr",F64))]), qVar"state"))) ; val signalEnvCall_def = Def ("signalEnvCall",AVar uTy, Close (qVar"state", Apply (Call ("signalException",ATy(qTy,qTy), CS(Call ("privilege",CTy"Privilege", Dest ("MPRV",FTy 2, Dest ("mstatus",CTy"mstatus", Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"state")))), [(LC("User",CTy"Privilege"), LC("UMode_Env_Call",CTy"ExceptionType")), (LC("Supervisor",CTy"Privilege"), LC("SMode_Env_Call",CTy"ExceptionType")), (LC("Hypervisor",CTy"Privilege"), LC("HMode_Env_Call",CTy"ExceptionType")), (LC("Machine",CTy"Privilege"), LC("MMode_Env_Call",CTy"ExceptionType"))])),qVar"state"))) ; val checkDelegation_def = tDef ("checkDelegation", TP[Var("curPriv",CTy"Privilege"),bVar"intr",Var("ec",F4)], Close (qVar"state", Let(nVar"e",Mop(Cast nTy,Var("ec",F4)), CS(Var("curPriv",CTy"Privilege"), [(LC("User",CTy"Privilege"), Apply (Call ("raise'exception",ATy(qTy,PTy(CTy"Privilege",qTy)), Call ("INTERNAL_ERROR",CTy"exception", LS"No user-level delegation!")),qVar"state")), (LC("Supervisor",CTy"Privilege"), Apply (Call ("raise'exception",ATy(qTy,PTy(CTy"Privilege",qTy)), Call ("INTERNAL_ERROR",CTy"exception", LS"No supervisor-level delegation!")),qVar"state")), (LC("Hypervisor",CTy"Privilege"), TP[ITE(Bop(Or, Bop(And,bVar"intr", Bop(Bit, Dest ("Intr_deleg",FTy 48, Dest ("htdeleg",CTy"mtdeleg", Apply (Const ("HCSR", ATy(qTy,CTy"HypervisorCSR")), qVar"state"))),nVar"e")), Bop(And,Mop(Not,bVar"intr"), Bop(Bit, Dest ("Exc_deleg",F16, Dest ("htdeleg",CTy"mtdeleg", Apply (Const ("HCSR", ATy(qTy,CTy"HypervisorCSR")), qVar"state"))),nVar"e"))), LC("Supervisor",CTy"Privilege"), Var("curPriv",CTy"Privilege")),qVar"state"]), (LC("Machine",CTy"Privilege"), ITE(Bop(Or, Bop(And,bVar"intr", Bop(Bit, Dest ("Intr_deleg",FTy 48, Dest ("mtdeleg",CTy"mtdeleg", Apply (Const ("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"state"))),nVar"e")), Bop(And,Mop(Not,bVar"intr"), Bop(Bit, Dest ("Exc_deleg",F16, Dest ("mtdeleg",CTy"mtdeleg", Apply (Const ("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"state"))),nVar"e"))), Apply (Call ("checkDelegation", ATy(qTy,PTy(CTy"Privilege",qTy)), TP[LC("Hypervisor",CTy"Privilege"),bVar"intr", Var("ec",F4)]),qVar"state"), TP[Var("curPriv",CTy"Privilege"),qVar"state"]))]))), Close (Var("x",PTy(PTy(CTy"Privilege",PTy(bTy,F4)),qTy)), CS(Var("x",PTy(PTy(CTy"Privilege",PTy(bTy,F4)),qTy)), [(TP[TP[Var("curPriv",CTy"Privilege"),bVar"intr",Var("ec",F4)], AVar qTy],Mop(Cast nTy,Var("curPriv",CTy"Privilege")))])), SIMP_TAC std_ss [DB.theorem "Privilege2num_thm"] ) ; val checkPrivInterrupt_def = Def ("checkPrivInterrupt",Var("curPriv",CTy"Privilege"), Close (qVar"state", Let(Var("v",CTy"mip"), Dest ("mip",CTy"mip", Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"state")), Let(Var("v0",CTy"mie"), Dest ("mie",CTy"mie", Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"state")), CS(Var("curPriv",CTy"Privilege"), [(LC("User",CTy"Privilege"), Apply (Call ("raise'exception", ATy(qTy, PTy(OTy(PTy(CTy"Interrupt",CTy"Privilege")), qTy)), Call ("INTERNAL_ERROR",CTy"exception", LS"No user-level interrupts!")),qVar"state")), (LC("Supervisor",CTy"Privilege"), TP[ITB([(Bop(And,Dest("STIP",bTy,Var("v",CTy"mip")), Dest("STIE",bTy,Var("v0",CTy"mie"))), Mop(Some, TP[LC("Timer",CTy"Interrupt"), Var("curPriv",CTy"Privilege")])), (Bop(And,Dest("SSIP",bTy,Var("v",CTy"mip")), Dest("SSIE",bTy,Var("v0",CTy"mie"))), Mop(Some, TP[LC("Software",CTy"Interrupt"), Var("curPriv",CTy"Privilege")]))], LO(PTy(CTy"Interrupt",CTy"Privilege"))), qVar"state"]), (LC("Hypervisor",CTy"Privilege"), TP[ITB([(Bop(And,Dest("HTIP",bTy,Var("v",CTy"mip")), Dest("HTIE",bTy,Var("v0",CTy"mie"))), Mop(Some, TP[LC("Timer",CTy"Interrupt"), Var("curPriv",CTy"Privilege")])), (Bop(And,Dest("HSIP",bTy,Var("v",CTy"mip")), Dest("HSIE",bTy,Var("v0",CTy"mie"))), Mop(Some, TP[LC("Software",CTy"Interrupt"), Var("curPriv",CTy"Privilege")]))], LO(PTy(CTy"Interrupt",CTy"Privilege"))), qVar"state"]), (LC("Machine",CTy"Privilege"), TP[ITB([(Bop(And,Dest("MTIP",bTy,Var("v",CTy"mip")), Dest("MTIE",bTy,Var("v0",CTy"mie"))), Mop(Some, TP[LC("Timer",CTy"Interrupt"), Var("curPriv",CTy"Privilege")])), (Bop(And,Dest("MSIP",bTy,Var("v",CTy"mip")), Dest("MSIE",bTy,Var("v0",CTy"mie"))), Mop(Some, TP[LC("Software",CTy"Interrupt"), Var("curPriv",CTy"Privilege")]))], LO(PTy(CTy"Interrupt",CTy"Privilege"))), qVar"state"])]))))) ; val checkInterrupts_def = Def ("checkInterrupts",AVar uTy, Close (qVar"state", Let(bVar"v", Dest ("MIE",bTy, Dest ("mstatus",CTy"mstatus", Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"state"))), Let(Var("v0",CTy"Privilege"), Apply (Call("curPrivilege",ATy(qTy,CTy"Privilege"),LU), qVar"state"), CS(Var("v0",CTy"Privilege"), [(LC("User",CTy"Privilege"), Let(TP[Var("v1",OTy(PTy(CTy"Interrupt",CTy"Privilege"))), qVar"s"], Apply (Call ("checkPrivInterrupt", ATy(qTy, PTy(OTy(PTy(CTy"Interrupt",CTy"Privilege")), qTy)),LC("Machine",CTy"Privilege")), qVar"state"), CS(Var("v1",OTy(PTy(CTy"Interrupt",CTy"Privilege"))), [(LO(PTy(CTy"Interrupt",CTy"Privilege")), Let(TP[Var("v1", OTy(PTy(CTy"Interrupt", CTy"Privilege"))),qVar"s"], Apply (Call ("checkPrivInterrupt", ATy(qTy, PTy(OTy(PTy(CTy"Interrupt", CTy"Privilege")),qTy)), LC("Hypervisor",CTy"Privilege")), qVar"s"), CS(Var("v1", OTy(PTy(CTy"Interrupt", CTy"Privilege"))), [(LO(PTy(CTy"Interrupt",CTy"Privilege")), ITE(Bop(Or, EQ(Var("v0",CTy"Privilege"), LC("User",CTy"Privilege")), bVar"v"), Apply (Call ("checkPrivInterrupt", ATy(qTy, PTy(OTy(PTy(CTy"Interrupt", CTy"Privilege")), qTy)), LC("Supervisor", CTy"Privilege")),qVar"s"), TP[LO(PTy(CTy"Interrupt", CTy"Privilege")), qVar"s"])), (Var("i", OTy(PTy(CTy"Interrupt", CTy"Privilege"))), TP[Var("i", OTy(PTy(CTy"Interrupt", CTy"Privilege"))), qVar"s"])]))), (Var("i", OTy(PTy(CTy"Interrupt",CTy"Privilege"))), TP[Var("i", OTy(PTy(CTy"Interrupt",CTy"Privilege"))), qVar"s"])]))), (LC("Supervisor",CTy"Privilege"), Let(TP[Var("v1",OTy(PTy(CTy"Interrupt",CTy"Privilege"))), qVar"s"], Apply (Call ("checkPrivInterrupt", ATy(qTy, PTy(OTy(PTy(CTy"Interrupt",CTy"Privilege")), qTy)),LC("Machine",CTy"Privilege")), qVar"state"), CS(Var("v1",OTy(PTy(CTy"Interrupt",CTy"Privilege"))), [(LO(PTy(CTy"Interrupt",CTy"Privilege")), Let(TP[Var("v1", OTy(PTy(CTy"Interrupt", CTy"Privilege"))),qVar"s"], Apply (Call ("checkPrivInterrupt", ATy(qTy, PTy(OTy(PTy(CTy"Interrupt", CTy"Privilege")),qTy)), LC("Hypervisor",CTy"Privilege")), qVar"s"), CS(Var("v1", OTy(PTy(CTy"Interrupt", CTy"Privilege"))), [(LO(PTy(CTy"Interrupt",CTy"Privilege")), ITE(Bop(Or, EQ(Var("v0",CTy"Privilege"), LC("User",CTy"Privilege")), bVar"v"), Apply (Call ("checkPrivInterrupt", ATy(qTy, PTy(OTy(PTy(CTy"Interrupt", CTy"Privilege")), qTy)), LC("Supervisor", CTy"Privilege")),qVar"s"), TP[LO(PTy(CTy"Interrupt", CTy"Privilege")), qVar"s"])), (Var("i", OTy(PTy(CTy"Interrupt", CTy"Privilege"))), TP[Var("i", OTy(PTy(CTy"Interrupt", CTy"Privilege"))), qVar"s"])]))), (Var("i", OTy(PTy(CTy"Interrupt",CTy"Privilege"))), TP[Var("i", OTy(PTy(CTy"Interrupt",CTy"Privilege"))), qVar"s"])]))), (LC("Hypervisor",CTy"Privilege"), Let(TP[Var("v0",OTy(PTy(CTy"Interrupt",CTy"Privilege"))), qVar"s"], Apply (Call ("checkPrivInterrupt", ATy(qTy, PTy(OTy(PTy(CTy"Interrupt",CTy"Privilege")), qTy)),LC("Machine",CTy"Privilege")), qVar"state"), CS(Var("v0",OTy(PTy(CTy"Interrupt",CTy"Privilege"))), [(LO(PTy(CTy"Interrupt",CTy"Privilege")), ITE(bVar"v", Apply (Call ("checkPrivInterrupt", ATy(qTy, PTy(OTy(PTy(CTy"Interrupt", CTy"Privilege")),qTy)), LC("Hypervisor",CTy"Privilege")), qVar"s"), TP[LO(PTy(CTy"Interrupt",CTy"Privilege")), qVar"s"])), (Var("i", OTy(PTy(CTy"Interrupt",CTy"Privilege"))), TP[Var("i", OTy(PTy(CTy"Interrupt",CTy"Privilege"))), qVar"s"])]))), (LC("Machine",CTy"Privilege"), ITE(bVar"v", Apply (Call ("checkPrivInterrupt", ATy(qTy, PTy(OTy(PTy(CTy"Interrupt",CTy"Privilege")), qTy)),LC("Machine",CTy"Privilege")), qVar"state"), TP[LO(PTy(CTy"Interrupt",CTy"Privilege")), qVar"state"]))]))))) ; val takeTrap_def = Def ("takeTrap", TP[bVar"intr",Var("ec",F4),Var("epc",F64),Var("badaddr",OTy F64), Var("toPriv",CTy"Privilege")], Close (qVar"state", Let(TP[Var("v0",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call("write'ReserveLoad",ATy(qTy,qTy),LO F64),qVar"state"), TP[Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s0"), qVar"s0"]), Let(TP[Var("v0",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mstatus", TP[Var("v0",CTy"MachineCSR"), Rupd ("MMPRV", TP[Dest ("mstatus",CTy"mstatus", Var("v0",CTy"MachineCSR")),LF])])), qVar"s"), TP[Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s0"), qVar"s0"]), Let(qVar"s", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mstatus", TP[Var("v0",CTy"MachineCSR"), Call ("pushPrivilegeStack",CTy"mstatus", TP[Dest ("mstatus",CTy"mstatus", Apply (Const ("MCSR", ATy(qTy,CTy"MachineCSR")), qVar"s")), Var("toPriv",CTy"Privilege")])])), qVar"s"), CS(Var("toPriv",CTy"Privilege"), [(LC("User",CTy"Privilege"), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("INTERNAL_ERROR",CTy"exception", LS"Illegal trap to U-mode")),qVar"s"))), (LC("Supervisor",CTy"Privilege"), Let(Var("v",CTy"SupervisorCSR"), Apply (Const("SCSR",ATy(qTy,CTy"SupervisorCSR")), qVar"s"), Let(TP[Var("v",CTy"SupervisorCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'SCSR",ATy(qTy,qTy), Rupd ("scause", TP[Var("v",CTy"SupervisorCSR"), Rupd ("Int", TP[Dest ("scause", CTy"mcause", Var("v", CTy"SupervisorCSR")), bVar"intr"])])), qVar"s"), TP[Apply (Const ("SCSR", ATy(qTy,CTy"SupervisorCSR")), qVar"s0"),qVar"s0"]), Let(TP[Var("v",CTy"SupervisorCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'SCSR",ATy(qTy,qTy), Rupd ("scause", TP[Var("v", CTy"SupervisorCSR"), Rupd ("EC", TP[Dest ("scause", CTy"mcause", Var("v", CTy"SupervisorCSR")), Var("ec",F4)])])), qVar"s"), TP[Apply (Const ("SCSR", ATy(qTy,CTy"SupervisorCSR")), qVar"s0"),qVar"s0"]), Let(qVar"s", Apply (Call ("write'SCSR",ATy(qTy,qTy), Rupd ("sepc", TP[Var("v", CTy"SupervisorCSR"), Var("epc",F64)])), qVar"s"), Let(TP[Var("v",CTy"SupervisorCSR"), qVar"s"], Let(qVar"s0", ITE(Mop(IsSome, Var("badaddr", OTy F64)), Apply (Call ("write'SCSR", ATy(qTy,qTy), Rupd ("sbadaddr", TP[Apply (Const ("SCSR", ATy(qTy, CTy"SupervisorCSR")), qVar"s"), Mop(ValOf, Var("badaddr", OTy F64))])), qVar"s"),qVar"s"), TP[Apply (Const ("SCSR", ATy(qTy, CTy"SupervisorCSR")), qVar"s0"),qVar"s0"]), Apply (Call ("write'PC",ATy(qTy,qTy), Dest ("stvec",F64, Var("v", CTy"SupervisorCSR"))), qVar"s"))))))), (LC("Hypervisor",CTy"Privilege"), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("INTERNAL_ERROR",CTy"exception", LS"Unsupported trap to H-mode")), qVar"s"))), (LC("Machine",CTy"Privilege"), Let(Var("v0",CTy"MachineCSR"), Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"s"), Let(TP[Var("v0",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mcause", TP[Var("v0",CTy"MachineCSR"), Rupd ("Int", TP[Dest ("mcause", CTy"mcause", Var("v0", CTy"MachineCSR")), bVar"intr"])])), qVar"s"), TP[Apply (Const ("MCSR", ATy(qTy,CTy"MachineCSR")), qVar"s0"),qVar"s0"]), Let(TP[Var("v0",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mcause", TP[Var("v0", CTy"MachineCSR"), Rupd ("EC", TP[Dest ("mcause", CTy"mcause", Var("v0", CTy"MachineCSR")), Var("ec",F4)])])), qVar"s"), TP[Apply (Const ("MCSR", ATy(qTy,CTy"MachineCSR")), qVar"s0"),qVar"s0"]), Let(qVar"s", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mepc", TP[Var("v0", CTy"MachineCSR"), Var("epc",F64)])), qVar"s"), Let(TP[Var("v0",CTy"MachineCSR"), qVar"s"], Let(qVar"s0", ITE(Mop(IsSome, Var("badaddr", OTy F64)), Apply (Call ("write'MCSR", ATy(qTy,qTy), Rupd ("mbadaddr", TP[Apply (Const ("MCSR", ATy(qTy, CTy"MachineCSR")), qVar"s"), Mop(ValOf, Var("badaddr", OTy F64))])), qVar"s"),qVar"s"), TP[Apply (Const ("MCSR", ATy(qTy, CTy"MachineCSR")), qVar"s0"),qVar"s0"]), Apply (Call ("write'PC",ATy(qTy,qTy), Bop(Add, Dest ("mtvec",F64, Var("v0", CTy"MachineCSR")), Bop(Mul, Mop(Cast F64, Call ("privLevel", FTy 2, Apply (Call ("curPrivilege", ATy(qTy, CTy"Privilege"), LU), qVar"state"))), LW(64,64)))), qVar"s")))))))])))))) ; val CSR_def = Def ("CSR",Var("n",FTy 12), Close (qVar"state", Apply (Call("CSRMap",ATy(qTy,PTy(F64,qTy)),Var("n",FTy 12)),qVar"state"))) ; val write'CSR_def = Def ("write'CSR",TP[Var("value",F64),Var("n",FTy 12)], Close (qVar"state", Apply (Call ("write'CSRMap",ATy(qTy,qTy), TP[Var("value",F64),Var("n",FTy 12)]),qVar"state"))) ; val writeCSR_def = Def ("writeCSR",TP[Var("csr",FTy 12),Var("val",F64)], Close (qVar"state", Let(TP[Var("v",CTy"StateDelta"),qVar"s"], Let(qVar"s", Apply (Call ("write'CSR",ATy(qTy,qTy), TP[Var("val",F64),Var("csr",FTy 12)]),qVar"state"), TP[Apply(Const("Delta",ATy(qTy,CTy"StateDelta")),qVar"s"), qVar"s"]), Let(TP[Var("v",CTy"StateDelta"),qVar"s"], Let(qVar"s0", Apply (Call ("write'Delta",ATy(qTy,qTy), Rupd ("addr", TP[Var("v",CTy"StateDelta"), Mop(Some,Mop(Cast F64,Var("csr",FTy 12)))])), qVar"s"), TP[Apply (Const("Delta",ATy(qTy,CTy"StateDelta")),qVar"s0"), qVar"s0"]), Let(TP[Var("v0",F64),qVar"s"], Apply (Call("CSR",ATy(qTy,PTy(F64,qTy)),Var("csr",FTy 12)), qVar"s"), Apply (Call ("write'Delta",ATy(qTy,qTy), Rupd ("data2", TP[Var("v",CTy"StateDelta"), Mop(Some,Var("v0",F64))])),qVar"s")))))) ; val GPR_def = Def ("GPR",Var("n",FTy 5), Close (qVar"state", ITE(EQ(Var("n",FTy 5),LW(0,5)),LW(0,64), Apply(Call("gpr",ATy(qTy,F64),Var("n",FTy 5)),qVar"state")))) ; val write'GPR_def = Def ("write'GPR",TP[Var("value",F64),Var("n",FTy 5)], Close (qVar"state", ITE(Mop(Not,EQ(Var("n",FTy 5),LW(0,5))), Apply (Call ("write'gpr",ATy(qTy,qTy), TP[Var("value",F64),Var("n",FTy 5)]),qVar"state"), qVar"state"))) ; val FPRS_def = Def ("FPRS",Var("n",FTy 5), Close (qVar"state", EX(Apply(Call("fpr",ATy(qTy,F64),Var("n",FTy 5)),qVar"state"),LN 31, LN 0,F32))) ; val write'FPRS_def = Def ("write'FPRS",TP[Var("value",F32),Var("n",FTy 5)], Close (qVar"state", Apply (Call ("write'fpr",ATy(qTy,qTy), TP[BFI(LN 31,LN 0,Var("value",F32), Apply (Call("fpr",ATy(qTy,F64),Var("n",FTy 5)),qVar"state")), Var("n",FTy 5)]),qVar"state"))) ; val FPRD_def = Def ("FPRD",Var("n",FTy 5), Close (qVar"state", Apply(Call("fpr",ATy(qTy,F64),Var("n",FTy 5)),qVar"state"))) ; val write'FPRD_def = Def ("write'FPRD",TP[Var("value",F64),Var("n",FTy 5)], Close (qVar"state", Apply (Call ("write'fpr",ATy(qTy,qTy),TP[Var("value",F64),Var("n",FTy 5)]), qVar"state"))) ; val writeFPRS_def = Def ("writeFPRS",TP[Var("rd",FTy 5),Var("val",F32)], Close (qVar"state", Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s", Apply (Call ("write'FPRS",ATy(qTy,qTy), TP[Var("val",F32),Var("rd",FTy 5)]),qVar"state"), TP[Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s"), qVar"s"]), Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mstatus", TP[Var("v",CTy"MachineCSR"), Rupd ("MFS", TP[Dest ("mstatus",CTy"mstatus", Var("v",CTy"MachineCSR")), Call ("ext_status",FTy 2, LC("Dirty",CTy"ExtStatus"))])])), qVar"s"), TP[Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s0"), qVar"s0"]), Let(TP[Var("v",CTy"StateDelta"),qVar"s"], Let(qVar"s0", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mstatus", TP[Var("v",CTy"MachineCSR"), Rupd ("MSD", TP[Dest ("mstatus",CTy"mstatus", Var("v",CTy"MachineCSR")),LT])])), qVar"s"), TP[Apply (Const("Delta",ATy(qTy,CTy"StateDelta")), qVar"s0"),qVar"s0"]), Apply (Call ("write'Delta",ATy(qTy,qTy), Rupd ("data1", TP[Var("v",CTy"StateDelta"), Mop(Some,Mop(Cast F64,Var("val",F32)))])), qVar"s")))))) ; val writeFPRD_def = Def ("writeFPRD",TP[Var("rd",FTy 5),Var("val",F64)], Close (qVar"state", Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s", Apply (Call ("write'FPRD",ATy(qTy,qTy), TP[Var("val",F64),Var("rd",FTy 5)]),qVar"state"), TP[Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s"), qVar"s"]), Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mstatus", TP[Var("v",CTy"MachineCSR"), Rupd ("MFS", TP[Dest ("mstatus",CTy"mstatus", Var("v",CTy"MachineCSR")), Call ("ext_status",FTy 2, LC("Dirty",CTy"ExtStatus"))])])), qVar"s"), TP[Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s0"), qVar"s0"]), Let(TP[Var("v",CTy"StateDelta"),qVar"s"], Let(qVar"s0", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mstatus", TP[Var("v",CTy"MachineCSR"), Rupd ("MSD", TP[Dest ("mstatus",CTy"mstatus", Var("v",CTy"MachineCSR")),LT])])), qVar"s"), TP[Apply (Const("Delta",ATy(qTy,CTy"StateDelta")), qVar"s0"),qVar"s0"]), Apply (Call ("write'Delta",ATy(qTy,qTy), Rupd ("data1", TP[Var("v",CTy"StateDelta"), Mop(Some,Var("val",F64))])),qVar"s")))))) ; val MEM_def = Def ("MEM",Var("a",FTy 61), Close (qVar"state", Let(Var("b",F64),Bop(Lsl,Mop(Cast F64,Var("a",FTy 61)),LN 3), CC[Apply (Dest("MEM8",ATy(F64,F8),qVar"state"), Bop(Add,Var("b",F64),LW(7,64))), Apply (Dest("MEM8",ATy(F64,F8),qVar"state"), Bop(Add,Var("b",F64),LW(6,64))), Apply (Dest("MEM8",ATy(F64,F8),qVar"state"), Bop(Add,Var("b",F64),LW(5,64))), Apply (Dest("MEM8",ATy(F64,F8),qVar"state"), Bop(Add,Var("b",F64),LW(4,64))), Apply (Dest("MEM8",ATy(F64,F8),qVar"state"), Bop(Add,Var("b",F64),LW(3,64))), Apply (Dest("MEM8",ATy(F64,F8),qVar"state"), Bop(Add,Var("b",F64),LW(2,64))), Apply (Dest("MEM8",ATy(F64,F8),qVar"state"), Bop(Add,Var("b",F64),LW(1,64))), Apply(Dest("MEM8",ATy(F64,F8),qVar"state"),Var("b",F64))]))) ; val write'MEM_def = Def ("write'MEM",TP[Var("val",F64),Var("a",FTy 61)], Close (qVar"state", Let(Var("b",F64),Bop(Lsl,Mop(Cast F64,Var("a",FTy 61)),LN 3), Let(qVar"s", Rupd ("MEM8", TP[qVar"state", Fupd (Dest("MEM8",ATy(F64,F8),qVar"state"), Bop(Add,Var("b",F64),LW(7,64)), EX(Var("val",F64),LN 63,LN 56,F8))]), Let(qVar"s", Rupd ("MEM8", TP[qVar"s", Fupd (Dest("MEM8",ATy(F64,F8),qVar"s"), Bop(Add,Var("b",F64),LW(6,64)), EX(Var("val",F64),LN 55,LN 48,F8))]), Let(qVar"s", Rupd ("MEM8", TP[qVar"s", Fupd (Dest("MEM8",ATy(F64,F8),qVar"s"), Bop(Add,Var("b",F64),LW(5,64)), EX(Var("val",F64),LN 47,LN 40,F8))]), Let(qVar"s", Rupd ("MEM8", TP[qVar"s", Fupd (Dest("MEM8",ATy(F64,F8),qVar"s"), Bop(Add,Var("b",F64),LW(4,64)), EX(Var("val",F64),LN 39,LN 32,F8))]), Let(qVar"s", Rupd ("MEM8", TP[qVar"s", Fupd (Dest("MEM8",ATy(F64,F8),qVar"s"), Bop(Add,Var("b",F64),LW(3,64)), EX(Var("val",F64),LN 31,LN 24,F8))]), Let(qVar"s", Rupd ("MEM8", TP[qVar"s", Fupd (Dest ("MEM8",ATy(F64,F8),qVar"s"), Bop(Add,Var("b",F64),LW(2,64)), EX(Var("val",F64),LN 23,LN 16, F8))]), Let(qVar"s", Rupd ("MEM8", TP[qVar"s", Fupd (Dest ("MEM8",ATy(F64,F8), qVar"s"), Bop(Add,Var("b",F64), LW(1,64)), EX(Var("val",F64),LN 15, LN 8,F8))]), Rupd ("MEM8", TP[qVar"s", Fupd (Dest ("MEM8",ATy(F64,F8), qVar"s"),Var("b",F64), EX(Var("val",F64),LN 7, LN 0,F8))]))))))))))) ; val rawReadData_def = Def ("rawReadData",Var("pAddr",F64), Close (qVar"state", Let(Var("pAddrIdx",FTy 61),EX(Var("pAddr",F64),LN 63,LN 3,FTy 61), Let(nVar"align", Mop(Cast nTy,EX(Var("pAddr",F64),LN 2,LN 0,FTy 3)), ITE(EQ(nVar"align",LN 0), Apply (Call("MEM",ATy(qTy,F64),Var("pAddrIdx",FTy 61)), qVar"state"), EX(Bop(Asr, CC[Apply (Call ("MEM",ATy(qTy,F64), Bop(Add,Var("pAddrIdx",FTy 61),LW(1,61))), qVar"state"), Apply (Call ("MEM",ATy(qTy,F64), Var("pAddrIdx",FTy 61)),qVar"state")], Bop(Mul,nVar"align",LN 8)),LN 63,LN 0,F64)))))) ; val rawWriteData_def = Def ("rawWriteData",TP[Var("pAddr",F64),Var("data",F64),nVar"nbytes"], Close (qVar"state", Let(Var("mask",F64), Bop(Sub, Bop(Lsl,Mop(Cast F64,LW(1,1)),Bop(Mul,nVar"nbytes",LN 8)), LW(1,64)), Let(Var("pAddrIdx",FTy 61), EX(Var("pAddr",F64),LN 63,LN 3,FTy 61), Let(nVar"align", Mop(Cast nTy,EX(Var("pAddr",F64),LN 2,LN 0,FTy 3)), Let(Var("v",F64), Apply (Call("MEM",ATy(qTy,F64),Var("pAddrIdx",FTy 61)), qVar"state"), ITB([(EQ(nVar"align",LN 0), Apply (Call ("write'MEM",ATy(qTy,qTy), TP[Bop(BOr, Bop(BAnd,Var("v",F64), Mop(BNot,Var("mask",F64))), Bop(BAnd,Var("data",F64), Var("mask",F64))), Var("pAddrIdx",FTy 61)]),qVar"state")), (Bop(Le,Bop(Add,nVar"align",nVar"nbytes"), Bop(Div,Mop(Size,Var("mask",F64)),LN 8)), Apply (Call ("write'MEM",ATy(qTy,qTy), TP[Bop(BOr, Bop(BAnd,Var("v",F64), Mop(BNot, Bop(Lsl,Var("mask",F64), Bop(Mul,nVar"align", LN 8)))), Bop(Lsl, Bop(BAnd,Var("data",F64), Var("mask",F64)), Bop(Mul,nVar"align",LN 8))), Var("pAddrIdx",FTy 61)]),qVar"state"))], Let(Var("dw_mask",FTy 128), Bop(Lsl,Mop(Cast(FTy 128),Var("mask",F64)), Bop(Mul,nVar"align",LN 8)), Let(Var("dw_new",FTy 128), Bop(BOr, Bop(BAnd, CC[Apply (Call ("MEM",ATy(qTy,F64), Bop(Add, Var("pAddrIdx", FTy 61), LW(1,61))), qVar"state"),Var("v",F64)], Mop(BNot,Var("dw_mask",FTy 128))), Bop(BAnd, Bop(Lsl, Mop(Cast(FTy 128), Var("data",F64)), Bop(Mul,nVar"align",LN 8)), Var("dw_mask",FTy 128))), Apply (Call ("write'MEM",ATy(qTy,qTy), TP[EX(Var("dw_new",FTy 128), Bop(Sub, Mop(Size,Var("data",F64)), LN 1),LN 0,F64), Var("pAddrIdx",FTy 61)]), Apply (Call ("write'MEM",ATy(qTy,qTy), TP[EX(Var("dw_new",FTy 128), Bop(Sub, Bop(Mul,LN 2, Mop(Size, Var("data", F64))), LN 1), Mop(Size,Var("data",F64)), F64), Bop(Add, Var("pAddrIdx",FTy 61), LW(1,61))]),qVar"state"))))))))))) ; val rawReadInst_def = Def ("rawReadInst",Var("pAddr",F64), Close (qVar"state", Let(Var("v",F64), Apply (Call ("MEM",ATy(qTy,F64),EX(Var("pAddr",F64),LN 63,LN 3,FTy 61)), qVar"state"), ITE(Bop(Bit,Var("pAddr",F64),LN 2), EX(Var("v",F64),LN 63,LN 32,F32), EX(Var("v",F64),LN 31,LN 0,F32))))) ; val rawWriteMem_def = Def ("rawWriteMem",TP[Var("pAddr",F64),Var("data",F64)], Close (qVar"state", Apply (Call ("write'MEM",ATy(qTy,qTy), TP[Var("data",F64),EX(Var("pAddr",F64),LN 63,LN 3,FTy 61)]), qVar"state"))) ; val checkMemPermission_def = Def ("checkMemPermission", TP[Var("ft",CTy"fetchType"),Var("ac",CTy"accessType"), Var("priv",CTy"Privilege"),Var("perm",F4)], Close (qVar"state", CS(Var("perm",F4), [(LW(0,4), Apply (Call ("raise'exception",ATy(qTy,PTy(bTy,qTy)), Call ("INTERNAL_ERROR",CTy"exception", LS"Checking perm on Page-Table pointer!")),qVar"state")), (LW(1,4), Apply (Call ("raise'exception",ATy(qTy,PTy(bTy,qTy)), Call ("INTERNAL_ERROR",CTy"exception", LS"Checking perm on Page-Table pointer!")),qVar"state")), (LW(2,4), TP[ITE(EQ(Var("priv",CTy"Privilege"),LC("User",CTy"Privilege")), Mop(Not, EQ(Var("ac",CTy"accessType"), LC("Write",CTy"accessType"))), Bop(And, EQ(Var("ac",CTy"accessType"), LC("Read",CTy"accessType")), EQ(Var("ft",CTy"fetchType"), LC("Data",CTy"fetchType")))),qVar"state"]), (LW(3,4), TP[Bop(Or, EQ(Var("priv",CTy"Privilege"),LC("User",CTy"Privilege")), Mop(Not, EQ(Var("ft",CTy"fetchType"), LC("Instruction",CTy"fetchType")))),qVar"state"]), (LW(4,4), TP[Bop(And, EQ(Var("ac",CTy"accessType"),LC("Read",CTy"accessType")), EQ(Var("ft",CTy"fetchType"),LC("Data",CTy"fetchType"))), qVar"state"]), (LW(5,4), TP[Mop(Not, EQ(Var("ft",CTy"fetchType"), LC("Instruction",CTy"fetchType"))),qVar"state"]), (LW(6,4), TP[Mop(Not, EQ(Var("ac",CTy"accessType"),LC("Write",CTy"accessType"))), qVar"state"]),(LW(7,4),TP[LT,qVar"state"]), (LW(8,4), TP[Bop(And, Mop(Not, EQ(Var("priv",CTy"Privilege"), LC("User",CTy"Privilege"))), Bop(And, EQ(Var("ac",CTy"accessType"), LC("Read",CTy"accessType")), EQ(Var("ft",CTy"fetchType"), LC("Data",CTy"fetchType")))),qVar"state"]), (LW(9,4), TP[Bop(And, Mop(Not, EQ(Var("priv",CTy"Privilege"), LC("User",CTy"Privilege"))), Mop(Not, EQ(Var("ft",CTy"fetchType"), LC("Instruction",CTy"fetchType")))),qVar"state"]), (LW(10,4), TP[Bop(And, Mop(Not, EQ(Var("priv",CTy"Privilege"), LC("User",CTy"Privilege"))), Mop(Not, EQ(Var("ac",CTy"accessType"), LC("Write",CTy"accessType")))),qVar"state"]), (LW(11,4), TP[Mop(Not, EQ(Var("priv",CTy"Privilege"),LC("User",CTy"Privilege"))), qVar"state"]), (LW(12,4), TP[Bop(And, Mop(Not, EQ(Var("priv",CTy"Privilege"), LC("User",CTy"Privilege"))), Bop(And, EQ(Var("ac",CTy"accessType"), LC("Read",CTy"accessType")), EQ(Var("ft",CTy"fetchType"), LC("Data",CTy"fetchType")))),qVar"state"]), (LW(13,4), TP[Bop(And, Mop(Not, EQ(Var("priv",CTy"Privilege"), LC("User",CTy"Privilege"))), Mop(Not, EQ(Var("ft",CTy"fetchType"), LC("Instruction",CTy"fetchType")))),qVar"state"]), (LW(14,4), TP[Bop(And, Mop(Not, EQ(Var("priv",CTy"Privilege"), LC("User",CTy"Privilege"))), Mop(Not, EQ(Var("ac",CTy"accessType"), LC("Write",CTy"accessType")))),qVar"state"]), (LW(15,4), TP[Mop(Not, EQ(Var("priv",CTy"Privilege"),LC("User",CTy"Privilege"))), qVar"state"])]))) ; val isGlobal_def = Def ("isGlobal",Var("perm",F4), EQ(EX(Var("perm",F4),LN 3,LN 2,FTy 2),LW(3,2))) ; val rec'SV_PTE_def = Def ("rec'SV_PTE",Var("x",F64), Rec(CTy"SV_PTE", [Bop(Bit,Var("x",F64),LN 6),EX(Var("x",F64),LN 47,LN 10,FTy 38), Bop(Bit,Var("x",F64),LN 5),EX(Var("x",F64),LN 9,LN 7,FTy 3), EX(Var("x",F64),LN 4,LN 1,F4),Bop(Bit,Var("x",F64),LN 0), EX(Var("x",F64),LN 63,LN 48,F16)])) ; val reg'SV_PTE_def = Def ("reg'SV_PTE",Var("x",CTy"SV_PTE"), CS(Var("x",CTy"SV_PTE"), [(Rec(CTy"SV_PTE", [bVar"PTE_D",Var("PTE_PPNi",FTy 38),bVar"PTE_R", Var("PTE_SW",FTy 3),Var("PTE_T",F4),bVar"PTE_V", Var("sv_pte'rst",F16)]), CC[Var("sv_pte'rst",F16),Var("PTE_PPNi",FTy 38), Var("PTE_SW",FTy 3),Mop(Cast F1,bVar"PTE_D"), Mop(Cast F1,bVar"PTE_R"),Var("PTE_T",F4), Mop(Cast F1,bVar"PTE_V")])])) ; val write'rec'SV_PTE_def = Def ("write'rec'SV_PTE",TP[AVar F64,Var("x",CTy"SV_PTE")], Call("reg'SV_PTE",F64,Var("x",CTy"SV_PTE"))) ; val write'reg'SV_PTE_def = Def ("write'reg'SV_PTE",TP[AVar(CTy"SV_PTE"),Var("x",F64)], Call("rec'SV_PTE",CTy"SV_PTE",Var("x",F64))) ; val rec'SV_Vaddr_def = Def ("rec'SV_Vaddr",Var("x",F64), Rec(CTy"SV_Vaddr", [EX(Var("x",F64),LN 11,LN 0,FTy 12), EX(Var("x",F64),LN 47,LN 12,FTy 36), EX(Var("x",F64),LN 63,LN 48,F16)])) ; val reg'SV_Vaddr_def = Def ("reg'SV_Vaddr",Var("x",CTy"SV_Vaddr"), CS(Var("x",CTy"SV_Vaddr"), [(Rec(CTy"SV_Vaddr", [Var("Sv_PgOfs",FTy 12),Var("Sv_VPNi",FTy 36), Var("sv_vaddr'rst",F16)]), CC[Var("sv_vaddr'rst",F16),Var("Sv_VPNi",FTy 36), Var("Sv_PgOfs",FTy 12)])])) ; val write'rec'SV_Vaddr_def = Def ("write'rec'SV_Vaddr",TP[AVar F64,Var("x",CTy"SV_Vaddr")], Call("reg'SV_Vaddr",F64,Var("x",CTy"SV_Vaddr"))) ; val write'reg'SV_Vaddr_def = Def ("write'reg'SV_Vaddr",TP[AVar(CTy"SV_Vaddr"),Var("x",F64)], Call("rec'SV_Vaddr",CTy"SV_Vaddr",Var("x",F64))) ; val walk64_def = tDef ("walk64", TP[Var("vAddr",F64),Var("ft",CTy"fetchType"),Var("ac",CTy"accessType"), Var("priv",CTy"Privilege"),Var("ptb",F64),nVar"level"], Close (qVar"state", Let(Var("va",CTy"SV_Vaddr"), Call("rec'SV_Vaddr",CTy"SV_Vaddr",Var("vAddr",F64)), Let(Var("pte_addr",F64), Bop(Add,Var("ptb",F64), Bop(Lsl, Mop(Cast F64, EX(Bop(Lsr, Dest ("Sv_VPNi",FTy 36, Var("va",CTy"SV_Vaddr")), Bop(Mul,nVar"level", Const("LEVEL_BITS",nTy))), Bop(Sub,Const("LEVEL_BITS",nTy),LN 1),LN 0, FTy 9)),LN 3)), Let(Var("v",CTy"SV_PTE"), Call ("rec'SV_PTE",CTy"SV_PTE", Apply (Call ("rawReadData",ATy(qTy,F64),Var("pte_addr",F64)), qVar"state")), ITB([(Mop(Not,Dest("PTE_V",bTy,Var("v",CTy"SV_PTE"))), TP[LO(PTy(F64, PTy(CTy"SV_PTE",PTy(nTy,PTy(bTy,F64))))), qVar"state"]), (Bop(Or, EQ(Dest("PTE_T",F4,Var("v",CTy"SV_PTE")), LW(0,4)), EQ(Dest("PTE_T",F4,Var("v",CTy"SV_PTE")), LW(1,4))), ITE(EQ(nVar"level",LN 0), TP[LO(PTy(F64, PTy(CTy"SV_PTE", PTy(nTy,PTy(bTy,F64))))), qVar"state"], Apply (Call ("walk64", ATy(qTy, PTy(OTy(PTy(F64, PTy(CTy"SV_PTE", PTy(nTy,PTy(bTy,F64))))), qTy)), TP[Var("vAddr",F64), Var("ft",CTy"fetchType"), Var("ac",CTy"accessType"), Var("priv",CTy"Privilege"), Mop(Cast F64, Bop(Lsl, Dest ("PTE_PPNi",FTy 38, Var("v",CTy"SV_PTE")), Const("PAGESIZE_BITS",nTy))), Bop(Sub,nVar"level",LN 1)]), qVar"state")))], Let(TP[bVar"v0",qVar"s"], Apply (Call ("checkMemPermission", ATy(qTy,PTy(bTy,qTy)), TP[Var("ft",CTy"fetchType"), Var("ac",CTy"accessType"), Var("priv",CTy"Privilege"), Dest("PTE_T",F4,Var("v",CTy"SV_PTE"))]), qVar"state"), ITE(Mop(Not,bVar"v0"), TP[LO(PTy(F64, PTy(CTy"SV_PTE", PTy(nTy,PTy(bTy,F64))))), qVar"s"], Let(TP[Var("r", OTy(PTy(F64, PTy(CTy"SV_PTE", PTy(nTy,PTy(bTy,F64)))))), Var("s1",PTy(CTy"SV_PTE",qTy))], Let(Var("s0",CTy"SV_PTE"), Rupd ("PTE_R", TP[Var("v",CTy"SV_PTE"),LT]), Let(Var("s0",CTy"SV_PTE"), ITE(EQ(Var("ac",CTy"accessType"), LC("Write", CTy"accessType")), Rupd ("PTE_D", TP[Var("s0",CTy"SV_PTE"), LT]), Var("s0",CTy"SV_PTE")), TP[Mop(Some, TP[Mop(Cast F64, CC[ITE(Bop(Gt, nVar"level", LN 0), Bop(BOr, Mop(Cast (FTy 38), Bop(Lsl, Bop(Lsr, Dest ("PTE_PPNi", FTy 38, Var("v", CTy"SV_PTE")), Bop(Mul, nVar"level", Const ("LEVEL_BITS", nTy))), Bop(Mul, nVar"level", Const ("LEVEL_BITS", nTy)))), Mop(Cast (FTy 38), Bop(BAnd, Dest ("Sv_VPNi", FTy 36, Var("va", CTy"SV_Vaddr")), Bop(Sub, Bop(Lsl, LW(1, 36), Bop(Mul, nVar"level", Const ("LEVEL_BITS", nTy))), LW(1, 36))))), Dest ("PTE_PPNi", FTy 38, Var("v", CTy"SV_PTE"))), Dest ("Sv_PgOfs", FTy 12, Var("va", CTy"SV_Vaddr"))]), Var("s0",CTy"SV_PTE"), nVar"level", Call ("isGlobal",bTy, Dest ("PTE_T",F4, Var("v", CTy"SV_PTE"))), Var("pte_addr",F64)]), Var("s0",CTy"SV_PTE"), ITE(Bop(Or, Mop(Not, EQ(Dest ("PTE_R", bTy, Var("v", CTy"SV_PTE")), Dest ("PTE_R", bTy, Var("s0", CTy"SV_PTE")))), Mop(Not, EQ(Dest ("PTE_D", bTy, Var("v", CTy"SV_PTE")), Dest ("PTE_D", bTy, Var("s0", CTy"SV_PTE"))))), Apply (Call ("rawWriteData", ATy(qTy,qTy), TP[Var("pte_addr", F64), Call ("reg'SV_PTE", F64, Var("s0", CTy"SV_PTE")), LN 8]),qVar"s"), qVar"s")])), TP[Var("r", OTy(PTy(F64, PTy(CTy"SV_PTE", PTy(nTy,PTy(bTy,F64)))))), Mop(Snd, Var("s1",PTy(CTy"SV_PTE",qTy)))])))))))), Close (Var("x", PTy(PTy(F64, PTy(CTy"fetchType", PTy(CTy"accessType",PTy(CTy"Privilege",PTy(F64,nTy))))), qTy)), CS(Var("x", PTy(PTy(F64, PTy(CTy"fetchType", PTy(CTy"accessType", PTy(CTy"Privilege",PTy(F64,nTy))))),qTy)), [(TP[TP[Var("vAddr",F64),Var("ft",CTy"fetchType"), Var("ac",CTy"accessType"),Var("priv",CTy"Privilege"), Var("ptb",F64),nVar"level"],AVar qTy],nVar"level")])), NO_TAC) ; val curASID_def = Def ("curASID",AVar uTy, Close (qVar"state", EX(Dest ("sasid",F64, Apply(Const("SCSR",ATy(qTy,CTy"SupervisorCSR")),qVar"state")), Bop(Sub,Const("ASID_SIZE",nTy),LN 1),LN 0,FTy 6))) ; val mkTLBEntry_def = Def ("mkTLBEntry", TP[Var("asid",FTy 6),bVar"global",Var("vAddr",F64),Var("pAddr",F64), Var("pte",CTy"SV_PTE"),nVar"i",Var("pteAddr",F64)], Close (qVar"state", Let(Var("s0",CTy"TLBEntry"), Rupd ("vAddrMask", TP[Rupd ("pteAddr", TP[Rupd ("pte", TP[Rupd ("global", TP[Rupd ("asid", TP[LX(CTy"TLBEntry"), Var("asid",FTy 6)]),bVar"global"]), Var("pte",CTy"SV_PTE")]),Var("pteAddr",F64)]), Bop(Sub, Bop(Lsl,LW(1,64), Bop(Add,Bop(Mul,Const("LEVEL_BITS",nTy),nVar"i"), Const("PAGESIZE_BITS",nTy))),LW(1,64))]), Let(Var("s0",CTy"TLBEntry"), Rupd ("vMatchMask", TP[Var("s0",CTy"TLBEntry"), Bop(BXor,Mop(SE F64,LW(1,1)), Dest("vAddrMask",F64,Var("s0",CTy"TLBEntry")))]), Rupd ("age", TP[Rupd ("pAddr", TP[Rupd ("vAddr", TP[Var("s0",CTy"TLBEntry"), Bop(BAnd,Var("vAddr",F64), Dest ("vMatchMask",F64, Var("s0",CTy"TLBEntry")))]), Bop(Lsl, Bop(Asr,Var("pAddr",F64), Bop(Add,Const("PAGESIZE_BITS",nTy), Bop(Mul,Const("LEVEL_BITS",nTy), nVar"i"))), Bop(Add,Const("PAGESIZE_BITS",nTy), Bop(Mul,Const("LEVEL_BITS",nTy),nVar"i")))]), Apply (Dest("c_cycles",ATy(F8,F64),qVar"state"), Dest("procID",F8,qVar"state"))]))))) ; val TLBEntries_def = Def0 ("TLBEntries",LN 16) ; val lookupTLB_def = Def ("lookupTLB", TP[Var("asid",FTy 6),Var("vAddr",F64), Var("tlb",ATy(F4,OTy(CTy"TLBEntry")))], Mop(Fst, Mop(Snd, Apply (For(TP[LN 0,Bop(Sub,Const("TLBEntries",nTy),LN 1), Close (nVar"i", Close (Var("state",PTy(OTy(PTy(CTy"TLBEntry",F4)),uTy)), CS(Apply (Var("tlb",ATy(F4,OTy(CTy"TLBEntry"))), Mop(Cast F4,nVar"i")), [(Mop(Some,Var("e",CTy"TLBEntry")), TP[LU, ITE(Bop(And, EQ(Mop(Fst, Var("state", PTy(OTy(PTy(CTy"TLBEntry", F4)),uTy))), LO(PTy(CTy"TLBEntry",F4))), Bop(And, Bop(Or, Dest ("global",bTy, Var("e", CTy"TLBEntry")), EQ(Dest ("asid",FTy 6, Var("e", CTy"TLBEntry")), Var("asid",FTy 6))), EQ(Dest ("vAddr",F64, Var("e",CTy"TLBEntry")), Bop(BAnd, Var("vAddr",F64), Dest ("vMatchMask",F64, Var("e", CTy"TLBEntry")))))), TP[Mop(Some, TP[Var("e",CTy"TLBEntry"), Mop(Cast F4,nVar"i")]),LU], Var("state", PTy(OTy(PTy(CTy"TLBEntry",F4)), uTy)))]), (LO(CTy"TLBEntry"), TP[LU, Var("state", PTy(OTy(PTy(CTy"TLBEntry",F4)),uTy))])])))]), TP[LO(PTy(CTy"TLBEntry",F4)),LU])))) ; val addToTLB_def = Def ("addToTLB", TP[Var("asid",FTy 6),Var("vAddr",F64),Var("pAddr",F64), Var("pte",CTy"SV_PTE"),Var("pteAddr",F64),nVar"i",bVar"global", Var("curTLB",ATy(F4,OTy(CTy"TLBEntry")))], Close (qVar"state", Let(Var("s", PTy(bTy, PTy(nTy, PTy(F64, PTy(ATy(F4,OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry",qTy)))))), Mop(Snd, Apply (For(TP[LN 0,Bop(Sub,Const("TLBEntries",nTy),LN 1), Close (nVar"i", Close (Var("state", PTy(bTy, PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry",qTy)))))), CS(Apply (Mop(Fst, Mop(Snd, Mop(Snd, Mop(Snd, Var("state", PTy(bTy, PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy)))))))))), Mop(Cast F4,nVar"i")), [(Mop(Some,Var("e",CTy"TLBEntry")), ITE(Bop(Ult, Dest ("age",F64, Var("e",CTy"TLBEntry")), Mop(Fst, Mop(Snd, Mop(Snd, Var("state", PTy(bTy, PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy)))))))))), Let(Var("s", PTy(bTy, PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy)))))), TP[Mop(Fst, Var("state", PTy(bTy, PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy))))))), Let(Var("s", PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy))))), Mop(Snd, Var("state", PTy(bTy, PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy))))))), TP[Mop(Fst, Var("s", PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy)))))), Dest ("age",F64, Var("e", CTy"TLBEntry")), Mop(Snd, Mop(Snd, Var("s", PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy)))))))])], TP[LU, Mop(Fst, Var("s", PTy(bTy, PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy))))))), nVar"i", Mop(Snd, Mop(Snd, Var("s", PTy(bTy, PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy))))))))]), TP[LU, Var("state", PTy(bTy, PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy))))))])), (LO(CTy"TLBEntry"), TP[LU, ITE(Mop(Not, Mop(Fst, Var("state", PTy(bTy, PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy)))))))), TP[LT, Let(Var("s0", PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy))))), Mop(Snd, Var("state", PTy(bTy, PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy))))))), TP[Mop(Fst, Var("s0", PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy)))))), Let(Var("s0", PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy)))), Mop(Snd, Var("s0", PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy)))))), TP[Mop(Fst, Var("s0", PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy))))), Fupd (Mop(Fst, Mop(Snd, Mop(Snd, Mop(Snd, Var("state", PTy(bTy, PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy)))))))))), Mop(Cast F4, nVar"i"), Mop(Some, Mop(Fst, Mop(Snd, Mop(Snd, Mop(Snd, Mop(Snd, Var("state", PTy(bTy, PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy))))))))))))), Mop(Snd, Mop(Snd, Var("s0", PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy))))))])])], Var("state", PTy(bTy, PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy)))))))])])))]), TP[LF,LN 0,Mop(SE F64,LW(1,1)), Var("curTLB",ATy(F4,OTy(CTy"TLBEntry"))), Apply (Call ("mkTLBEntry",ATy(qTy,CTy"TLBEntry"), TP[Var("asid",FTy 6),bVar"global", Var("vAddr",F64),Var("pAddr",F64), Var("pte",CTy"SV_PTE"),nVar"i", Var("pteAddr",F64)]),qVar"state"),qVar"state"])), ITE(Mop(Not, Mop(Fst, Var("s", PTy(bTy, PTy(nTy, PTy(F64, PTy(ATy(F4,OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry",qTy)))))))), Fupd (Mop(Fst, Mop(Snd, Mop(Snd, Mop(Snd, Var("s", PTy(bTy, PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry",qTy)))))))))), Mop(Cast F4, Mop(Fst, Mop(Snd, Var("s", PTy(bTy, PTy(nTy, PTy(F64, PTy(ATy(F4,OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry",qTy))))))))), Mop(Some, Mop(Fst, Mop(Snd, Mop(Snd, Mop(Snd, Mop(Snd, Var("s", PTy(bTy, PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry", qTy))))))))))))), Mop(Fst, Mop(Snd, Mop(Snd, Mop(Snd, Var("s", PTy(bTy, PTy(nTy, PTy(F64, PTy(ATy(F4, OTy(CTy"TLBEntry")), PTy(CTy"TLBEntry",qTy)))))))))))))) ; val flushTLB_def = Def ("flushTLB", TP[Var("asid",FTy 6),Var("addr",OTy F64), Var("curTLB",ATy(F4,OTy(CTy"TLBEntry")))], Mop(Fst, Mop(Snd, Apply (For(TP[LN 0,Bop(Sub,Const("TLBEntries",nTy),LN 1), Close (nVar"i", Close (Var("state",PTy(ATy(F4,OTy(CTy"TLBEntry")),uTy)), CS(TP[Apply (Mop(Fst, Var("state", PTy(ATy(F4,OTy(CTy"TLBEntry")), uTy))), Mop(Cast F4,nVar"i")), Var("addr",OTy F64)], [(TP[Mop(Some,Var("e",CTy"TLBEntry")), Mop(Some,Var("va",F64))], TP[LU, ITE(Bop(And, Bop(Or, EQ(Var("asid",FTy 6), LW(0,6)), Bop(And, EQ(Var("asid",FTy 6), Dest ("asid",FTy 6, Var("e", CTy"TLBEntry"))), Mop(Not, Dest ("global",bTy, Var("e", CTy"TLBEntry"))))), EQ(Dest ("vAddr",F64, Var("e",CTy"TLBEntry")), Bop(BAnd,Var("va",F64), Dest ("vMatchMask",F64, Var("e",CTy"TLBEntry"))))), TP[Fupd (Mop(Fst, Var("state", PTy(ATy(F4, OTy(CTy"TLBEntry")), uTy))), Mop(Cast F4,nVar"i"), LO(CTy"TLBEntry")),LU], Var("state", PTy(ATy(F4,OTy(CTy"TLBEntry")), uTy)))]), (TP[Mop(Some,Var("e",CTy"TLBEntry")),LO F64], TP[LU, ITE(Bop(Or, EQ(Var("asid",FTy 6),LW(0,6)), Bop(And, EQ(Var("asid",FTy 6), Dest ("asid",FTy 6, Var("e",CTy"TLBEntry"))), Mop(Not, Dest ("global",bTy, Var("e", CTy"TLBEntry"))))), TP[Fupd (Mop(Fst, Var("state", PTy(ATy(F4, OTy(CTy"TLBEntry")), uTy))), Mop(Cast F4,nVar"i"), LO(CTy"TLBEntry")),LU], Var("state", PTy(ATy(F4,OTy(CTy"TLBEntry")), uTy)))]), (TP[LO(CTy"TLBEntry"),AVar(OTy F64)], TP[LU, Var("state", PTy(ATy(F4,OTy(CTy"TLBEntry")),uTy))])])))]), TP[Var("curTLB",ATy(F4,OTy(CTy"TLBEntry"))),LU])))) ; val TLB_def = Def ("TLB",qVar"state", Apply (Dest("c_tlb",ATy(F8,ATy(F4,OTy(CTy"TLBEntry"))),qVar"state"), Dest("procID",F8,qVar"state"))) ; val write'TLB_def = Def ("write'TLB",Var("value",ATy(F4,OTy(CTy"TLBEntry"))), Close (qVar"state", Rupd ("c_tlb", TP[qVar"state", Fupd (Dest ("c_tlb",ATy(F8,ATy(F4,OTy(CTy"TLBEntry"))),qVar"state"), Dest("procID",F8,qVar"state"), Var("value",ATy(F4,OTy(CTy"TLBEntry"))))]))) ; val translate64_def = Def ("translate64", TP[Var("vAddr",F64),Var("ft",CTy"fetchType"),Var("ac",CTy"accessType"), Var("priv",CTy"Privilege"),nVar"level"], Close (qVar"state", Let(Var("v",FTy 6), Apply(Call("curASID",ATy(qTy,FTy 6),LU),qVar"state"), CS(Call ("lookupTLB",OTy(PTy(CTy"TLBEntry",F4)), TP[Var("v",FTy 6),Var("vAddr",F64), Apply (Const("TLB",ATy(qTy,ATy(F4,OTy(CTy"TLBEntry")))), qVar"state")]), [(Mop(Some,TP[Var("e",CTy"TLBEntry"),Var("idx",F4)]), Let(TP[bVar"v",qVar"s"], Apply (Call ("checkMemPermission",ATy(qTy,PTy(bTy,qTy)), TP[Var("ft",CTy"fetchType"), Var("ac",CTy"accessType"), Var("priv",CTy"Privilege"), Dest ("PTE_T",F4, Dest ("pte",CTy"SV_PTE",Var("e",CTy"TLBEntry")))]), qVar"state"), ITE(bVar"v", TP[Mop(Some, Bop(BOr, Dest("pAddr",F64,Var("e",CTy"TLBEntry")), Bop(BAnd,Var("vAddr",F64), Dest ("vAddrMask",F64, Var("e",CTy"TLBEntry"))))), ITE(Bop(And, EQ(Var("ac",CTy"accessType"), LC("Write",CTy"accessType")), Mop(Not, Dest ("PTE_D",bTy, Dest ("pte",CTy"SV_PTE", Var("e",CTy"TLBEntry"))))), Let(Var("s0",CTy"TLBEntry"), Rupd ("pte", TP[Var("e",CTy"TLBEntry"), Rupd ("PTE_D", TP[Dest ("pte",CTy"SV_PTE", Var("e",CTy"TLBEntry")), LT])]), Let(qVar"s1", Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Dest ("pteAddr",F64, Var("s0",CTy"TLBEntry")), Call ("reg'SV_PTE",F64, Dest ("pte",CTy"SV_PTE", Var("s0", CTy"TLBEntry"))), LN 8]),qVar"s"), Apply (Call ("write'TLB",ATy(qTy,qTy), Fupd (Apply (Const ("TLB", ATy(qTy, ATy(F4, OTy(CTy"TLBEntry")))), qVar"s1"),Var("idx",F4), Mop(Some, Var("s0",CTy"TLBEntry")))), qVar"s1"))),qVar"s")], TP[LO F64,qVar"s"]))), (LO(PTy(CTy"TLBEntry",F4)), Let(TP[Var("v0", OTy(PTy(F64, PTy(CTy"SV_PTE",PTy(nTy,PTy(bTy,F64)))))), qVar"s"], Apply (Call ("walk64", ATy(qTy, PTy(OTy(PTy(F64, PTy(CTy"SV_PTE", PTy(nTy,PTy(bTy,F64))))),qTy)), TP[Var("vAddr",F64),Var("ft",CTy"fetchType"), Var("ac",CTy"accessType"), Var("priv",CTy"Privilege"), Dest ("sptbr",F64, Apply (Const ("SCSR",ATy(qTy,CTy"SupervisorCSR")), qVar"state")),nVar"level"]),qVar"state"), CS(Var("v0", OTy(PTy(F64, PTy(CTy"SV_PTE",PTy(nTy,PTy(bTy,F64)))))), [(Mop(Some, TP[Var("pAddr",F64),Var("pte",CTy"SV_PTE"), nVar"i",bVar"global",Var("pteAddr",F64)]), TP[Mop(Some,Var("pAddr",F64)), Apply (Call ("write'TLB",ATy(qTy,qTy), Apply (Call ("addToTLB", ATy(qTy,ATy(F4,OTy(CTy"TLBEntry"))), TP[Var("v",FTy 6),Var("vAddr",F64), Var("pAddr",F64), Var("pte",CTy"SV_PTE"), Var("pteAddr",F64),nVar"i", bVar"global", Apply (Const ("TLB", ATy(qTy, ATy(F4, OTy(CTy"TLBEntry")))), qVar"s")]),qVar"s")),qVar"s")]), (LO(PTy(F64,PTy(CTy"SV_PTE",PTy(nTy,PTy(bTy,F64))))), TP[LO F64,qVar"s"])])))])))) ; val translateAddr_def = Def ("translateAddr", TP[Var("vAddr",F64),Var("ft",CTy"fetchType"),Var("ac",CTy"accessType")], Close (qVar"state", Let(Var("v",CTy"Privilege"), Call ("privilege",CTy"Privilege", ITE(Bop(And, Dest ("MMPRV",bTy, Dest ("mstatus",CTy"mstatus", Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"state"))), EQ(Var("ft",CTy"fetchType"),LC("Data",CTy"fetchType"))), Dest ("MPRV1",FTy 2, Dest ("mstatus",CTy"mstatus", Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"state"))), Dest ("MPRV",FTy 2, Dest ("mstatus",CTy"mstatus", Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"state"))))), Let(TP[Var("v0",PTy(CTy"VM_Mode",CTy"Privilege")),qVar"s"], Let(TP[Var("v0",CTy"VM_Mode"),qVar"s"], Apply (Call ("vmType",ATy(qTy,PTy(CTy"VM_Mode",qTy)), Dest ("VM",FTy 5, Dest ("mstatus",CTy"mstatus", Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"state")))),qVar"state"), TP[TP[Var("v0",CTy"VM_Mode"),Var("v",CTy"Privilege")], qVar"s"]), CS(Var("v0",PTy(CTy"VM_Mode",CTy"Privilege")), [(TP[LC("Mbare",CTy"VM_Mode"),AVar(CTy"Privilege")], TP[Mop(Some,Var("vAddr",F64)),qVar"s"]), (TP[AVar(CTy"VM_Mode"),LC("Machine",CTy"Privilege")], TP[Mop(Some,Var("vAddr",F64)),qVar"s"]), (TP[LC("Sv39",CTy"VM_Mode"),AVar(CTy"Privilege")], Apply (Call ("translate64",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("vAddr",F64),Var("ft",CTy"fetchType"), Var("ac",CTy"accessType"), Var("v",CTy"Privilege"),LN 2]),qVar"s")), (TP[LC("Sv48",CTy"VM_Mode"),AVar(CTy"Privilege")], Apply (Call ("translate64",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("vAddr",F64),Var("ft",CTy"fetchType"), Var("ac",CTy"accessType"), Var("v",CTy"Privilege"),LN 3]),qVar"s")), (TP[AVar(CTy"VM_Mode"),AVar(CTy"Privilege")], TP[LO F64,qVar"s"])]))))) ; val matchLoadReservation_def = Def ("matchLoadReservation",Var("vAddr",F64), Close (qVar"state", Bop(And, Mop(IsSome, Apply(Const("ReserveLoad",ATy(qTy,OTy F64)),qVar"state")), EQ(Mop(ValOf, Apply(Const("ReserveLoad",ATy(qTy,OTy F64)),qVar"state")), Var("vAddr",F64))))) ; val branchTo_def = Def ("branchTo",Var("newPC",F64), Close (qVar"state", Apply (Call ("write'NextFetch",ATy(qTy,qTy), Mop(Some, Call("BranchTo",CTy"TransferControl",Var("newPC",F64)))), qVar"state"))) ; val dfn'ADDI_def = Def ("dfn'ADDI",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)], Close (qVar"state", Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(Add, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"),Mop(SE F64,Var("imm",FTy 12))), Var("rd",FTy 5)]),qVar"state"))) ; val dfn'ADDIW_def = Def ("dfn'ADDIW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, EX(Bop(Add, Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"), Mop(SE F64,Var("imm",FTy 12))),LN 31, LN 0,F32)),Var("rd",FTy 5)]),qVar"s"))))) ; val dfn'SLTI_def = Def ("dfn'SLTI",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(Cast F64, Bop(Lt, ITE(bVar"v", Mop(SE F64, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"), LN 31,LN 0,F32)), Apply (Call ("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s")),Mop(SE F64,Var("imm",FTy 12)))), Var("rd",FTy 5)]),qVar"s")))) ; val dfn'SLTIU_def = Def ("dfn'SLTIU",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(Cast F64, Bop(Ult, ITE(bVar"v", Mop(SE F64, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"), LN 31,LN 0,F32)), Apply (Call ("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s")),Mop(SE F64,Var("imm",FTy 12)))), Var("rd",FTy 5)]),qVar"s")))) ; val dfn'ANDI_def = Def ("dfn'ANDI",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)], Close (qVar"state", Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(BAnd, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"),Mop(SE F64,Var("imm",FTy 12))), Var("rd",FTy 5)]),qVar"state"))) ; val dfn'ORI_def = Def ("dfn'ORI",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)], Close (qVar"state", Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(BOr, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"),Mop(SE F64,Var("imm",FTy 12))), Var("rd",FTy 5)]),qVar"state"))) ; val dfn'XORI_def = Def ("dfn'XORI",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)], Close (qVar"state", Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(BXor, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"),Mop(SE F64,Var("imm",FTy 12))), Var("rd",FTy 5)]),qVar"state"))) ; val dfn'SLLI_def = Def ("dfn'SLLI",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(Bop(And,bVar"v",Bop(Bit,Var("imm",FTy 6),LN 5)), Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(Lsl, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s"),Mop(Cast nTy,Var("imm",FTy 6))), Var("rd",FTy 5)]),qVar"s"))))) ; val dfn'SRLI_def = Def ("dfn'SRLI",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(Bop(And,bVar"v",Bop(Bit,Var("imm",FTy 6),LN 5)), Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Let(TP[bVar"v",qVar"s"], Apply (Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(Lsr, ITE(bVar"v", Mop(Cast F64, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"), LN 31,LN 0,F32)), Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s")), Mop(Cast nTy,Var("imm",FTy 6))), Var("rd",FTy 5)]),qVar"s")))))) ; val dfn'SRAI_def = Def ("dfn'SRAI",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(Bop(And,bVar"v",Bop(Bit,Var("imm",FTy 6),LN 5)), Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Let(TP[bVar"v",qVar"s"], Apply (Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(Asr, ITE(bVar"v", Mop(SE F64, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"), LN 31,LN 0,F32)), Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s")), Mop(Cast nTy,Var("imm",FTy 6))), Var("rd",FTy 5)]),qVar"s")))))) ; val dfn'SLLIW_def = Def ("dfn'SLLIW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, Bop(Lsl, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"),LN 31, LN 0,F32),Mop(Cast nTy,Var("imm",FTy 5)))), Var("rd",FTy 5)]),qVar"s"))))) ; val dfn'SRLIW_def = Def ("dfn'SRLIW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, Bop(Lsr, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"),LN 31, LN 0,F32),Mop(Cast nTy,Var("imm",FTy 5)))), Var("rd",FTy 5)]),qVar"s"))))) ; val dfn'SRAIW_def = Def ("dfn'SRAIW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, Bop(Asr, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"),LN 31, LN 0,F32),Mop(Cast nTy,Var("imm",FTy 5)))), Var("rd",FTy 5)]),qVar"s"))))) ; val dfn'LUI_def = Def ("dfn'LUI",TP[Var("rd",FTy 5),Var("imm",FTy 20)], Close (qVar"state", Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64,CC[Var("imm",FTy 20),LW(0,12)]),Var("rd",FTy 5)]), qVar"state"))) ; val dfn'AUIPC_def = Def ("dfn'AUIPC",TP[Var("rd",FTy 5),Var("imm",FTy 20)], Close (qVar"state", Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(Add,Apply(Const("PC",ATy(qTy,F64)),qVar"state"), Mop(SE F64,CC[Var("imm",FTy 20),LW(0,12)])), Var("rd",FTy 5)]),qVar"state"))) ; val dfn'ADD_def = Def ("dfn'ADD",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(Add, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"state")),Var("rd",FTy 5)]),qVar"state"))) ; val dfn'ADDW_def = Def ("dfn'ADDW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, Bop(Add, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"),LN 31, LN 0,F32), EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"),LN 31, LN 0,F32))),Var("rd",FTy 5)]),qVar"s"))))) ; val dfn'SUB_def = Def ("dfn'SUB",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(Sub, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"state")),Var("rd",FTy 5)]),qVar"state"))) ; val dfn'SUBW_def = Def ("dfn'SUBW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, Bop(Sub, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"),LN 31, LN 0,F32), EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"),LN 31, LN 0,F32))),Var("rd",FTy 5)]),qVar"s"))))) ; val dfn'SLT_def = Def ("dfn'SLT",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), Let(TP[bVar"v0",qVar"s0"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(Cast F64, Bop(Lt, ITE(bVar"v", Mop(SE F64, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"), LN 31,LN 0,F32)), Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s")), ITE(bVar"v0", Mop(SE F64, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s0"), LN 31,LN 0,F32)), Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s0")))), Var("rd",FTy 5)]),qVar"s0"))))) ; val dfn'SLTU_def = Def ("dfn'SLTU",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), Let(TP[bVar"v0",qVar"s0"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(Cast F64, Bop(Ult, ITE(bVar"v", Mop(Cast F64, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"), LN 31,LN 0,F32)), Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s")), ITE(bVar"v0", Mop(Cast F64, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s0"), LN 31,LN 0,F32)), Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s0")))), Var("rd",FTy 5)]),qVar"s0"))))) ; val dfn'AND_def = Def ("dfn'AND",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(BAnd, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"state")),Var("rd",FTy 5)]),qVar"state"))) ; val dfn'OR_def = Def ("dfn'OR",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(BOr, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"state")),Var("rd",FTy 5)]),qVar"state"))) ; val dfn'XOR_def = Def ("dfn'XOR",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(BXor, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"state")),Var("rd",FTy 5)]),qVar"state"))) ; val dfn'SLL_def = Def ("dfn'SLL",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(Lsl, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s"), Mop(Cast F64, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"),LN 4, LN 0,FTy 5))),Var("rd",FTy 5)]),qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(Lsl, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s"), Mop(Cast F64, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"),LN 5, LN 0,FTy 6))),Var("rd",FTy 5)]),qVar"s"))))) ; val dfn'SLLW_def = Def ("dfn'SLLW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, Bop(Lsl, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"),LN 31, LN 0,F32), Mop(Cast F32, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), LN 4,LN 0,FTy 5)))),Var("rd",FTy 5)]), qVar"s"))))) ; val dfn'SRL_def = Def ("dfn'SRL",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(Cast F64, Bop(Lsr, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"),LN 31, LN 0,F32), Mop(Cast F32, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), LN 4,LN 0,FTy 5)))),Var("rd",FTy 5)]), qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(Lsr, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s"), Mop(Cast F64, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"),LN 5, LN 0,FTy 6))),Var("rd",FTy 5)]),qVar"s"))))) ; val dfn'SRLW_def = Def ("dfn'SRLW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, Bop(Lsr, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"),LN 31, LN 0,F32), Mop(Cast F32, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), LN 4,LN 0,FTy 5)))),Var("rd",FTy 5)]), qVar"s"))))) ; val dfn'SRA_def = Def ("dfn'SRA",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, Bop(Asr, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"),LN 31, LN 0,F32), Mop(Cast F32, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), LN 4,LN 0,FTy 5)))),Var("rd",FTy 5)]), qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(Asr, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s"), Mop(Cast F64, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"),LN 5, LN 0,FTy 6))),Var("rd",FTy 5)]),qVar"s"))))) ; val dfn'SRAW_def = Def ("dfn'SRAW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, Bop(Asr, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"),LN 31, LN 0,F32), Mop(Cast F32, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), LN 4,LN 0,FTy 5)))),Var("rd",FTy 5)]), qVar"s"))))) ; val dfn'MUL_def = Def ("dfn'MUL",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(Mul, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"state")),Var("rd",FTy 5)]),qVar"state"))) ; val dfn'MULH_def = Def ("dfn'MULH",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), Let(TP[bVar"v0",qVar"s0"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"), Let(Var("prod",FTy 128), Bop(Mul, Mop(SE(FTy 128), ITE(bVar"v", Mop(SE F64, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"), LN 31,LN 0,F32)), Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s"))), Mop(SE(FTy 128), ITE(bVar"v0", Mop(SE F64, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s0"), LN 31,LN 0,F32)), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s0")))), Let(TP[bVar"v",qVar"s"], Apply (Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU), qVar"s0"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[ITE(bVar"v", Mop(SE F64, EX(Var("prod",FTy 128),LN 63,LN 32, F32)), Mop(SE F64, EX(Var("prod",FTy 128),LN 127, LN 64,F64))),Var("rd",FTy 5)]), qVar"s"))))))) ; val dfn'MULHU_def = Def ("dfn'MULHU",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), Let(TP[bVar"v0",qVar"s0"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"), Let(Var("prod",FTy 128), Bop(Mul, ITE(bVar"v", Mop(Cast(FTy 128), EX(Apply (Call ("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s"),LN 31,LN 0,F32)), Mop(Cast(FTy 128), Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s"))), ITE(bVar"v0", Mop(Cast(FTy 128), EX(Apply (Call ("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s0"),LN 31,LN 0,F32)), Mop(Cast(FTy 128), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s0")))), Let(TP[bVar"v",qVar"s"], Apply (Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU), qVar"s0"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[ITE(bVar"v", Mop(Cast F64, EX(Var("prod",FTy 128),LN 63,LN 32, F32)), EX(Var("prod",FTy 128),LN 127,LN 64,F64)), Var("rd",FTy 5)]),qVar"s"))))))) ; val dfn'MULHSU_def = Def ("dfn'MULHSU",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), Let(TP[bVar"v0",qVar"s0"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"), Let(Var("prod",FTy 128), Bop(Mul, ITE(bVar"v", Mop(SE(FTy 128), EX(Apply (Call ("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s"),LN 31,LN 0,F32)), Mop(SE(FTy 128), Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s"))), ITE(bVar"v0", Mop(Cast(FTy 128), EX(Apply (Call ("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s0"),LN 31,LN 0,F32)), Mop(Cast(FTy 128), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s0")))), Let(TP[bVar"v",qVar"s"], Apply (Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU), qVar"s0"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[ITE(bVar"v", Mop(SE F64, EX(Var("prod",FTy 128),LN 63,LN 32, F32)), EX(Var("prod",FTy 128),LN 127,LN 64,F64)), Var("rd",FTy 5)]),qVar"s"))))))) ; val dfn'MULW_def = Def ("dfn'MULW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, EX(Mop(SE F64, Bop(Mul, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"), LN 31,LN 0,F32), EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), LN 31,LN 0,F32))),LN 31,LN 0,F32)), Var("rd",FTy 5)]),qVar"s"))))) ; val dfn'DIV_def = Def ("dfn'DIV",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", ITE(EQ(Apply(Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),qVar"state"), LW(0,64)), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64,LW(1,1)),Var("rd",FTy 5)]),qVar"state"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(Quot, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"state")),Var("rd",FTy 5)]),qVar"state")))) ; val dfn'REM_def = Def ("dfn'REM",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", ITE(EQ(Apply(Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),qVar"state"), LW(0,64)), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"),Var("rd",FTy 5)]),qVar"state"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(Rem, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"state")),Var("rd",FTy 5)]),qVar"state")))) ; val dfn'DIVU_def = Def ("dfn'DIVU",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), Let(TP[bVar"v0",qVar"s0"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"), Let(Var("v0",F64), ITE(bVar"v0", Mop(Cast F64, EX(Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s0"),LN 31,LN 0,F32)), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s0")), ITE(EQ(Var("v0",F64),LW(0,64)), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64,LW(1,1)),Var("rd",FTy 5)]), qVar"s0"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(Div, ITE(bVar"v", Mop(Cast F64, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)), qVar"s"),LN 31,LN 0,F32)), Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s")), Var("v0",F64)),Var("rd",FTy 5)]), qVar"s0"))))))) ; val dfn'REMU_def = Def ("dfn'REMU",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", ITE(EQ(Apply(Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),qVar"state"), LW(0,64)), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"),Var("rd",FTy 5)]),qVar"state"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(Mod, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"state")),Var("rd",FTy 5)]),qVar"state")))) ; val dfn'DIVW_def = Def ("dfn'DIVW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Let(Var("v0",F32), EX(Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),qVar"s"), LN 31,LN 0,F32), ITE(EQ(Var("v0",F32),LW(0,32)), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64,LW(1,1)),Var("rd",FTy 5)]), qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, Bop(Quot, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"), LN 31,LN 0,F32),Var("v0",F32))), Var("rd",FTy 5)]),qVar"s"))))))) ; val dfn'REMW_def = Def ("dfn'REMW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Let(Var("v",F32), EX(Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"s"), LN 31,LN 0,F32), Let(Var("v0",F32), EX(Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s"),LN 31,LN 0,F32), ITE(EQ(Var("v0",F32),LW(0,32)), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64,Var("v",F32)), Var("rd",FTy 5)]),qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, Bop(Rem,Var("v",F32),Var("v0",F32))), Var("rd",FTy 5)]),qVar"s")))))))) ; val dfn'DIVUW_def = Def ("dfn'DIVUW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Let(Var("v0",F32), EX(Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)),qVar"s"), LN 31,LN 0,F32), ITE(EQ(Var("v0",F32),LW(0,32)), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64,LW(1,1)),Var("rd",FTy 5)]), qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, Bop(Div, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"), LN 31,LN 0,F32),Var("v0",F32))), Var("rd",FTy 5)]),qVar"s"))))))) ; val dfn'REMUW_def = Def ("dfn'REMUW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Let(Var("v",F32), EX(Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"s"), LN 31,LN 0,F32), Let(Var("v0",F32), EX(Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s"),LN 31,LN 0,F32), ITE(EQ(Var("v0",F32),LW(0,32)), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64,Var("v",F32)), Var("rd",FTy 5)]),qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, Bop(Mod,Var("v",F32),Var("v0",F32))), Var("rd",FTy 5)]),qVar"s")))))))) ; val dfn'JAL_def = Def ("dfn'JAL",TP[Var("rd",FTy 5),Var("imm",FTy 20)], Close (qVar"state", Let(Var("v",F64), Bop(Add,Apply(Const("PC",ATy(qTy,F64)),qVar"state"), Bop(Lsl,Mop(SE F64,Var("imm",FTy 20)),LN 1)), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Fetch_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Apply (Call("branchTo",ATy(qTy,qTy),Var("v",F64)), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(Add, Apply(Const("PC",ATy(qTy,F64)),qVar"state"), LW(4,64)),Var("rd",FTy 5)]),qVar"state")))))) ; val dfn'JALR_def = Def ("dfn'JALR",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)], Close (qVar"state", Let(Var("v",F64), Bop(BAnd, Bop(Add, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), Mop(SE F64,Var("imm",FTy 12))),Mop(SE F64,LW(2,2))), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Fetch_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Apply (Call("branchTo",ATy(qTy,qTy),Var("v",F64)), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Bop(Add, Apply(Const("PC",ATy(qTy,F64)),qVar"state"), LW(4,64)),Var("rd",FTy 5)]),qVar"state")))))) ; val dfn'BEQ_def = Def ("dfn'BEQ",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), Let(TP[bVar"v0",qVar"s0"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"), ITE(EQ(ITE(bVar"v", Mop(SE F64, EX(Apply (Call ("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s"),LN 31,LN 0,F32)), Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s")), ITE(bVar"v0", Mop(SE F64, EX(Apply (Call ("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s0"),LN 31,LN 0,F32)), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s0"))), Apply (Call ("branchTo",ATy(qTy,qTy), Bop(Add,Apply(Const("PC",ATy(qTy,F64)),qVar"s0"), Bop(Lsl,Mop(SE F64,Var("offs",FTy 12)),LN 1))), qVar"s0"),qVar"s0"))))) ; val dfn'BNE_def = Def ("dfn'BNE",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), Let(TP[bVar"v0",qVar"s0"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"), ITE(Mop(Not, EQ(ITE(bVar"v", Mop(SE F64, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"), LN 31,LN 0,F32)), Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s")), ITE(bVar"v0", Mop(SE F64, EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s0"), LN 31,LN 0,F32)), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s0")))), Apply (Call ("branchTo",ATy(qTy,qTy), Bop(Add,Apply(Const("PC",ATy(qTy,F64)),qVar"s0"), Bop(Lsl,Mop(SE F64,Var("offs",FTy 12)),LN 1))), qVar"s0"),qVar"s0"))))) ; val dfn'BLT_def = Def ("dfn'BLT",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), Let(TP[bVar"v0",qVar"s0"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"), ITE(Bop(Lt, ITE(bVar"v", Mop(SE F64, EX(Apply (Call ("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s"),LN 31,LN 0,F32)), Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s")), ITE(bVar"v0", Mop(SE F64, EX(Apply (Call ("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s0"),LN 31,LN 0,F32)), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s0"))), Apply (Call ("branchTo",ATy(qTy,qTy), Bop(Add,Apply(Const("PC",ATy(qTy,F64)),qVar"s0"), Bop(Lsl,Mop(SE F64,Var("offs",FTy 12)),LN 1))), qVar"s0"),qVar"s0"))))) ; val dfn'BLTU_def = Def ("dfn'BLTU",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), Let(TP[bVar"v0",qVar"s0"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"), ITE(Bop(Ult, ITE(bVar"v", Mop(SE F64, EX(Apply (Call ("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s"),LN 31,LN 0,F32)), Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s")), ITE(bVar"v0", Mop(SE F64, EX(Apply (Call ("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s0"),LN 31,LN 0,F32)), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s0"))), Apply (Call ("branchTo",ATy(qTy,qTy), Bop(Add,Apply(Const("PC",ATy(qTy,F64)),qVar"s0"), Bop(Lsl,Mop(SE F64,Var("offs",FTy 12)),LN 1))), qVar"s0"),qVar"s0"))))) ; val dfn'BGE_def = Def ("dfn'BGE",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), Let(TP[bVar"v0",qVar"s0"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"), ITE(Bop(Ge, ITE(bVar"v", Mop(SE F64, EX(Apply (Call ("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s"),LN 31,LN 0,F32)), Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s")), ITE(bVar"v0", Mop(SE F64, EX(Apply (Call ("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s0"),LN 31,LN 0,F32)), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s0"))), Apply (Call ("branchTo",ATy(qTy,qTy), Bop(Add,Apply(Const("PC",ATy(qTy,F64)),qVar"s0"), Bop(Lsl,Mop(SE F64,Var("offs",FTy 12)),LN 1))), qVar"s0"),qVar"s0"))))) ; val dfn'BGEU_def = Def ("dfn'BGEU",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), Let(TP[bVar"v0",qVar"s0"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"), ITE(Bop(Uge, ITE(bVar"v", Mop(SE F64, EX(Apply (Call ("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s"),LN 31,LN 0,F32)), Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s")), ITE(bVar"v0", Mop(SE F64, EX(Apply (Call ("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s0"),LN 31,LN 0,F32)), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s0"))), Apply (Call ("branchTo",ATy(qTy,qTy), Bop(Add,Apply(Const("PC",ATy(qTy,F64)),qVar"s0"), Bop(Lsl,Mop(SE F64,Var("offs",FTy 12)),LN 1))), qVar"s0"),qVar"s0"))))) ; val dfn'LW_def = Def ("dfn'LW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(Var("v",F64), Bop(Add, Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), Mop(SE F64,Var("offs",FTy 12))), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Read",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, EX(Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"),LN 31, LN 0,F32)),Var("rd",FTy 5)]),qVar"s")), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Load_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))]))))) ; val dfn'LWU_def = Def ("dfn'LWU",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Let(Var("v",F64), Bop(Add, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"s"), Mop(SE F64,Var("offs",FTy 12))), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Read",CTy"accessType")]),qVar"s"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(Cast F64, EX(Apply (Call ("rawReadData", ATy(qTy,F64), Var("pAddr",F64)),qVar"s"), LN 31,LN 0,F32)), Var("rd",FTy 5)]),qVar"s")), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Load_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))]))))))) ; val dfn'LH_def = Def ("dfn'LH",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(Var("v",F64), Bop(Add, Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), Mop(SE F64,Var("offs",FTy 12))), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Read",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, EX(Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"),LN 15, LN 0,F16)),Var("rd",FTy 5)]),qVar"s")), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Load_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))]))))) ; val dfn'LHU_def = Def ("dfn'LHU",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(Var("v",F64), Bop(Add, Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), Mop(SE F64,Var("offs",FTy 12))), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Read",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(Cast F64, EX(Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"),LN 15, LN 0,F16)),Var("rd",FTy 5)]),qVar"s")), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Load_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))]))))) ; val dfn'LB_def = Def ("dfn'LB",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(Var("v",F64), Bop(Add, Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), Mop(SE F64,Var("offs",FTy 12))), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Read",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, EX(Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"),LN 7, LN 0,F8)),Var("rd",FTy 5)]),qVar"s")), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Load_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))]))))) ; val dfn'LBU_def = Def ("dfn'LBU",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(Var("v",F64), Bop(Add, Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), Mop(SE F64,Var("offs",FTy 12))), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Read",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(Cast F64, EX(Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"),LN 7, LN 0,F8)),Var("rd",FTy 5)]),qVar"s")), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Load_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))]))))) ; val dfn'LD_def = Def ("dfn'LD",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Let(Var("v",F64), Bop(Add, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"s"), Mop(SE F64,Var("offs",FTy 12))), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Read",CTy"accessType")]),qVar"s"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"), Var("rd",FTy 5)]),qVar"s")), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Load_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))]))))))) ; val dfn'SW_def = Def ("dfn'SW",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(Var("v",F64), Bop(Add, Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), Mop(SE F64,Var("offs",FTy 12))), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s"),LN 4]),qVar"s")), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))]))))) ; val dfn'SH_def = Def ("dfn'SH",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(Var("v",F64), Bop(Add, Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), Mop(SE F64,Var("offs",FTy 12))), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s"),LN 2]),qVar"s")), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))]))))) ; val dfn'SB_def = Def ("dfn'SB",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(Var("v",F64), Bop(Add, Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), Mop(SE F64,Var("offs",FTy 12))), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Apply (Call("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s"),LN 1]),qVar"s")), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))]))))) ; val dfn'SD_def = Def ("dfn'SD",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Let(Var("v",F64), Bop(Add, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"s"), Mop(SE F64,Var("offs",FTy 12))), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"s"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"),LN 8]), qVar"s")), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault", CTy"ExceptionType"),Var("v",F64)]), qVar"s"))]))))))) ; val dfn'FENCE_def = Def ("dfn'FENCE", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("pred",F4),Var("succ",F4)],LU) ; val dfn'FENCE_I_def = Def ("dfn'FENCE_I",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)],LU) ; val dfn'LR_W_def = Def ("dfn'LR_W", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Read",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call ("write'ReserveLoad",ATy(qTy,qTy), Mop(Some,Var("v",F64))), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, EX(Apply (Call ("rawReadData", ATy(qTy,F64), Var("pAddr",F64)),qVar"s"), LN 31,LN 0,F32)),Var("rd",FTy 5)]), qVar"s"))), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Load_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))) ; val dfn'LR_D_def = Def ("dfn'LR_D", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"s"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"s"), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Read",CTy"accessType")]),qVar"s"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call ("write'ReserveLoad",ATy(qTy,qTy), Mop(Some,Var("v",F64))), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Apply (Call ("rawReadData", ATy(qTy,F64), Var("pAddr",F64)),qVar"s"), Var("rd",FTy 5)]),qVar"s"))), (LO F64, Apply (Call ("signalAddressException", ATy(qTy,qTy), TP[LC("Load_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))))) ; val dfn'SC_W_def = Def ("dfn'SC_W", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), ITB([(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state")), (Mop(Not, Apply (Call ("matchLoadReservation",ATy(qTy,bTy),Var("v",F64)), qVar"state")), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[LW(1,64),Var("rd",FTy 5)]),qVar"state"))], Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Read",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call("write'ReserveLoad",ATy(qTy,qTy),LO F64), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[LW(0,64),Var("rd",FTy 5)]), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), LN 4]),qVar"s")))), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))) ; val dfn'SC_D_def = Def ("dfn'SC_D", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply(Call("in32BitMode",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"), Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"s"), ITB([(Mop(Not, EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"s")), (Mop(Not, Apply (Call ("matchLoadReservation",ATy(qTy,bTy), Var("v",F64)),qVar"s")), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[LW(1,64),Var("rd",FTy 5)]),qVar"s"))], Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Read",CTy"accessType")]),qVar"s"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call ("write'ReserveLoad",ATy(qTy,qTy), LO F64), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[LW(0,64),Var("rd",FTy 5)]), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)), qVar"s"),LN 8]),qVar"s")))), (LO F64, Apply (Call ("signalAddressException", ATy(qTy,qTy), TP[LC("Store_AMO_Fault", CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))))) ; val dfn'AMOSWAP_W_def = Def ("dfn'AMOSWAP_W", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Apply (Call ("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s"),LN 4]), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, EX(Apply (Call ("rawReadData", ATy(qTy,F64), Var("pAddr",F64)),qVar"s"), LN 31,LN 0,F32)),Var("rd",FTy 5)]), qVar"s"))), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))) ; val dfn'AMOSWAP_D_def = Def ("dfn'AMOSWAP_D", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Apply (Call ("GPR",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s"),LN 8]), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"), Var("rd",FTy 5)]),qVar"s"))), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))) ; val dfn'AMOADD_W_def = Def ("dfn'AMOADD_W", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Let(Var("v",F64), Mop(SE F64, EX(Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"),LN 31, LN 0,F32)), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Bop(Add, Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), Var("v",F64)),LN 4]), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), qVar"s")))), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))) ; val dfn'AMOADD_D_def = Def ("dfn'AMOADD_D", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Let(Var("v",F64), Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Bop(Add, Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), Var("v",F64)),LN 8]), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), qVar"s")))), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))) ; val dfn'AMOXOR_W_def = Def ("dfn'AMOXOR_W", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Let(Var("v",F64), Mop(SE F64, EX(Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"),LN 31, LN 0,F32)), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Bop(BXor, Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), Var("v",F64)),LN 4]), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), qVar"s")))), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))) ; val dfn'AMOXOR_D_def = Def ("dfn'AMOXOR_D", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Let(Var("v",F64), Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Bop(BXor, Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), Var("v",F64)),LN 8]), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), qVar"s")))), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))) ; val dfn'AMOAND_W_def = Def ("dfn'AMOAND_W", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Let(Var("v",F64), Mop(SE F64, EX(Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"),LN 31, LN 0,F32)), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Bop(BAnd, Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), Var("v",F64)),LN 4]), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), qVar"s")))), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))) ; val dfn'AMOAND_D_def = Def ("dfn'AMOAND_D", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Let(Var("v",F64), Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Bop(BAnd, Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), Var("v",F64)),LN 8]), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), qVar"s")))), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))) ; val dfn'AMOOR_W_def = Def ("dfn'AMOOR_W", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Let(Var("v",F64), Mop(SE F64, EX(Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"),LN 31, LN 0,F32)), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Bop(BOr, Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), Var("v",F64)),LN 4]), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), qVar"s")))), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))) ; val dfn'AMOOR_D_def = Def ("dfn'AMOOR_D", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Let(Var("v",F64), Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Bop(BOr, Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), Var("v",F64)),LN 8]), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), qVar"s")))), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))) ; val dfn'AMOMIN_W_def = Def ("dfn'AMOMIN_W", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Let(Var("v",F64), Mop(SE F64, EX(Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"),LN 31, LN 0,F32)), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Mop(Smin, TP[Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), Var("v",F64)]),LN 4]), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), qVar"s")))), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))) ; val dfn'AMOMIN_D_def = Def ("dfn'AMOMIN_D", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Let(Var("v",F64), Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Mop(Smin, TP[Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), Var("v",F64)]),LN 8]), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), qVar"s")))), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))) ; val dfn'AMOMAX_W_def = Def ("dfn'AMOMAX_W", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Let(Var("v",F64), Mop(SE F64, EX(Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"),LN 31, LN 0,F32)), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Mop(Smax, TP[Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), Var("v",F64)]),LN 4]), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), qVar"s")))), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))) ; val dfn'AMOMAX_D_def = Def ("dfn'AMOMAX_D", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Let(Var("v",F64), Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Mop(Smax, TP[Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), Var("v",F64)]),LN 8]), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), qVar"s")))), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))) ; val dfn'AMOMINU_W_def = Def ("dfn'AMOMINU_W", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Let(Var("v",F64), Mop(SE F64, EX(Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"),LN 31, LN 0,F32)), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Mop(Min, TP[Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), Var("v",F64)]),LN 4]), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), qVar"s")))), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))) ; val dfn'AMOMINU_D_def = Def ("dfn'AMOMINU_D", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Let(Var("v",F64), Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Mop(Min, TP[Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), Var("v",F64)]),LN 8]), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), qVar"s")))), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))) ; val dfn'AMOMAXU_W_def = Def ("dfn'AMOMAXU_W", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Let(Var("v",F64), Mop(SE F64, EX(Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"),LN 31, LN 0,F32)), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Mop(Max, TP[Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), Var("v",F64)]),LN 4]), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), qVar"s")))), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))) ; val dfn'AMOMAXU_D_def = Def ("dfn'AMOMAXU_D", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 2,LN 0,FTy 3),LW(0,3))), Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("AMO_Misaligned",CTy"ExceptionType"), Var("v",F64)]),qVar"state"), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Let(Var("v",F64), Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Mop(Max, TP[Apply (Call ("GPR",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"s"), Var("v",F64)]),LN 8]), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), qVar"s")))), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))])))))) ; val dfn'FLW_def = Def ("dfn'FLW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(Var("v",F64), Bop(Add, Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), Mop(SE F64,Var("offs",FTy 12))), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Read",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call ("write'FPRS",ATy(qTy,qTy), TP[EX(Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"),LN 31, LN 0,F32),Var("rd",FTy 5)]),qVar"s")), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Load_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))]))))) ; val dfn'FSW_def = Def ("dfn'FSW",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(Var("v",F64), Bop(Add, Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), Mop(SE F64,Var("offs",FTy 12))), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Mop(Cast F64, Apply (Call ("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)), qVar"s")),LN 4]),qVar"s")), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))]))))) ; val dfn'FADD_S_def = Def ("dfn'FADD_S", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRS",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPAdd 32, TP[Var("r",rTy), Apply (Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)), qVar"state"), Apply (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)), qVar"state")])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FSUB_S_def = Def ("dfn'FSUB_S", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRS",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPSub 32, TP[Var("r",rTy), Apply (Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)), qVar"state"), Apply (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)), qVar"state")])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FMUL_S_def = Def ("dfn'FMUL_S", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRS",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPMul 32, TP[Var("r",rTy), Apply (Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)), qVar"state"), Apply (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)), qVar"state")])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FDIV_S_def = Def ("dfn'FDIV_S", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRS",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPDiv 32, TP[Var("r",rTy), Apply (Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)), qVar"state"), Apply (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)), qVar"state")])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FSQRT_S_def = Def ("dfn'FSQRT_S",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRS",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPSqrt 32, TP[Var("r",rTy), Apply (Call("FPRS",ATy(qTy,F32),Var("rs",FTy 5)), qVar"state")])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FMIN_S_def = Def ("dfn'FMIN_S",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F32), Apply(Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)),qVar"state"), Let(Var("v0",F32), Apply (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)),qVar"state"), Apply (Call ("writeFPRS",ATy(qTy,qTy), TP[Var("rd",FTy 5), CS(Mop(FPCmp 32,TP[Var("v",F32),Var("v0",F32)]), [(binary_ieeeSyntax.LT_tm,Var("v",F32)), (binary_ieeeSyntax.EQ_tm,Var("v",F32)), (binary_ieeeSyntax.GT_tm,Var("v0",F32)), (binary_ieeeSyntax.UN_tm, ITB([(Bop(Or, Bop(Or, Call ("FP32_IsSignalingNan",bTy, Var("v",F32)), Call ("FP32_IsSignalingNan",bTy, Var("v0",F32))), Bop(And, EQ(Var("v",F32), Const ("RV32_CanonicalNan",F32)), EQ(Var("v0",F32), Const ("RV32_CanonicalNan",F32)))), Const("RV32_CanonicalNan",F32)), (EQ(Var("v",F32), Const("RV32_CanonicalNan",F32)), Var("v0",F32))],Var("v",F32)))])]), qVar"state"))))) ; val dfn'FMAX_S_def = Def ("dfn'FMAX_S",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F32), Apply(Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)),qVar"state"), Let(Var("v0",F32), Apply (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)),qVar"state"), Apply (Call ("writeFPRS",ATy(qTy,qTy), TP[Var("rd",FTy 5), CS(Mop(FPCmp 32,TP[Var("v",F32),Var("v0",F32)]), [(binary_ieeeSyntax.LT_tm,Var("v0",F32)), (binary_ieeeSyntax.EQ_tm,Var("v0",F32)), (binary_ieeeSyntax.GT_tm,Var("v",F32)), (binary_ieeeSyntax.UN_tm, ITB([(Bop(Or, Bop(Or, Call ("FP32_IsSignalingNan",bTy, Var("v",F32)), Call ("FP32_IsSignalingNan",bTy, Var("v0",F32))), Bop(And, EQ(Var("v",F32), Const ("RV32_CanonicalNan",F32)), EQ(Var("v0",F32), Const ("RV32_CanonicalNan",F32)))), Const("RV32_CanonicalNan",F32)), (EQ(Var("v",F32), Const("RV32_CanonicalNan",F32)), Var("v0",F32))],Var("v",F32)))])]), qVar"state"))))) ; val dfn'FMADD_S_def = Def ("dfn'FMADD_S", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5), Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRS",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPAdd 32, TP[Var("r",rTy), Mop(FPMul 32, TP[Var("r",rTy), Apply (Call ("FPRS",ATy(qTy,F32), Var("rs1",FTy 5)),qVar"state"), Apply (Call ("FPRS",ATy(qTy,F32), Var("rs2",FTy 5)),qVar"state")]), Apply (Call("FPRS",ATy(qTy,F32),Var("rs3",FTy 5)), qVar"state")])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FMSUB_S_def = Def ("dfn'FMSUB_S", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5), Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRS",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPSub 32, TP[Var("r",rTy), Mop(FPMul 32, TP[Var("r",rTy), Apply (Call ("FPRS",ATy(qTy,F32), Var("rs1",FTy 5)),qVar"state"), Apply (Call ("FPRS",ATy(qTy,F32), Var("rs2",FTy 5)),qVar"state")]), Apply (Call("FPRS",ATy(qTy,F32),Var("rs3",FTy 5)), qVar"state")])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FNMADD_S_def = Def ("dfn'FNMADD_S", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5), Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRS",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPNeg 32, Mop(FPAdd 32, TP[Var("r",rTy), Mop(FPMul 32, TP[Var("r",rTy), Apply (Call ("FPRS",ATy(qTy,F32), Var("rs1",FTy 5)),qVar"state"), Apply (Call ("FPRS",ATy(qTy,F32), Var("rs2",FTy 5)),qVar"state")]), Apply (Call ("FPRS",ATy(qTy,F32),Var("rs3",FTy 5)), qVar"state")]))]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FNMSUB_S_def = Def ("dfn'FNMSUB_S", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5), Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRS",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPNeg 32, Mop(FPSub 32, TP[Var("r",rTy), Mop(FPMul 32, TP[Var("r",rTy), Apply (Call ("FPRS",ATy(qTy,F32), Var("rs1",FTy 5)),qVar"state"), Apply (Call ("FPRS",ATy(qTy,F32), Var("rs2",FTy 5)),qVar"state")]), Apply (Call ("FPRS",ATy(qTy,F32),Var("rs3",FTy 5)), qVar"state")]))]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FCVT_S_W_def = Def ("dfn'FCVT_S_W",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRS",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPFromInt 32, TP[Var("r",rTy), Mop(Cast iTy, EX(Apply (Call ("GPR",ATy(qTy,F64),Var("rs",FTy 5)), qVar"state"),LN 31,LN 0,F32))])]), qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FCVT_S_WU_def = Def ("dfn'FCVT_S_WU",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRS",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPFromInt 32, TP[Var("r",rTy), Mop(Cast iTy, CC[LW(0,1), EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs",FTy 5)),qVar"state"), LN 31,LN 0,F32)])])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FCVT_W_S_def = Def ("dfn'FCVT_W_S",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Let(Var("v",F32), Apply (Call("FPRS",ATy(qTy,F32),Var("rs",FTy 5)),qVar"state"), Let(iVar"val", Mop(ValOf,Mop(FPToInt 32,TP[Var("r",rTy),Var("v",F32)])), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[ITB([(Bop(Or,Mop(FPIsNan 32,Var("v",F32)), EQ(Var("v",F32),POSINF32)), Mop(Cast F64, Bop(Sub,Bop(Exp,LN 2,LN 31),LN 1))), (EQ(Var("v",F32),NEGINF32), Mop(Neg, Mop(Cast F64,Bop(Exp,LN 2,LN 31)))), (Bop(Gt,iVar"val", Bop(Sub,Bop(Exp,LI 2,LN 31),LI 1)), Mop(Cast F64, Bop(Sub,Bop(Exp,LN 2,LN 31),LN 1))), (Bop(Lt,iVar"val", Mop(Neg,Bop(Exp,LI 2,LN 31))), Mop(Neg, Mop(Cast F64,Bop(Exp,LN 2,LN 31))))], Mop(Cast F64,iVar"val")),Var("rd",FTy 5)]), qVar"state")))), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FCVT_WU_S_def = Def ("dfn'FCVT_WU_S",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Let(Var("v",F32), Apply (Call("FPRS",ATy(qTy,F32),Var("rs",FTy 5)),qVar"state"), Let(iVar"val", Mop(ValOf,Mop(FPToInt 32,TP[Var("r",rTy),Var("v",F32)])), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[ITB([(Bop(Or,Mop(FPIsNan 32,Var("v",F32)), EQ(Var("v",F32),POSINF32)), Mop(Cast F64, Bop(Sub,Bop(Exp,LN 2,LN 32),LN 1))), (EQ(Var("v",F32),NEGINF32),LW(0,64)), (Bop(Gt,iVar"val", Bop(Sub,Bop(Exp,LI 2,LN 32),LI 1)), Mop(Cast F64, Bop(Sub,Bop(Exp,LN 2,LN 32),LN 1))), (Bop(Lt,iVar"val",LI 0),LW(0,64))], Mop(Cast F64,iVar"val")),Var("rd",FTy 5)]), qVar"state")))), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FCVT_S_L_def = Def ("dfn'FCVT_S_L",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRS",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPFromInt 32, TP[Var("r",rTy), Mop(Cast iTy, Apply (Call("GPR",ATy(qTy,F64),Var("rs",FTy 5)), qVar"state"))])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FCVT_S_LU_def = Def ("dfn'FCVT_S_LU",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRS",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPFromInt 32, TP[Var("r",rTy), Mop(Cast iTy, CC[LW(0,1), Apply (Call ("GPR",ATy(qTy,F64),Var("rs",FTy 5)), qVar"state")])])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FCVT_L_S_def = Def ("dfn'FCVT_L_S",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Let(Var("v",F32), Apply (Call("FPRS",ATy(qTy,F32),Var("rs",FTy 5)),qVar"state"), Let(iVar"val", Mop(ValOf,Mop(FPToInt 32,TP[Var("r",rTy),Var("v",F32)])), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[ITB([(Bop(Or,Mop(FPIsNan 32,Var("v",F32)), EQ(Var("v",F32),POSINF32)), Mop(Cast F64, Bop(Sub,Bop(Exp,LN 2,LN 63),LN 1))), (EQ(Var("v",F32),NEGINF32), Mop(Neg, Mop(Cast F64,Bop(Exp,LN 2,LN 63)))), (Bop(Gt,iVar"val", Bop(Sub,Bop(Exp,LI 2,LN 63),LI 1)), Mop(Cast F64, Bop(Sub,Bop(Exp,LN 2,LN 63),LN 1))), (Bop(Lt,iVar"val", Mop(Neg,Bop(Exp,LI 2,LN 63))), Mop(Neg, Mop(Cast F64,Bop(Exp,LN 2,LN 63))))], Mop(Cast F64,iVar"val")),Var("rd",FTy 5)]), qVar"state")))), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FCVT_LU_S_def = Def ("dfn'FCVT_LU_S",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Let(Var("v",F32), Apply (Call("FPRS",ATy(qTy,F32),Var("rs",FTy 5)),qVar"state"), Let(iVar"val", Mop(ValOf,Mop(FPToInt 32,TP[Var("r",rTy),Var("v",F32)])), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[ITB([(Bop(Or,Mop(FPIsNan 32,Var("v",F32)), EQ(Var("v",F32),POSINF32)), Mop(Cast F64, Bop(Sub,Bop(Exp,LN 2,LN 64),LN 1))), (EQ(Var("v",F32),NEGINF32),LW(0,64)), (Bop(Gt,iVar"val", Bop(Sub,Bop(Exp,LI 2,LN 64),LI 1)), Mop(Cast F64, Bop(Sub,Bop(Exp,LN 2,LN 64),LN 1))), (Bop(Lt,iVar"val",LI 0),LW(0,64))], Mop(Cast F64,iVar"val")),Var("rd",FTy 5)]), qVar"state")))), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FSGNJ_S_def = Def ("dfn'FSGNJ_S",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Apply (Call ("writeFPRS",ATy(qTy,qTy), TP[Var("rd",FTy 5), CC[Mop(Cast F1, Call ("FP32_Sign",bTy, Apply (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)), qVar"state"))), EX(Apply (Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)), qVar"state"),LN 30,LN 0,FTy 31)]]),qVar"state"))) ; val dfn'FSGNJN_S_def = Def ("dfn'FSGNJN_S",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Apply (Call ("writeFPRS",ATy(qTy,qTy), TP[Var("rd",FTy 5), CC[Mop(Cast F1, Mop(Not, Call ("FP32_Sign",bTy, Apply (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)), qVar"state")))), EX(Apply (Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)), qVar"state"),LN 30,LN 0,FTy 31)]]),qVar"state"))) ; val dfn'FSGNJX_S_def = Def ("dfn'FSGNJX_S",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F32), Apply(Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)),qVar"state"), Apply (Call ("writeFPRS",ATy(qTy,qTy), TP[Var("rd",FTy 5), CC[Bop(BXor, Mop(Cast F1, Call ("FP32_Sign",bTy, Apply (Call ("FPRS",ATy(qTy,F32), Var("rs2",FTy 5)),qVar"state"))), Mop(Cast F1,Call("FP32_Sign",bTy,Var("v",F32)))), EX(Var("v",F32),LN 30,LN 0,FTy 31)]]),qVar"state")))) ; val dfn'FMV_X_S_def = Def ("dfn'FMV_X_S",TP[Var("rd",FTy 5),Var("rs",FTy 5)], Close (qVar"state", Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, Apply (Call("FPRS",ATy(qTy,F32),Var("rs",FTy 5)), qVar"state")),Var("rd",FTy 5)]),qVar"state"))) ; val dfn'FMV_S_X_def = Def ("dfn'FMV_S_X",TP[Var("rd",FTy 5),Var("rs",FTy 5)], Close (qVar"state", Apply (Call ("writeFPRS",ATy(qTy,qTy), TP[Var("rd",FTy 5), EX(Apply (Call("GPR",ATy(qTy,F64),Var("rs",FTy 5)),qVar"state"), LN 31,LN 0,F32)]),qVar"state"))) ; val dfn'FEQ_S_def = Def ("dfn'FEQ_S",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F32), Apply(Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)),qVar"state"), Let(Var("v0",F32), Apply (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)),qVar"state"), ITE(Bop(Or,Call("FP32_IsSignalingNan",bTy,Var("v",F32)), Call("FP32_IsSignalingNan",bTy,Var("v0",F32))), Apply (Call("setFP_Invalid",ATy(qTy,qTy),LU), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[LW(0,64),Var("rd",FTy 5)]),qVar"state")), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[CS(Mop(FPCmp 32,TP[Var("v",F32),Var("v0",F32)]), [(binary_ieeeSyntax.LT_tm,LW(0,64)), (binary_ieeeSyntax.EQ_tm,LW(1,64)), (binary_ieeeSyntax.GT_tm,LW(0,64)), (binary_ieeeSyntax.UN_tm,LW(0,64))]), Var("rd",FTy 5)]),qVar"state")))))) ; val dfn'FLT_S_def = Def ("dfn'FLT_S",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F32), Apply(Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)),qVar"state"), Let(Var("v0",F32), Apply (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)),qVar"state"), ITE(Bop(Or,Mop(FPIsNan 32,Var("v",F32)), Mop(FPIsNan 32,Var("v0",F32))), Apply (Call("setFP_Invalid",ATy(qTy,qTy),LU), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[LW(0,64),Var("rd",FTy 5)]),qVar"state")), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[CS(Mop(FPCmp 32,TP[Var("v",F32),Var("v0",F32)]), [(binary_ieeeSyntax.LT_tm,LW(1,64)), (binary_ieeeSyntax.EQ_tm,LW(0,64)), (binary_ieeeSyntax.GT_tm,LW(0,64)), (binary_ieeeSyntax.UN_tm,LW(0,64))]), Var("rd",FTy 5)]),qVar"state")))))) ; val dfn'FLE_S_def = Def ("dfn'FLE_S",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F32), Apply(Call("FPRS",ATy(qTy,F32),Var("rs1",FTy 5)),qVar"state"), Let(Var("v0",F32), Apply (Call("FPRS",ATy(qTy,F32),Var("rs2",FTy 5)),qVar"state"), ITE(Bop(Or,Mop(FPIsNan 32,Var("v",F32)), Mop(FPIsNan 32,Var("v0",F32))), Apply (Call("setFP_Invalid",ATy(qTy,qTy),LU), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[LW(0,64),Var("rd",FTy 5)]),qVar"state")), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[CS(Mop(FPCmp 32,TP[Var("v",F32),Var("v0",F32)]), [(binary_ieeeSyntax.LT_tm,LW(1,64)), (binary_ieeeSyntax.EQ_tm,LW(1,64)), (binary_ieeeSyntax.GT_tm,LW(0,64)), (binary_ieeeSyntax.UN_tm,LW(0,64))]), Var("rd",FTy 5)]),qVar"state")))))) ; val dfn'FCLASS_S_def = Def ("dfn'FCLASS_S",TP[Var("rd",FTy 5),Var("rs",FTy 5)], Close (qVar"state", Let(TP[Var("v",F32),Var("s",PTy(FTy 10,qTy))], TP[Apply(Call("FPRS",ATy(qTy,F32),Var("rs",FTy 5)),qVar"state"), LW(0,10),qVar"state"], Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(Cast F64, BFI(LN 9,LN 9, Mop(Cast F1, EQ(Var("v",F32), Const("RV32_CanonicalNan",F32))), BFI(LN 8,LN 8, Mop(Cast F1, Call ("FP32_IsSignalingNan",bTy, Var("v",F32))), BFI(LN 7,LN 7, Mop(Cast F1,EQ(Var("v",F32),POSINF32)), BFI(LN 6,LN 6, Mop(Cast F1, Bop(And, Mop(Not, Call ("FP32_Sign",bTy, Var("v",F32))), Mop(FPIsNormal 32, Var("v",F32)))), BFI(LN 5,LN 5, Mop(Cast F1, Bop(And, Mop(Not, Call ("FP32_Sign",bTy, Var("v",F32))), Mop(FPIsSubnormal 32, Var("v",F32)))), BFI(LN 4,LN 4, Mop(Cast F1, EQ(Var("v",F32), POSZERO32)), BFI(LN 3,LN 3, Mop(Cast F1, EQ(Var("v",F32), NEGZERO32)), BFI(LN 2,LN 2, Mop(Cast F1, Bop(And, Call ("FP32_Sign", bTy, Var("v", F32)), Mop(FPIsSubnormal 32, Var("v", F32)))), BFI(LN 1,LN 1, Mop(Cast F1, Bop(And, Call ("FP32_Sign", bTy, Var("v", F32)), Mop(FPIsNormal 32, Var("v", F32)))), BFI(LN 0,LN 0, Mop(Cast F1, EQ(Var("v", F32), NEGINF32)), Mop(Fst, Var("s", PTy(FTy 10, qTy)))))))))))))), Var("rd",FTy 5)]),Mop(Snd,Var("s",PTy(FTy 10,qTy))))))) ; val dfn'FLD_def = Def ("dfn'FLD",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(Var("v",F64), Bop(Add, Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), Mop(SE F64,Var("offs",FTy 12))), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Read",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call ("write'FPRD",ATy(qTy,qTy), TP[Apply (Call ("rawReadData",ATy(qTy,F64), Var("pAddr",F64)),qVar"s"), Var("rd",FTy 5)]),qVar"s")), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Load_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))]))))) ; val dfn'FSD_def = Def ("dfn'FSD",TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("offs",FTy 12)], Close (qVar"state", Let(Var("v",F64), Bop(Add, Apply(Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), Mop(SE F64,Var("offs",FTy 12))), Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Data",CTy"fetchType"), LC("Write",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pAddr",F64)), Apply (Call ("rawWriteData",ATy(qTy,qTy), TP[Var("pAddr",F64), Apply (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"s"),LN 8]),qVar"s")), (LO F64, Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Store_AMO_Fault",CTy"ExceptionType"), Var("v",F64)]),qVar"s"))]))))) ; val dfn'FADD_D_def = Def ("dfn'FADD_D", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRD",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPAdd 64, TP[Var("r",rTy), Apply (Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"), Apply (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"state")])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FSUB_D_def = Def ("dfn'FSUB_D", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRD",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPSub 64, TP[Var("r",rTy), Apply (Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"), Apply (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"state")])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FMUL_D_def = Def ("dfn'FMUL_D", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRD",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPMul 64, TP[Var("r",rTy), Apply (Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"), Apply (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"state")])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FDIV_D_def = Def ("dfn'FDIV_D", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRD",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPDiv 64, TP[Var("r",rTy), Apply (Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"), Apply (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"state")])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FSQRT_D_def = Def ("dfn'FSQRT_D",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRD",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPSqrt 64, TP[Var("r",rTy), Apply (Call("FPRD",ATy(qTy,F64),Var("rs",FTy 5)), qVar"state")])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FMIN_D_def = Def ("dfn'FMIN_D",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), Let(Var("v0",F64), Apply (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)),qVar"state"), Apply (Call ("writeFPRD",ATy(qTy,qTy), TP[Var("rd",FTy 5), CS(Mop(FPCmp 64,TP[Var("v",F64),Var("v0",F64)]), [(binary_ieeeSyntax.LT_tm,Var("v",F64)), (binary_ieeeSyntax.EQ_tm,Var("v",F64)), (binary_ieeeSyntax.GT_tm,Var("v0",F64)), (binary_ieeeSyntax.UN_tm, ITB([(Bop(Or, Bop(Or, Call ("FP64_IsSignalingNan",bTy, Var("v",F64)), Call ("FP64_IsSignalingNan",bTy, Var("v0",F64))), Bop(And, EQ(Var("v",F64), Const ("RV64_CanonicalNan",F64)), EQ(Var("v0",F64), Const ("RV64_CanonicalNan",F64)))), Const("RV64_CanonicalNan",F64)), (EQ(Var("v",F64), Const("RV64_CanonicalNan",F64)), Var("v0",F64))],Var("v",F64)))])]), qVar"state"))))) ; val dfn'FMAX_D_def = Def ("dfn'FMAX_D",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), Let(Var("v0",F64), Apply (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)),qVar"state"), Apply (Call ("writeFPRD",ATy(qTy,qTy), TP[Var("rd",FTy 5), CS(Mop(FPCmp 64,TP[Var("v",F64),Var("v0",F64)]), [(binary_ieeeSyntax.LT_tm,Var("v0",F64)), (binary_ieeeSyntax.EQ_tm,Var("v0",F64)), (binary_ieeeSyntax.GT_tm,Var("v",F64)), (binary_ieeeSyntax.UN_tm, ITB([(Bop(Or, Bop(Or, Call ("FP64_IsSignalingNan",bTy, Var("v",F64)), Call ("FP64_IsSignalingNan",bTy, Var("v0",F64))), Bop(And, EQ(Var("v",F64), Const ("RV64_CanonicalNan",F64)), EQ(Var("v0",F64), Const ("RV64_CanonicalNan",F64)))), Const("RV64_CanonicalNan",F64)), (EQ(Var("v",F64), Const("RV64_CanonicalNan",F64)), Var("v0",F64))],Var("v",F64)))])]), qVar"state"))))) ; val dfn'FMADD_D_def = Def ("dfn'FMADD_D", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5), Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRD",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPAdd 64, TP[Var("r",rTy), Mop(FPMul 64, TP[Var("r",rTy), Apply (Call ("FPRD",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"state"), Apply (Call ("FPRD",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"state")]), Apply (Call("FPRD",ATy(qTy,F64),Var("rs3",FTy 5)), qVar"state")])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FMSUB_D_def = Def ("dfn'FMSUB_D", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5), Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRD",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPSub 64, TP[Var("r",rTy), Mop(FPMul 64, TP[Var("r",rTy), Apply (Call ("FPRD",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"state"), Apply (Call ("FPRD",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"state")]), Apply (Call("FPRD",ATy(qTy,F64),Var("rs3",FTy 5)), qVar"state")])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FNMADD_D_def = Def ("dfn'FNMADD_D", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5), Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRD",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPNeg 64, Mop(FPAdd 64, TP[Var("r",rTy), Mop(FPMul 64, TP[Var("r",rTy), Apply (Call ("FPRD",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"state"), Apply (Call ("FPRD",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"state")]), Apply (Call ("FPRD",ATy(qTy,F64),Var("rs3",FTy 5)), qVar"state")]))]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FNMSUB_D_def = Def ("dfn'FNMSUB_D", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5), Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRD",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPNeg 64, Mop(FPSub 64, TP[Var("r",rTy), Mop(FPMul 64, TP[Var("r",rTy), Apply (Call ("FPRD",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"state"), Apply (Call ("FPRD",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"state")]), Apply (Call ("FPRD",ATy(qTy,F64),Var("rs3",FTy 5)), qVar"state")]))]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FCVT_D_W_def = Def ("dfn'FCVT_D_W",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRD",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPFromInt 64, TP[Var("r",rTy), Mop(Cast iTy, EX(Apply (Call ("GPR",ATy(qTy,F64),Var("rs",FTy 5)), qVar"state"),LN 31,LN 0,F32))])]), qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FCVT_D_WU_def = Def ("dfn'FCVT_D_WU",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRD",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPFromInt 64, TP[Var("r",rTy), Mop(Cast iTy, CC[LW(0,1), EX(Apply (Call ("GPR",ATy(qTy,F64), Var("rs",FTy 5)),qVar"state"), LN 31,LN 0,F32)])])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FCVT_W_D_def = Def ("dfn'FCVT_W_D",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Let(Var("v",F64), Apply (Call("FPRD",ATy(qTy,F64),Var("rs",FTy 5)),qVar"state"), Let(iVar"val", Mop(ValOf,Mop(FPToInt 64,TP[Var("r",rTy),Var("v",F64)])), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[ITB([(Bop(Or,Mop(FPIsNan 64,Var("v",F64)), EQ(Var("v",F64),POSINF64)), Mop(Cast F64, Bop(Sub,Bop(Exp,LN 2,LN 31),LN 1))), (EQ(Var("v",F64),NEGINF64), Mop(Neg, Mop(Cast F64,Bop(Exp,LN 2,LN 31)))), (Bop(Gt,iVar"val", Bop(Sub,Bop(Exp,LI 2,LN 31),LI 1)), Mop(Cast F64, Bop(Sub,Bop(Exp,LN 2,LN 31),LN 1))), (Bop(Lt,iVar"val", Mop(Neg,Bop(Exp,LI 2,LN 31))), Mop(Neg, Mop(Cast F64,Bop(Exp,LN 2,LN 31))))], Mop(Cast F64,iVar"val")),Var("rd",FTy 5)]), qVar"state")))), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FCVT_WU_D_def = Def ("dfn'FCVT_WU_D",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Let(Var("v",F64), Apply (Call("FPRD",ATy(qTy,F64),Var("rs",FTy 5)),qVar"state"), Let(iVar"val", Mop(ValOf,Mop(FPToInt 64,TP[Var("r",rTy),Var("v",F64)])), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[ITB([(Bop(Or,Mop(FPIsNan 64,Var("v",F64)), EQ(Var("v",F64),POSINF64)), Mop(Cast F64, Bop(Sub,Bop(Exp,LN 2,LN 32),LN 1))), (EQ(Var("v",F64),NEGINF64),LW(0,64)), (Bop(Gt,iVar"val", Bop(Sub,Bop(Exp,LI 2,LN 32),LI 1)), Mop(Cast F64, Bop(Sub,Bop(Exp,LN 2,LN 32),LN 1))), (Bop(Lt,iVar"val",LI 0),LW(0,64))], Mop(Cast F64,iVar"val")),Var("rd",FTy 5)]), qVar"state")))), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FCVT_D_L_def = Def ("dfn'FCVT_D_L",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRD",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPFromInt 64, TP[Var("r",rTy), Mop(Cast iTy, Apply (Call("GPR",ATy(qTy,F64),Var("rs",FTy 5)), qVar"state"))])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FCVT_D_LU_def = Def ("dfn'FCVT_D_LU",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRD",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FPFromInt 64, TP[Var("r",rTy), Mop(Cast iTy, CC[LW(0,1), Apply (Call ("GPR",ATy(qTy,F64),Var("rs",FTy 5)), qVar"state")])])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FCVT_L_D_def = Def ("dfn'FCVT_L_D",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Let(Var("v",F64), Apply (Call("FPRD",ATy(qTy,F64),Var("rs",FTy 5)),qVar"state"), Let(iVar"val", Mop(ValOf,Mop(FPToInt 64,TP[Var("r",rTy),Var("v",F64)])), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[ITB([(Bop(Or,Mop(FPIsNan 64,Var("v",F64)), EQ(Var("v",F64),POSINF64)), Mop(Cast F64, Bop(Sub,Bop(Exp,LN 2,LN 63),LN 1))), (EQ(Var("v",F64),NEGINF64), Mop(Neg, Mop(Cast F64,Bop(Exp,LN 2,LN 63)))), (Bop(Gt,iVar"val", Bop(Sub,Bop(Exp,LI 2,LN 63),LI 1)), Mop(Cast F64, Bop(Sub,Bop(Exp,LN 2,LN 63),LN 1))), (Bop(Lt,iVar"val", Mop(Neg,Bop(Exp,LI 2,LN 63))), Mop(Neg, Mop(Cast F64,Bop(Exp,LN 2,LN 63))))], Mop(Cast F64,iVar"val")),Var("rd",FTy 5)]), qVar"state")))), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FCVT_LU_D_def = Def ("dfn'FCVT_LU_D",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Let(Var("v",F64), Apply (Call("FPRD",ATy(qTy,F64),Var("rs",FTy 5)),qVar"state"), Let(iVar"val", Mop(ValOf,Mop(FPToInt 64,TP[Var("r",rTy),Var("v",F64)])), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[ITB([(Bop(Or,Mop(FPIsNan 64,Var("v",F64)), EQ(Var("v",F64),POSINF64)), Mop(Cast F64, Bop(Sub,Bop(Exp,LN 2,LN 64),LN 1))), (EQ(Var("v",F64),NEGINF64),LW(0,64)), (Bop(Gt,iVar"val", Bop(Sub,Bop(Exp,LI 2,LN 64),LI 1)), Mop(Cast F64, Bop(Sub,Bop(Exp,LN 2,LN 64),LN 1))), (Bop(Lt,iVar"val",LI 0),LW(0,64))], Mop(Cast F64,iVar"val")),Var("rd",FTy 5)]), qVar"state")))), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FCVT_S_D_def = Def ("dfn'FCVT_S_D",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRS",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FP64To32, TP[Var("r",rTy), Apply (Call("FPRD",ATy(qTy,F64),Var("rs",FTy 5)), qVar"state")])]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FCVT_D_S_def = Def ("dfn'FCVT_D_S",TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("fprnd",FTy 3)], Close (qVar"state", CS(Apply (Call("round",ATy(qTy,OTy rTy),Var("fprnd",FTy 3)),qVar"state"), [(Mop(Some,Var("r",rTy)), Apply (Call ("writeFPRD",ATy(qTy,qTy), TP[Var("rd",FTy 5), Mop(FP32To64, Apply (Call("FPRS",ATy(qTy,F32),Var("rs",FTy 5)), qVar"state"))]),qVar"state")), (LO rTy, Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state"))]))) ; val dfn'FSGNJ_D_def = Def ("dfn'FSGNJ_D",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Apply (Call ("writeFPRD",ATy(qTy,qTy), TP[Var("rd",FTy 5), CC[Mop(Cast F1, Call ("FP64_Sign",bTy, Apply (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"state"))), EX(Apply (Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"),LN 62,LN 0,FTy 63)]]),qVar"state"))) ; val dfn'FSGNJN_D_def = Def ("dfn'FSGNJN_D",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Apply (Call ("writeFPRD",ATy(qTy,qTy), TP[Var("rd",FTy 5), CC[Mop(Cast F1, Mop(Not, Call ("FP64_Sign",bTy, Apply (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)), qVar"state")))), EX(Apply (Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"),LN 62,LN 0,FTy 63)]]),qVar"state"))) ; val dfn'FSGNJX_D_def = Def ("dfn'FSGNJX_D",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), Apply (Call ("writeFPRD",ATy(qTy,qTy), TP[Var("rd",FTy 5), CC[Bop(BXor, Mop(Cast F1, Call ("FP64_Sign",bTy, Apply (Call ("FPRD",ATy(qTy,F64), Var("rs2",FTy 5)),qVar"state"))), Mop(Cast F1,Call("FP64_Sign",bTy,Var("v",F64)))), EX(Var("v",F64),LN 62,LN 0,FTy 63)]]),qVar"state")))) ; val dfn'FMV_X_D_def = Def ("dfn'FMV_X_D",TP[Var("rd",FTy 5),Var("rs",FTy 5)], Close (qVar"state", Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(SE F64, Apply (Call("FPRD",ATy(qTy,F64),Var("rs",FTy 5)), qVar"state")),Var("rd",FTy 5)]),qVar"state"))) ; val dfn'FMV_D_X_def = Def ("dfn'FMV_D_X",TP[Var("rd",FTy 5),Var("rs",FTy 5)], Close (qVar"state", Apply (Call ("writeFPRD",ATy(qTy,qTy), TP[Var("rd",FTy 5), Apply(Call("GPR",ATy(qTy,F64),Var("rs",FTy 5)),qVar"state")]), qVar"state"))) ; val dfn'FEQ_D_def = Def ("dfn'FEQ_D",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), Let(Var("v0",F64), Apply (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)),qVar"state"), ITE(Bop(Or,Call("FP64_IsSignalingNan",bTy,Var("v",F64)), Call("FP64_IsSignalingNan",bTy,Var("v0",F64))), Apply (Call("setFP_Invalid",ATy(qTy,qTy),LU), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[LW(0,64),Var("rd",FTy 5)]),qVar"state")), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[CS(Mop(FPCmp 64,TP[Var("v",F64),Var("v0",F64)]), [(binary_ieeeSyntax.LT_tm,LW(0,64)), (binary_ieeeSyntax.EQ_tm,LW(1,64)), (binary_ieeeSyntax.GT_tm,LW(0,64)), (binary_ieeeSyntax.UN_tm,LW(0,64))]), Var("rd",FTy 5)]),qVar"state")))))) ; val dfn'FLT_D_def = Def ("dfn'FLT_D",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), Let(Var("v0",F64), Apply (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)),qVar"state"), ITE(Bop(Or,Mop(FPIsNan 64,Var("v",F64)), Mop(FPIsNan 64,Var("v0",F64))), Apply (Call("setFP_Invalid",ATy(qTy,qTy),LU), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[LW(0,64),Var("rd",FTy 5)]),qVar"state")), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[CS(Mop(FPCmp 64,TP[Var("v",F64),Var("v0",F64)]), [(binary_ieeeSyntax.LT_tm,LW(1,64)), (binary_ieeeSyntax.EQ_tm,LW(0,64)), (binary_ieeeSyntax.GT_tm,LW(0,64)), (binary_ieeeSyntax.UN_tm,LW(0,64))]), Var("rd",FTy 5)]),qVar"state")))))) ; val dfn'FLE_D_def = Def ("dfn'FLE_D",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], Close (qVar"state", Let(Var("v",F64), Apply(Call("FPRD",ATy(qTy,F64),Var("rs1",FTy 5)),qVar"state"), Let(Var("v0",F64), Apply (Call("FPRD",ATy(qTy,F64),Var("rs2",FTy 5)),qVar"state"), ITE(Bop(Or,Mop(FPIsNan 64,Var("v",F64)), Mop(FPIsNan 64,Var("v0",F64))), Apply (Call("setFP_Invalid",ATy(qTy,qTy),LU), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[LW(0,64),Var("rd",FTy 5)]),qVar"state")), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[CS(Mop(FPCmp 64,TP[Var("v",F64),Var("v0",F64)]), [(binary_ieeeSyntax.LT_tm,LW(1,64)), (binary_ieeeSyntax.EQ_tm,LW(1,64)), (binary_ieeeSyntax.GT_tm,LW(0,64)), (binary_ieeeSyntax.UN_tm,LW(0,64))]), Var("rd",FTy 5)]),qVar"state")))))) ; val dfn'FCLASS_D_def = Def ("dfn'FCLASS_D",TP[Var("rd",FTy 5),Var("rs",FTy 5)], Close (qVar"state", Let(TP[Var("v",F64),Var("s",PTy(FTy 10,qTy))], TP[Apply(Call("FPRD",ATy(qTy,F64),Var("rs",FTy 5)),qVar"state"), LW(0,10),qVar"state"], Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Mop(Cast F64, BFI(LN 9,LN 9, Mop(Cast F1, EQ(Var("v",F64), Const("RV64_CanonicalNan",F64))), BFI(LN 8,LN 8, Mop(Cast F1, Call ("FP64_IsSignalingNan",bTy, Var("v",F64))), BFI(LN 7,LN 7, Mop(Cast F1,EQ(Var("v",F64),POSINF64)), BFI(LN 6,LN 6, Mop(Cast F1, Bop(And, Mop(Not, Call ("FP64_Sign",bTy, Var("v",F64))), Mop(FPIsNormal 64, Var("v",F64)))), BFI(LN 5,LN 5, Mop(Cast F1, Bop(And, Mop(Not, Call ("FP64_Sign",bTy, Var("v",F64))), Mop(FPIsSubnormal 64, Var("v",F64)))), BFI(LN 4,LN 4, Mop(Cast F1, EQ(Var("v",F64), POSZERO64)), BFI(LN 3,LN 3, Mop(Cast F1, EQ(Var("v",F64), NEGZERO64)), BFI(LN 2,LN 2, Mop(Cast F1, Bop(And, Call ("FP64_Sign", bTy, Var("v", F64)), Mop(FPIsSubnormal 64, Var("v", F64)))), BFI(LN 1,LN 1, Mop(Cast F1, Bop(And, Call ("FP64_Sign", bTy, Var("v", F64)), Mop(FPIsNormal 64, Var("v", F64)))), BFI(LN 0,LN 0, Mop(Cast F1, EQ(Var("v", F64), NEGINF64)), Mop(Fst, Var("s", PTy(FTy 10, qTy)))))))))))))), Var("rd",FTy 5)]),Mop(Snd,Var("s",PTy(FTy 10,qTy))))))) ; val dfn'ECALL_def = Def ("dfn'ECALL",qVar"state", Apply(Call("signalEnvCall",ATy(qTy,qTy),LU),qVar"state")) ; val dfn'EBREAK_def = Def ("dfn'EBREAK",qVar"state", Apply (Call ("signalException",ATy(qTy,qTy), LC("Breakpoint",CTy"ExceptionType")),qVar"state")) ; val dfn'ERET_def = Def ("dfn'ERET",qVar"state", Apply (Call ("write'NextFetch",ATy(qTy,qTy), Mop(Some,Const("Ereturn",CTy"TransferControl"))),qVar"state")) ; val dfn'MRTS_def = Def ("dfn'MRTS",qVar"state", Let(TP[Var("v",CTy"SupervisorCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'SCSR",ATy(qTy,qTy), Rupd ("scause", TP[Apply (Const("SCSR",ATy(qTy,CTy"SupervisorCSR")), qVar"state"), Dest ("mcause",CTy"mcause", Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"state"))])),qVar"state"), TP[Apply(Const("SCSR",ATy(qTy,CTy"SupervisorCSR")),qVar"s0"), qVar"s0"]), Let(TP[Var("v",CTy"SupervisorCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'SCSR",ATy(qTy,qTy), Rupd ("sbadaddr", TP[Var("v",CTy"SupervisorCSR"), Dest ("mbadaddr",F64, Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"s"))])),qVar"s"), TP[Apply (Const("SCSR",ATy(qTy,CTy"SupervisorCSR")),qVar"s0"), qVar"s0"]), Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'SCSR",ATy(qTy,qTy), Rupd ("sepc", TP[Var("v",CTy"SupervisorCSR"), Dest ("mepc",F64, Apply (Const ("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"s"))])),qVar"s"), TP[Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s0"), qVar"s0"]), Apply (Call ("write'NextFetch",ATy(qTy,qTy), Mop(Some,Const("Mrts",CTy"TransferControl"))), Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mstatus", TP[Var("v",CTy"MachineCSR"), Rupd ("MPRV", TP[Dest ("mstatus",CTy"mstatus", Var("v",CTy"MachineCSR")), Call ("privLevel",FTy 2, LC("Supervisor",CTy"Privilege"))])])), qVar"s")))))) ; val dfn'WFI_def = Def0 ("dfn'WFI",LU) ; val checkCSROp_def = Def ("checkCSROp", TP[Var("csr",FTy 12),Var("rs1",FTy 5),Var("a",CTy"accessType")], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call ("is_CSR_defined",ATy(qTy,PTy(bTy,qTy)),Var("csr",FTy 12)), qVar"state"), TP[Bop(And,bVar"v", Call ("check_CSR_access",bTy, TP[Call("csrRW",FTy 2,Var("csr",FTy 12)), Call("csrPR",FTy 2,Var("csr",FTy 12)), Apply (Call("curPrivilege",ATy(qTy,CTy"Privilege"),LU), qVar"s"),Var("a",CTy"accessType")])),qVar"s"]))) ; val dfn'CSRRW_def = Def ("dfn'CSRRW",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call ("checkCSROp",ATy(qTy,PTy(bTy,qTy)), TP[Var("csr",FTy 12),Var("rs1",FTy 5), LC("Write",CTy"accessType")]),qVar"state"), ITE(bVar"v", Let(TP[Var("v",F64),qVar"s"], Apply (Call("CSR",ATy(qTy,PTy(F64,qTy)),Var("csr",FTy 12)), qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), Apply (Call ("writeCSR",ATy(qTy,qTy), TP[Var("csr",FTy 12), Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"s")]),qVar"s"))), Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"))))) ; val dfn'CSRRS_def = Def ("dfn'CSRRS",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call ("checkCSROp",ATy(qTy,PTy(bTy,qTy)), TP[Var("csr",FTy 12),Var("rs1",FTy 5), ITE(EQ(Var("rs1",FTy 5),LW(0,5)), LC("Read",CTy"accessType"), LC("Write",CTy"accessType"))]),qVar"state"), ITE(bVar"v", Let(TP[Var("v",F64),qVar"s"], Apply (Call("CSR",ATy(qTy,PTy(F64,qTy)),Var("csr",FTy 12)), qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), ITE(Mop(Not,EQ(Var("rs1",FTy 5),LW(0,5))), Apply (Call ("writeCSR",ATy(qTy,qTy), TP[Var("csr",FTy 12), Bop(BOr,Var("v",F64), Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s"))]), qVar"s"),qVar"s"))), Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"))))) ; val dfn'CSRRC_def = Def ("dfn'CSRRC",TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call ("checkCSROp",ATy(qTy,PTy(bTy,qTy)), TP[Var("csr",FTy 12),Var("rs1",FTy 5), ITE(EQ(Var("rs1",FTy 5),LW(0,5)), LC("Read",CTy"accessType"), LC("Write",CTy"accessType"))]),qVar"state"), ITE(bVar"v", Let(TP[Var("v",F64),qVar"s"], Apply (Call("CSR",ATy(qTy,PTy(F64,qTy)),Var("csr",FTy 12)), qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), ITE(Mop(Not,EQ(Var("rs1",FTy 5),LW(0,5))), Apply (Call ("writeCSR",ATy(qTy,qTy), TP[Var("csr",FTy 12), Bop(BAnd,Var("v",F64), Mop(BNot, Apply (Call ("GPR",ATy(qTy,F64), Var("rs1",FTy 5)),qVar"s")))]), qVar"s"),qVar"s"))), Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"))))) ; val dfn'CSRRWI_def = Def ("dfn'CSRRWI",TP[Var("rd",FTy 5),Var("zimm",FTy 5),Var("csr",FTy 12)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call ("checkCSROp",ATy(qTy,PTy(bTy,qTy)), TP[Var("csr",FTy 12),Var("zimm",FTy 5), ITE(EQ(Var("zimm",FTy 5),LW(0,5)), LC("Read",CTy"accessType"), LC("Write",CTy"accessType"))]),qVar"state"), ITE(bVar"v", Let(TP[Var("v",F64),qVar"s"], Apply (Call("CSR",ATy(qTy,PTy(F64,qTy)),Var("csr",FTy 12)), qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), ITE(Mop(Not,EQ(Var("zimm",FTy 5),LW(0,5))), Apply (Call ("writeCSR",ATy(qTy,qTy), TP[Var("csr",FTy 12), Mop(Cast F64,Var("zimm",FTy 5))]), qVar"s"),qVar"s"))), Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"))))) ; val dfn'CSRRSI_def = Def ("dfn'CSRRSI",TP[Var("rd",FTy 5),Var("zimm",FTy 5),Var("csr",FTy 12)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call ("checkCSROp",ATy(qTy,PTy(bTy,qTy)), TP[Var("csr",FTy 12),Var("zimm",FTy 5), ITE(EQ(Var("zimm",FTy 5),LW(0,5)), LC("Read",CTy"accessType"), LC("Write",CTy"accessType"))]),qVar"state"), ITE(bVar"v", Let(TP[Var("v",F64),qVar"s"], Apply (Call("CSR",ATy(qTy,PTy(F64,qTy)),Var("csr",FTy 12)), qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), ITE(Mop(Not,EQ(Var("zimm",FTy 5),LW(0,5))), Apply (Call ("writeCSR",ATy(qTy,qTy), TP[Var("csr",FTy 12), Bop(BOr,Var("v",F64), Mop(Cast F64,Var("zimm",FTy 5)))]), qVar"s"),qVar"s"))), Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"))))) ; val dfn'CSRRCI_def = Def ("dfn'CSRRCI",TP[Var("rd",FTy 5),Var("zimm",FTy 5),Var("csr",FTy 12)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call ("checkCSROp",ATy(qTy,PTy(bTy,qTy)), TP[Var("csr",FTy 12),Var("zimm",FTy 5), ITE(EQ(Var("zimm",FTy 5),LW(0,5)), LC("Read",CTy"accessType"), LC("Write",CTy"accessType"))]),qVar"state"), ITE(bVar"v", Let(TP[Var("v",F64),qVar"s"], Apply (Call("CSR",ATy(qTy,PTy(F64,qTy)),Var("csr",FTy 12)), qVar"s"), Apply (Call ("write'GPR",ATy(qTy,qTy), TP[Var("v",F64),Var("rd",FTy 5)]), ITE(Mop(Not,EQ(Var("zimm",FTy 5),LW(0,5))), Apply (Call ("writeCSR",ATy(qTy,qTy), TP[Var("csr",FTy 12), Bop(BAnd,Var("v",F64), Mop(BNot, Mop(Cast F64,Var("zimm",FTy 5))))]), qVar"s"),qVar"s"))), Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"s"))))) ; val dfn'SFENCE_VM_def = Def ("dfn'SFENCE_VM",Var("rs1",FTy 5), Close (qVar"state", Apply (Call ("write'TLB",ATy(qTy,qTy), Call ("flushTLB",ATy(F4,OTy(CTy"TLBEntry")), TP[Apply(Call("curASID",ATy(qTy,FTy 6),LU),qVar"state"), ITE(EQ(Var("rs1",FTy 5),LW(0,5)),LO F64, Mop(Some, Apply (Call("GPR",ATy(qTy,F64),Var("rs1",FTy 5)), qVar"state"))), Apply (Const("TLB",ATy(qTy,ATy(F4,OTy(CTy"TLBEntry")))), qVar"state")])),qVar"state"))) ; val dfn'UnknownInstruction_def = Def ("dfn'UnknownInstruction",qVar"state", Apply (Call ("signalException",ATy(qTy,qTy), LC("Illegal_Instr",CTy"ExceptionType")),qVar"state")) ; val dfn'FETCH_MISALIGNED_def = Def ("dfn'FETCH_MISALIGNED",Var("addr",F64), Close (qVar"state", Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Fetch_Misaligned",CTy"ExceptionType"),Var("addr",F64)]), qVar"state"))) ; val dfn'FETCH_FAULT_def = Def ("dfn'FETCH_FAULT",Var("addr",F64), Close (qVar"state", Apply (Call ("signalAddressException",ATy(qTy,qTy), TP[LC("Fetch_Fault",CTy"ExceptionType"),Var("addr",F64)]), qVar"state"))) ; val Run_def = Def ("Run",Var("v0",CTy"instruction"), Close (qVar"state", CS(Var("v0",CTy"instruction"), [(Const("UnknownInstruction",CTy"instruction"), Apply(Const("dfn'UnknownInstruction",ATy(qTy,qTy)),qVar"state")), (Call ("FENCE",CTy"instruction", Var("v170",PTy(FTy 5,PTy(FTy 5,PTy(F4,F4))))),qVar"state"), (Call ("FENCE_I",CTy"instruction", Var("v171",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state"), (Call("AMO",CTy"instruction",Var("v1",CTy"AMO")), CS(Var("v1",CTy"AMO"), [(Call ("AMOADD_D",CTy"AMO", Var("v2",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'AMOADD_D",ATy(qTy,qTy), Var("v2",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("AMOADD_W",CTy"AMO", Var("v3",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'AMOADD_W",ATy(qTy,qTy), Var("v3",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("AMOAND_D",CTy"AMO", Var("v4",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'AMOAND_D",ATy(qTy,qTy), Var("v4",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("AMOAND_W",CTy"AMO", Var("v5",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'AMOAND_W",ATy(qTy,qTy), Var("v5",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("AMOMAXU_D",CTy"AMO", Var("v6",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'AMOMAXU_D",ATy(qTy,qTy), Var("v6",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("AMOMAXU_W",CTy"AMO", Var("v7",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'AMOMAXU_W",ATy(qTy,qTy), Var("v7",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("AMOMAX_D",CTy"AMO", Var("v8",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'AMOMAX_D",ATy(qTy,qTy), Var("v8",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("AMOMAX_W",CTy"AMO", Var("v9",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'AMOMAX_W",ATy(qTy,qTy), Var("v9",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("AMOMINU_D",CTy"AMO", Var("v10",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'AMOMINU_D",ATy(qTy,qTy), Var("v10", PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("AMOMINU_W",CTy"AMO", Var("v11",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'AMOMINU_W",ATy(qTy,qTy), Var("v11", PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("AMOMIN_D",CTy"AMO", Var("v12",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'AMOMIN_D",ATy(qTy,qTy), Var("v12", PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("AMOMIN_W",CTy"AMO", Var("v13",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'AMOMIN_W",ATy(qTy,qTy), Var("v13", PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("AMOOR_D",CTy"AMO", Var("v14",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'AMOOR_D",ATy(qTy,qTy), Var("v14", PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("AMOOR_W",CTy"AMO", Var("v15",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'AMOOR_W",ATy(qTy,qTy), Var("v15", PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("AMOSWAP_D",CTy"AMO", Var("v16",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'AMOSWAP_D",ATy(qTy,qTy), Var("v16", PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("AMOSWAP_W",CTy"AMO", Var("v17",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'AMOSWAP_W",ATy(qTy,qTy), Var("v17", PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("AMOXOR_D",CTy"AMO", Var("v18",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'AMOXOR_D",ATy(qTy,qTy), Var("v18", PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("AMOXOR_W",CTy"AMO", Var("v19",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'AMOXOR_W",ATy(qTy,qTy), Var("v19", PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("LR_D",CTy"AMO", Var("v20",PTy(F1,PTy(F1,PTy(FTy 5,FTy 5))))), Apply (Call ("dfn'LR_D",ATy(qTy,qTy), Var("v20",PTy(F1,PTy(F1,PTy(FTy 5,FTy 5))))), qVar"state")), (Call ("LR_W",CTy"AMO", Var("v21",PTy(F1,PTy(F1,PTy(FTy 5,FTy 5))))), Apply (Call ("dfn'LR_W",ATy(qTy,qTy), Var("v21",PTy(F1,PTy(F1,PTy(FTy 5,FTy 5))))), qVar"state")), (Call ("SC_D",CTy"AMO", Var("v22",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'SC_D",ATy(qTy,qTy), Var("v22", PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("SC_W",CTy"AMO", Var("v23",PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'SC_W",ATy(qTy,qTy), Var("v23", PTy(F1,PTy(F1,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state"))])), (Call("ArithI",CTy"instruction",Var("v24",CTy"ArithI")), CS(Var("v24",CTy"ArithI"), [(Call ("ADDI",CTy"ArithI", Var("v25",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'ADDI",ATy(qTy,qTy), Var("v25",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")), (Call ("ADDIW",CTy"ArithI", Var("v26",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'ADDIW",ATy(qTy,qTy), Var("v26",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")), (Call ("ANDI",CTy"ArithI", Var("v27",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'ANDI",ATy(qTy,qTy), Var("v27",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")), (Call("AUIPC",CTy"ArithI",Var("v28",PTy(FTy 5,FTy 20))), Apply (Call ("dfn'AUIPC",ATy(qTy,qTy), Var("v28",PTy(FTy 5,FTy 20))),qVar"state")), (Call("LUI",CTy"ArithI",Var("v29",PTy(FTy 5,FTy 20))), Apply (Call ("dfn'LUI",ATy(qTy,qTy),Var("v29",PTy(FTy 5,FTy 20))), qVar"state")), (Call ("ORI",CTy"ArithI", Var("v30",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'ORI",ATy(qTy,qTy), Var("v30",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")), (Call ("SLTI",CTy"ArithI", Var("v31",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'SLTI",ATy(qTy,qTy), Var("v31",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")), (Call ("SLTIU",CTy"ArithI", Var("v32",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'SLTIU",ATy(qTy,qTy), Var("v32",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")), (Call ("XORI",CTy"ArithI", Var("v33",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'XORI",ATy(qTy,qTy), Var("v33",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state"))])), (Call("ArithR",CTy"instruction",Var("v34",CTy"ArithR")), CS(Var("v34",CTy"ArithR"), [(Call ("ADD",CTy"ArithR", Var("v35",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'ADD",ATy(qTy,qTy), Var("v35",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("ADDW",CTy"ArithR", Var("v36",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'ADDW",ATy(qTy,qTy), Var("v36",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("AND",CTy"ArithR", Var("v37",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'AND",ATy(qTy,qTy), Var("v37",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("OR",CTy"ArithR",Var("v38",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'OR",ATy(qTy,qTy), Var("v38",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("SLT",CTy"ArithR", Var("v39",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'SLT",ATy(qTy,qTy), Var("v39",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("SLTU",CTy"ArithR", Var("v40",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'SLTU",ATy(qTy,qTy), Var("v40",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("SUB",CTy"ArithR", Var("v41",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'SUB",ATy(qTy,qTy), Var("v41",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("SUBW",CTy"ArithR", Var("v42",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'SUBW",ATy(qTy,qTy), Var("v42",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("XOR",CTy"ArithR", Var("v43",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'XOR",ATy(qTy,qTy), Var("v43",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state"))])), (Call("Branch",CTy"instruction",Var("v44",CTy"Branch")), CS(Var("v44",CTy"Branch"), [(Call ("BEQ",CTy"Branch", Var("v45",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'BEQ",ATy(qTy,qTy), Var("v45",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")), (Call ("BGE",CTy"Branch", Var("v46",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'BGE",ATy(qTy,qTy), Var("v46",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")), (Call ("BGEU",CTy"Branch", Var("v47",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'BGEU",ATy(qTy,qTy), Var("v47",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")), (Call ("BLT",CTy"Branch", Var("v48",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'BLT",ATy(qTy,qTy), Var("v48",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")), (Call ("BLTU",CTy"Branch", Var("v49",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'BLTU",ATy(qTy,qTy), Var("v49",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")), (Call ("BNE",CTy"Branch", Var("v50",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'BNE",ATy(qTy,qTy), Var("v50",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state")), (Call("JAL",CTy"Branch",Var("v51",PTy(FTy 5,FTy 20))), Apply (Call ("dfn'JAL",ATy(qTy,qTy),Var("v51",PTy(FTy 5,FTy 20))), qVar"state")), (Call ("JALR",CTy"Branch", Var("v52",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'JALR",ATy(qTy,qTy), Var("v52",PTy(FTy 5,PTy(FTy 5,FTy 12)))),qVar"state"))])), (Call("FArith",CTy"instruction",Var("v53",CTy"FArith")), CS(Var("v53",CTy"FArith"), [(Call ("FADD_D",CTy"FArith", Var("v54",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))), Apply (Call ("dfn'FADD_D",ATy(qTy,qTy), Var("v54",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))), qVar"state")), (Call ("FADD_S",CTy"FArith", Var("v55",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))), Apply (Call ("dfn'FADD_S",ATy(qTy,qTy), Var("v55",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))), qVar"state")), (Call ("FDIV_D",CTy"FArith", Var("v56",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))), Apply (Call ("dfn'FDIV_D",ATy(qTy,qTy), Var("v56",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))), qVar"state")), (Call ("FDIV_S",CTy"FArith", Var("v57",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))), Apply (Call ("dfn'FDIV_S",ATy(qTy,qTy), Var("v57",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))), qVar"state")), (Call ("FEQ_D",CTy"FArith", Var("v58",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'FEQ_D",ATy(qTy,qTy), Var("v58",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("FEQ_S",CTy"FArith", Var("v59",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'FEQ_S",ATy(qTy,qTy), Var("v59",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("FLE_D",CTy"FArith", Var("v60",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'FLE_D",ATy(qTy,qTy), Var("v60",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("FLE_S",CTy"FArith", Var("v61",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'FLE_S",ATy(qTy,qTy), Var("v61",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("FLT_D",CTy"FArith", Var("v62",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'FLT_D",ATy(qTy,qTy), Var("v62",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("FLT_S",CTy"FArith", Var("v63",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'FLT_S",ATy(qTy,qTy), Var("v63",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("FMADD_D",CTy"FArith", Var("v64", PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))), Apply (Call ("dfn'FMADD_D",ATy(qTy,qTy), Var("v64", PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))), qVar"state")), (Call ("FMADD_S",CTy"FArith", Var("v65", PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))), Apply (Call ("dfn'FMADD_S",ATy(qTy,qTy), Var("v65", PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))), qVar"state")), (Call ("FMAX_D",CTy"FArith", Var("v66",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'FMAX_D",ATy(qTy,qTy), Var("v66",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("FMAX_S",CTy"FArith", Var("v67",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'FMAX_S",ATy(qTy,qTy), Var("v67",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("FMIN_D",CTy"FArith", Var("v68",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'FMIN_D",ATy(qTy,qTy), Var("v68",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("FMIN_S",CTy"FArith", Var("v69",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'FMIN_S",ATy(qTy,qTy), Var("v69",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("FMSUB_D",CTy"FArith", Var("v70", PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))), Apply (Call ("dfn'FMSUB_D",ATy(qTy,qTy), Var("v70", PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))), qVar"state")), (Call ("FMSUB_S",CTy"FArith", Var("v71", PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))), Apply (Call ("dfn'FMSUB_S",ATy(qTy,qTy), Var("v71", PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))), qVar"state")), (Call ("FMUL_D",CTy"FArith", Var("v72",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))), Apply (Call ("dfn'FMUL_D",ATy(qTy,qTy), Var("v72",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))), qVar"state")), (Call ("FMUL_S",CTy"FArith", Var("v73",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))), Apply (Call ("dfn'FMUL_S",ATy(qTy,qTy), Var("v73",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))), qVar"state")), (Call ("FNMADD_D",CTy"FArith", Var("v74", PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))), Apply (Call ("dfn'FNMADD_D",ATy(qTy,qTy), Var("v74", PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))), qVar"state")), (Call ("FNMADD_S",CTy"FArith", Var("v75", PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))), Apply (Call ("dfn'FNMADD_S",ATy(qTy,qTy), Var("v75", PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))), qVar"state")), (Call ("FNMSUB_D",CTy"FArith", Var("v76", PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))), Apply (Call ("dfn'FNMSUB_D",ATy(qTy,qTy), Var("v76", PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))), qVar"state")), (Call ("FNMSUB_S",CTy"FArith", Var("v77", PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))), Apply (Call ("dfn'FNMSUB_S",ATy(qTy,qTy), Var("v77", PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3)))))), qVar"state")), (Call ("FSQRT_D",CTy"FArith", Var("v78",PTy(FTy 5,PTy(FTy 5,FTy 3)))), Apply (Call ("dfn'FSQRT_D",ATy(qTy,qTy), Var("v78",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")), (Call ("FSQRT_S",CTy"FArith", Var("v79",PTy(FTy 5,PTy(FTy 5,FTy 3)))), Apply (Call ("dfn'FSQRT_S",ATy(qTy,qTy), Var("v79",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")), (Call ("FSUB_D",CTy"FArith", Var("v80",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))), Apply (Call ("dfn'FSUB_D",ATy(qTy,qTy), Var("v80",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))), qVar"state")), (Call ("FSUB_S",CTy"FArith", Var("v81",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))), Apply (Call ("dfn'FSUB_S",ATy(qTy,qTy), Var("v81",PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 3))))), qVar"state"))])), (Call("FConv",CTy"instruction",Var("v82",CTy"FConv")), CS(Var("v82",CTy"FConv"), [(Call("FCLASS_D",CTy"FConv",Var("v83",PTy(FTy 5,FTy 5))), Apply (Call ("dfn'FCLASS_D",ATy(qTy,qTy), Var("v83",PTy(FTy 5,FTy 5))),qVar"state")), (Call("FCLASS_S",CTy"FConv",Var("v84",PTy(FTy 5,FTy 5))), Apply (Call ("dfn'FCLASS_S",ATy(qTy,qTy), Var("v84",PTy(FTy 5,FTy 5))),qVar"state")), (Call ("FCVT_D_L",CTy"FConv", Var("v85",PTy(FTy 5,PTy(FTy 5,FTy 3)))), Apply (Call ("dfn'FCVT_D_L",ATy(qTy,qTy), Var("v85",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")), (Call ("FCVT_D_LU",CTy"FConv", Var("v86",PTy(FTy 5,PTy(FTy 5,FTy 3)))), Apply (Call ("dfn'FCVT_D_LU",ATy(qTy,qTy), Var("v86",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")), (Call ("FCVT_D_S",CTy"FConv", Var("v87",PTy(FTy 5,PTy(FTy 5,FTy 3)))), Apply (Call ("dfn'FCVT_D_S",ATy(qTy,qTy), Var("v87",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")), (Call ("FCVT_D_W",CTy"FConv", Var("v88",PTy(FTy 5,PTy(FTy 5,FTy 3)))), Apply (Call ("dfn'FCVT_D_W",ATy(qTy,qTy), Var("v88",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")), (Call ("FCVT_D_WU",CTy"FConv", Var("v89",PTy(FTy 5,PTy(FTy 5,FTy 3)))), Apply (Call ("dfn'FCVT_D_WU",ATy(qTy,qTy), Var("v89",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")), (Call ("FCVT_LU_D",CTy"FConv", Var("v90",PTy(FTy 5,PTy(FTy 5,FTy 3)))), Apply (Call ("dfn'FCVT_LU_D",ATy(qTy,qTy), Var("v90",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")), (Call ("FCVT_LU_S",CTy"FConv", Var("v91",PTy(FTy 5,PTy(FTy 5,FTy 3)))), Apply (Call ("dfn'FCVT_LU_S",ATy(qTy,qTy), Var("v91",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")), (Call ("FCVT_L_D",CTy"FConv", Var("v92",PTy(FTy 5,PTy(FTy 5,FTy 3)))), Apply (Call ("dfn'FCVT_L_D",ATy(qTy,qTy), Var("v92",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")), (Call ("FCVT_L_S",CTy"FConv", Var("v93",PTy(FTy 5,PTy(FTy 5,FTy 3)))), Apply (Call ("dfn'FCVT_L_S",ATy(qTy,qTy), Var("v93",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")), (Call ("FCVT_S_D",CTy"FConv", Var("v94",PTy(FTy 5,PTy(FTy 5,FTy 3)))), Apply (Call ("dfn'FCVT_S_D",ATy(qTy,qTy), Var("v94",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")), (Call ("FCVT_S_L",CTy"FConv", Var("v95",PTy(FTy 5,PTy(FTy 5,FTy 3)))), Apply (Call ("dfn'FCVT_S_L",ATy(qTy,qTy), Var("v95",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")), (Call ("FCVT_S_LU",CTy"FConv", Var("v96",PTy(FTy 5,PTy(FTy 5,FTy 3)))), Apply (Call ("dfn'FCVT_S_LU",ATy(qTy,qTy), Var("v96",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")), (Call ("FCVT_S_W",CTy"FConv", Var("v97",PTy(FTy 5,PTy(FTy 5,FTy 3)))), Apply (Call ("dfn'FCVT_S_W",ATy(qTy,qTy), Var("v97",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")), (Call ("FCVT_S_WU",CTy"FConv", Var("v98",PTy(FTy 5,PTy(FTy 5,FTy 3)))), Apply (Call ("dfn'FCVT_S_WU",ATy(qTy,qTy), Var("v98",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")), (Call ("FCVT_WU_D",CTy"FConv", Var("v99",PTy(FTy 5,PTy(FTy 5,FTy 3)))), Apply (Call ("dfn'FCVT_WU_D",ATy(qTy,qTy), Var("v99",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")), (Call ("FCVT_WU_S",CTy"FConv", Var("v100",PTy(FTy 5,PTy(FTy 5,FTy 3)))), Apply (Call ("dfn'FCVT_WU_S",ATy(qTy,qTy), Var("v100",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")), (Call ("FCVT_W_D",CTy"FConv", Var("v101",PTy(FTy 5,PTy(FTy 5,FTy 3)))), Apply (Call ("dfn'FCVT_W_D",ATy(qTy,qTy), Var("v101",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")), (Call ("FCVT_W_S",CTy"FConv", Var("v102",PTy(FTy 5,PTy(FTy 5,FTy 3)))), Apply (Call ("dfn'FCVT_W_S",ATy(qTy,qTy), Var("v102",PTy(FTy 5,PTy(FTy 5,FTy 3)))),qVar"state")), (Call("FMV_D_X",CTy"FConv",Var("v103",PTy(FTy 5,FTy 5))), Apply (Call ("dfn'FMV_D_X",ATy(qTy,qTy), Var("v103",PTy(FTy 5,FTy 5))),qVar"state")), (Call("FMV_S_X",CTy"FConv",Var("v104",PTy(FTy 5,FTy 5))), Apply (Call ("dfn'FMV_S_X",ATy(qTy,qTy), Var("v104",PTy(FTy 5,FTy 5))),qVar"state")), (Call("FMV_X_D",CTy"FConv",Var("v105",PTy(FTy 5,FTy 5))), Apply (Call ("dfn'FMV_X_D",ATy(qTy,qTy), Var("v105",PTy(FTy 5,FTy 5))),qVar"state")), (Call("FMV_X_S",CTy"FConv",Var("v106",PTy(FTy 5,FTy 5))), Apply (Call ("dfn'FMV_X_S",ATy(qTy,qTy), Var("v106",PTy(FTy 5,FTy 5))),qVar"state")), (Call ("FSGNJN_D",CTy"FConv", Var("v107",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'FSGNJN_D",ATy(qTy,qTy), Var("v107",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("FSGNJN_S",CTy"FConv", Var("v108",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'FSGNJN_S",ATy(qTy,qTy), Var("v108",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("FSGNJX_D",CTy"FConv", Var("v109",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'FSGNJX_D",ATy(qTy,qTy), Var("v109",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("FSGNJX_S",CTy"FConv", Var("v110",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'FSGNJX_S",ATy(qTy,qTy), Var("v110",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("FSGNJ_D",CTy"FConv", Var("v111",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'FSGNJ_D",ATy(qTy,qTy), Var("v111",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("FSGNJ_S",CTy"FConv", Var("v112",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'FSGNJ_S",ATy(qTy,qTy), Var("v112",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state"))])), (Call("FPLoad",CTy"instruction",Var("v113",CTy"FPLoad")), CS(Var("v113",CTy"FPLoad"), [(Call ("FLD",CTy"FPLoad", Var("v114",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'FLD",ATy(qTy,qTy), Var("v114",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state")), (Call ("FLW",CTy"FPLoad", Var("v115",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'FLW",ATy(qTy,qTy), Var("v115",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state"))])), (Call("FPStore",CTy"instruction",Var("v116",CTy"FPStore")), CS(Var("v116",CTy"FPStore"), [(Call ("FSD",CTy"FPStore", Var("v117",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'FSD",ATy(qTy,qTy), Var("v117",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state")), (Call ("FSW",CTy"FPStore", Var("v118",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'FSW",ATy(qTy,qTy), Var("v118",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state"))])), (Call("Internal",CTy"instruction",Var("v119",CTy"Internal")), CS(Var("v119",CTy"Internal"), [(Call("FETCH_FAULT",CTy"Internal",Var("v120",F64)), Apply (Call("dfn'FETCH_FAULT",ATy(qTy,qTy),Var("v120",F64)), qVar"state")), (Call("FETCH_MISALIGNED",CTy"Internal",Var("v121",F64)), Apply (Call ("dfn'FETCH_MISALIGNED",ATy(qTy,qTy),Var("v121",F64)), qVar"state"))])), (Call("Load",CTy"instruction",Var("v122",CTy"Load")), CS(Var("v122",CTy"Load"), [(Call ("LB",CTy"Load",Var("v123",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'LB",ATy(qTy,qTy), Var("v123",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state")), (Call ("LBU",CTy"Load", Var("v124",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'LBU",ATy(qTy,qTy), Var("v124",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state")), (Call ("LD",CTy"Load",Var("v125",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'LD",ATy(qTy,qTy), Var("v125",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state")), (Call ("LH",CTy"Load",Var("v126",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'LH",ATy(qTy,qTy), Var("v126",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state")), (Call ("LHU",CTy"Load", Var("v127",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'LHU",ATy(qTy,qTy), Var("v127",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state")), (Call ("LW",CTy"Load",Var("v128",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'LW",ATy(qTy,qTy), Var("v128",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state")), (Call ("LWU",CTy"Load", Var("v129",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'LWU",ATy(qTy,qTy), Var("v129",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state"))])), (Call("MulDiv",CTy"instruction",Var("v130",CTy"MulDiv")), CS(Var("v130",CTy"MulDiv"), [(Call ("DIV",CTy"MulDiv", Var("v131",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'DIV",ATy(qTy,qTy), Var("v131",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("DIVU",CTy"MulDiv", Var("v132",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'DIVU",ATy(qTy,qTy), Var("v132",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("DIVUW",CTy"MulDiv", Var("v133",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'DIVUW",ATy(qTy,qTy), Var("v133",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("DIVW",CTy"MulDiv", Var("v134",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'DIVW",ATy(qTy,qTy), Var("v134",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("MUL",CTy"MulDiv", Var("v135",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'MUL",ATy(qTy,qTy), Var("v135",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("MULH",CTy"MulDiv", Var("v136",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'MULH",ATy(qTy,qTy), Var("v136",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("MULHSU",CTy"MulDiv", Var("v137",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'MULHSU",ATy(qTy,qTy), Var("v137",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("MULHU",CTy"MulDiv", Var("v138",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'MULHU",ATy(qTy,qTy), Var("v138",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("MULW",CTy"MulDiv", Var("v139",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'MULW",ATy(qTy,qTy), Var("v139",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("REM",CTy"MulDiv", Var("v140",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'REM",ATy(qTy,qTy), Var("v140",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("REMU",CTy"MulDiv", Var("v141",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'REMU",ATy(qTy,qTy), Var("v141",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("REMUW",CTy"MulDiv", Var("v142",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'REMUW",ATy(qTy,qTy), Var("v142",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("REMW",CTy"MulDiv", Var("v143",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'REMW",ATy(qTy,qTy), Var("v143",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state"))])), (Call("Shift",CTy"instruction",Var("v144",CTy"Shift")), CS(Var("v144",CTy"Shift"), [(Call ("SLL",CTy"Shift", Var("v145",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'SLL",ATy(qTy,qTy), Var("v145",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("SLLI",CTy"Shift", Var("v146",PTy(FTy 5,PTy(FTy 5,FTy 6)))), Apply (Call ("dfn'SLLI",ATy(qTy,qTy), Var("v146",PTy(FTy 5,PTy(FTy 5,FTy 6)))),qVar"state")), (Call ("SLLIW",CTy"Shift", Var("v147",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'SLLIW",ATy(qTy,qTy), Var("v147",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("SLLW",CTy"Shift", Var("v148",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'SLLW",ATy(qTy,qTy), Var("v148",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("SRA",CTy"Shift", Var("v149",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'SRA",ATy(qTy,qTy), Var("v149",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("SRAI",CTy"Shift", Var("v150",PTy(FTy 5,PTy(FTy 5,FTy 6)))), Apply (Call ("dfn'SRAI",ATy(qTy,qTy), Var("v150",PTy(FTy 5,PTy(FTy 5,FTy 6)))),qVar"state")), (Call ("SRAIW",CTy"Shift", Var("v151",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'SRAIW",ATy(qTy,qTy), Var("v151",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("SRAW",CTy"Shift", Var("v152",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'SRAW",ATy(qTy,qTy), Var("v152",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("SRL",CTy"Shift", Var("v153",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'SRL",ATy(qTy,qTy), Var("v153",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("SRLI",CTy"Shift", Var("v154",PTy(FTy 5,PTy(FTy 5,FTy 6)))), Apply (Call ("dfn'SRLI",ATy(qTy,qTy), Var("v154",PTy(FTy 5,PTy(FTy 5,FTy 6)))),qVar"state")), (Call ("SRLIW",CTy"Shift", Var("v155",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'SRLIW",ATy(qTy,qTy), Var("v155",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("SRLW",CTy"Shift", Var("v156",PTy(FTy 5,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'SRLW",ATy(qTy,qTy), Var("v156",PTy(FTy 5,PTy(FTy 5,FTy 5)))),qVar"state"))])), (Call("Store",CTy"instruction",Var("v157",CTy"Store")), CS(Var("v157",CTy"Store"), [(Call ("SB",CTy"Store", Var("v158",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'SB",ATy(qTy,qTy), Var("v158",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state")), (Call ("SD",CTy"Store", Var("v159",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'SD",ATy(qTy,qTy), Var("v159",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state")), (Call ("SH",CTy"Store", Var("v160",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'SH",ATy(qTy,qTy), Var("v160",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state")), (Call ("SW",CTy"Store", Var("v161",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'SW",ATy(qTy,qTy), Var("v161",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state"))])), (Call("System",CTy"instruction",Var("v162",CTy"System")), CS(Var("v162",CTy"System"), [(Const("EBREAK",CTy"System"), Apply(Const("dfn'EBREAK",ATy(qTy,qTy)),qVar"state")), (Const("ECALL",CTy"System"), Apply(Const("dfn'ECALL",ATy(qTy,qTy)),qVar"state")), (Const("ERET",CTy"System"), Apply(Const("dfn'ERET",ATy(qTy,qTy)),qVar"state")), (Const("MRTS",CTy"System"), Apply(Const("dfn'MRTS",ATy(qTy,qTy)),qVar"state")), (Const("WFI",CTy"System"),qVar"state"), (Call ("CSRRC",CTy"System", Var("v163",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'CSRRC",ATy(qTy,qTy), Var("v163",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state")), (Call ("CSRRCI",CTy"System", Var("v164",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'CSRRCI",ATy(qTy,qTy), Var("v164",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state")), (Call ("CSRRS",CTy"System", Var("v165",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'CSRRS",ATy(qTy,qTy), Var("v165",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state")), (Call ("CSRRSI",CTy"System", Var("v166",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'CSRRSI",ATy(qTy,qTy), Var("v166",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state")), (Call ("CSRRW",CTy"System", Var("v167",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'CSRRW",ATy(qTy,qTy), Var("v167",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state")), (Call ("CSRRWI",CTy"System", Var("v168",PTy(FTy 5,PTy(FTy 5,FTy 12)))), Apply (Call ("dfn'CSRRWI",ATy(qTy,qTy), Var("v168",PTy(FTy 5,PTy(FTy 5,FTy 12)))), qVar"state")), (Call("SFENCE_VM",CTy"System",Var("v169",FTy 5)), Apply (Call("dfn'SFENCE_VM",ATy(qTy,qTy),Var("v169",FTy 5)), qVar"state"))]))]))) ; val Fetch_def = Def ("Fetch",AVar uTy, Close (qVar"state", Let(Var("v",F64),Apply(Const("PC",ATy(qTy,F64)),qVar"state"), ITE(Mop(Not,EQ(EX(Var("v",F64),LN 1,LN 0,FTy 2),LW(0,2))), TP[Call ("F_Error",CTy"FetchResult", Call ("Internal",CTy"instruction", Call("FETCH_MISALIGNED",CTy"Internal",Var("v",F64)))), qVar"state"], Let(TP[Var("v0",OTy F64),qVar"s"], Apply (Call ("translateAddr",ATy(qTy,PTy(OTy F64,qTy)), TP[Var("v",F64),LC("Instruction",CTy"fetchType"), LC("Read",CTy"accessType")]),qVar"state"), CS(Var("v0",OTy F64), [(Mop(Some,Var("pPC",F64)), Let(Var("v0",F32), Apply (Call ("rawReadInst",ATy(qTy,F32),Var("pPC",F64)), qVar"s"), TP[Call ("F_Result",CTy"FetchResult",Var("v0",F32)), Let(TP[Var("v1",CTy"StateDelta"),qVar"s"], Let(qVar"s0", Apply (Call ("write'Delta",ATy(qTy,qTy), Rupd ("exc_taken", TP[Apply (Const ("Delta", ATy(qTy, CTy"StateDelta")), qVar"s"),LF])), qVar"s"), TP[Apply (Const ("Delta", ATy(qTy,CTy"StateDelta")), qVar"s0"),qVar"s0"]), Let(TP[Var("v1",CTy"StateDelta"),qVar"s"], Let(qVar"s0", Apply (Call ("write'Delta", ATy(qTy,qTy), Rupd ("fetch_exc", TP[Var("v1", CTy"StateDelta"), LF])),qVar"s"), TP[Apply (Const ("Delta", ATy(qTy,CTy"StateDelta")), qVar"s0"),qVar"s0"]), Let(TP[Var("v1",CTy"StateDelta"), qVar"s"], Let(qVar"s0", Apply (Call ("write'Delta", ATy(qTy,qTy), Rupd ("pc", TP[Var("v1", CTy"StateDelta"), Var("v",F64)])), qVar"s"), TP[Apply (Const ("Delta", ATy(qTy, CTy"StateDelta")), qVar"s0"),qVar"s0"]), Let(TP[Var("v",CTy"StateDelta"), qVar"s"], Let(qVar"s0", Apply (Call ("write'Delta", ATy(qTy,qTy), Rupd ("rinstr", TP[Var("v1", CTy"StateDelta"), Var("v0",F32)])), qVar"s"), TP[Apply (Const ("Delta", ATy(qTy, CTy"StateDelta")), qVar"s0"),qVar"s0"]), Let(TP[Var("v", CTy"StateDelta"), qVar"s"], Let(qVar"s0", Apply (Call ("write'Delta", ATy(qTy,qTy), Rupd ("addr", TP[Var("v", CTy"StateDelta"), LO F64])), qVar"s"), TP[Apply (Const ("Delta", ATy(qTy, CTy"StateDelta")), qVar"s0"), qVar"s0"]), Let(TP[Var("v", CTy"StateDelta"), qVar"s"], Let(qVar"s0", Apply (Call ("write'Delta", ATy(qTy, qTy), Rupd ("data1", TP[Var("v", CTy"StateDelta"), LO F64])), qVar"s"), TP[Apply (Const ("Delta", ATy(qTy, CTy"StateDelta")), qVar"s0"), qVar"s0"]), Let(TP[Var("v", CTy"StateDelta"), qVar"s"], Let(qVar"s0", Apply (Call ("write'Delta", ATy(qTy, qTy), Rupd ("data2", TP[Var("v", CTy"StateDelta"), LO F64])), qVar"s"), TP[Apply (Const ("Delta", ATy(qTy, CTy"StateDelta")), qVar"s0"), qVar"s0"]), Let(TP[Var("v", CTy"StateDelta"), qVar"s"], Let(qVar"s0", Apply (Call ("write'Delta", ATy(qTy, qTy), Rupd ("fp_data", TP[Var("v", CTy"StateDelta"), LO F64])), qVar"s"), TP[Apply (Const ("Delta", ATy(qTy, CTy"StateDelta")), qVar"s0"), qVar"s0"]), Apply (Call ("write'Delta", ATy(qTy, qTy), Rupd ("st_width", TP[Var("v", CTy"StateDelta"), LO F32])), qVar"s")))))))))])), (LO F64, TP[Call ("F_Error",CTy"FetchResult", Call ("Internal",CTy"instruction", Call ("FETCH_FAULT",CTy"Internal", Var("v",F64)))),qVar"s"])])))))) ; val asImm12_def = Def ("asImm12", TP[Var("imm12",F1),Var("imm11",F1),Var("immhi",FTy 6),Var("immlo",F4)], CC[Var("imm12",F1),Var("imm11",F1),Var("immhi",FTy 6),Var("immlo",F4)]) ; val asImm20_def = Def ("asImm20", TP[Var("imm20",F1),Var("immhi",F8),Var("imm11",F1),Var("immlo",FTy 10)], CC[Var("imm20",F1),Var("immhi",F8),Var("imm11",F1),Var("immlo",FTy 10)]) ; val asSImm12_def = Def ("asSImm12",TP[Var("immhi",FTy 7),Var("immlo",FTy 5)], CC[Var("immhi",FTy 7),Var("immlo",FTy 5)]) ; val Decode_def = Def ("Decode",Var("w",F32), Let(TP[bVar"b'31",bVar"b'30",bVar"b'29",bVar"b'28",bVar"b'27", bVar"b'26",bVar"b'25",bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12", bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5",bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"], BL(32,Var("w",F32)), ITB([(bVar"b'6", ITE(Bop(And,bVar"b'1",bVar"b'0"), ITB([(Bop(And,Mop(Not,bVar"b'14"), Bop(And,Mop(Not,bVar"b'13"), Bop(And,Mop(Not,bVar"b'12"), Bop(And,bVar"b'5", Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("Branch",CTy"instruction", Call ("BEQ",CTy"Branch", TP[Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Call ("asImm12",FTy 12, TP[Mop(Cast F1,LL[bVar"b'31"]), Mop(Cast F1,LL[bVar"b'7"]), Mop(Cast(FTy 6), LL[bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27", bVar"b'26",bVar"b'25"]), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"])])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And,bVar"b'5", Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("Branch",CTy"instruction", Call ("BNE",CTy"Branch", TP[Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Call ("asImm12",FTy 12, TP[Mop(Cast F1,LL[bVar"b'31"]), Mop(Cast F1,LL[bVar"b'7"]), Mop(Cast(FTy 6), LL[bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27", bVar"b'26",bVar"b'25"]), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"])])]))), (Bop(And,bVar"b'14", Bop(And,Mop(Not,bVar"b'13"), Bop(And,Mop(Not,bVar"b'12"), Bop(And,bVar"b'5", Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("Branch",CTy"instruction", Call ("BLT",CTy"Branch", TP[Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Call ("asImm12",FTy 12, TP[Mop(Cast F1,LL[bVar"b'31"]), Mop(Cast F1,LL[bVar"b'7"]), Mop(Cast(FTy 6), LL[bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27", bVar"b'26",bVar"b'25"]), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"])])]))), (Bop(And,bVar"b'14", Bop(And,Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And,bVar"b'5", Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("Branch",CTy"instruction", Call ("BGE",CTy"Branch", TP[Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Call ("asImm12",FTy 12, TP[Mop(Cast F1,LL[bVar"b'31"]), Mop(Cast F1,LL[bVar"b'7"]), Mop(Cast(FTy 6), LL[bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27", bVar"b'26",bVar"b'25"]), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"])])]))), (Bop(And,bVar"b'14", Bop(And,bVar"b'13", Bop(And,Mop(Not,bVar"b'12"), Bop(And,bVar"b'5", Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("Branch",CTy"instruction", Call ("BLTU",CTy"Branch", TP[Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Call ("asImm12",FTy 12, TP[Mop(Cast F1,LL[bVar"b'31"]), Mop(Cast F1,LL[bVar"b'7"]), Mop(Cast(FTy 6), LL[bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27", bVar"b'26",bVar"b'25"]), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"])])]))), (Bop(And,bVar"b'14", Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And,bVar"b'5", Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("Branch",CTy"instruction", Call ("BGEU",CTy"Branch", TP[Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Call ("asImm12",FTy 12, TP[Mop(Cast F1,LL[bVar"b'31"]), Mop(Cast F1,LL[bVar"b'7"]), Mop(Cast(FTy 6), LL[bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27", bVar"b'26",bVar"b'25"]), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"])])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,Mop(Not,bVar"b'13"), Bop(And,Mop(Not,bVar"b'12"), Bop(And,bVar"b'5", Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), bVar"b'2")))))), Call ("Branch",CTy"instruction", Call ("JALR",CTy"Branch", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'5", Bop(And,Mop(Not,bVar"b'4"), Bop(And,bVar"b'3",bVar"b'2"))), Call ("Branch",CTy"instruction", Call ("JAL",CTy"Branch", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Call ("asImm20",FTy 20, TP[Mop(Cast F1,LL[bVar"b'31"]), Mop(Cast F8, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16", bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Mop(Cast F1,LL[bVar"b'20"]), Mop(Cast(FTy 10), LL[bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27", bVar"b'26",bVar"b'25", bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21"])])]))), (Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And,Mop(Not,bVar"b'5"), Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2")))))), Call ("FArith",CTy"instruction", Call ("FMADD_S",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Mop(Cast(FTy 5), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And,Mop(Not,bVar"b'5"), Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), bVar"b'2"))))), Call ("FArith",CTy"instruction", Call ("FMSUB_S",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Mop(Cast(FTy 5), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And,Mop(Not,bVar"b'5"), Bop(And,Mop(Not,bVar"b'4"), Bop(And,bVar"b'3", Mop(Not,bVar"b'2")))))), Call ("FArith",CTy"instruction", Call ("FNMSUB_S",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Mop(Cast(FTy 5), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And,Mop(Not,bVar"b'5"), Bop(And,Mop(Not,bVar"b'4"), Bop(And,bVar"b'3",bVar"b'2"))))), Call ("FArith",CTy"instruction", Call ("FNMADD_S",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Mop(Cast(FTy 5), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'5"), Bop(And,bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))), Call ("FArith",CTy"instruction", Call ("FADD_S",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,bVar"b'27", Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'5"), Bop(And,bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))), Call ("FArith",CTy"instruction", Call ("FSUB_S",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'5"), Bop(And,bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))), Call ("FArith",CTy"instruction", Call ("FMUL_S",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,bVar"b'27", Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'5"), Bop(And,bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))), Call ("FArith",CTy"instruction", Call ("FDIV_S",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,bVar"b'27", Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))), Call ("FArith",CTy"instruction", Call ("FSQRT_S",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,bVar"b'27", Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("FArith",CTy"instruction", Call ("FMIN_S",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,bVar"b'27", Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, bVar"b'12", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("FArith",CTy"instruction", Call ("FMAX_S",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'31", Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("FArith",CTy"instruction", Call ("FEQ_S",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'31", Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, bVar"b'12", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("FArith",CTy"instruction", Call ("FLT_S",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'31", Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("FArith",CTy"instruction", Call ("FLE_S",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("FConv",CTy"instruction", Call ("FSGNJ_S",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, bVar"b'12", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("FConv",CTy"instruction", Call ("FSGNJN_S",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("FConv",CTy"instruction", Call ("FSGNJX_S",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))), Call ("FConv",CTy"instruction", Call ("FCVT_W_S",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, bVar"b'20", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))), Call ("FConv",CTy"instruction", Call ("FCVT_WU_S",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))))))))))), Call ("FConv",CTy"instruction", Call ("FMV_X_S",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, bVar"b'12", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))))))))))), Call ("FConv",CTy"instruction", Call ("FCLASS_S",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))), Call ("FConv",CTy"instruction", Call ("FCVT_S_W",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, bVar"b'20", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))), Call ("FConv",CTy"instruction", Call ("FCVT_S_WU",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,bVar"b'29", Bop(And,bVar"b'28", Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))))))))))), Call ("FConv",CTy"instruction", Call ("FMV_S_X",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"])]))), (Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And,Mop(Not,bVar"b'5"), Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2")))))), Call ("FArith",CTy"instruction", Call ("FMADD_D",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Mop(Cast(FTy 5), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And,Mop(Not,bVar"b'5"), Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), bVar"b'2"))))), Call ("FArith",CTy"instruction", Call ("FMSUB_D",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Mop(Cast(FTy 5), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And,Mop(Not,bVar"b'5"), Bop(And,Mop(Not,bVar"b'4"), Bop(And,bVar"b'3", Mop(Not,bVar"b'2")))))), Call ("FArith",CTy"instruction", Call ("FNMSUB_D",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Mop(Cast(FTy 5), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And,Mop(Not,bVar"b'5"), Bop(And,Mop(Not,bVar"b'4"), Bop(And,bVar"b'3",bVar"b'2"))))), Call ("FArith",CTy"instruction", Call ("FNMADD_D",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Mop(Cast(FTy 5), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'5"), Bop(And,bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))), Call ("FArith",CTy"instruction", Call ("FADD_D",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,bVar"b'27", Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'5"), Bop(And,bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))), Call ("FArith",CTy"instruction", Call ("FSUB_D",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'5"), Bop(And,bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))), Call ("FArith",CTy"instruction", Call ("FMUL_D",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,bVar"b'27", Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'5"), Bop(And,bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))), Call ("FArith",CTy"instruction", Call ("FDIV_D",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,bVar"b'27", Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))), Call ("FArith",CTy"instruction", Call ("FSQRT_D",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,bVar"b'27", Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("FArith",CTy"instruction", Call ("FMIN_D",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,bVar"b'27", Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, bVar"b'12", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("FArith",CTy"instruction", Call ("FMAX_D",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'31", Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("FArith",CTy"instruction", Call ("FEQ_D",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'31", Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, bVar"b'12", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("FArith",CTy"instruction", Call ("FLT_D",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'31", Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("FArith",CTy"instruction", Call ("FLE_D",CTy"FArith", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("FConv",CTy"instruction", Call ("FSGNJ_D",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, bVar"b'12", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("FConv",CTy"instruction", Call ("FSGNJN_D",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("FConv",CTy"instruction", Call ("FSGNJX_D",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))), Call ("FConv",CTy"instruction", Call ("FCVT_W_D",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, bVar"b'20", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))), Call ("FConv",CTy"instruction", Call ("FCVT_WU_D",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, bVar"b'12", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))))))))))), Call ("FConv",CTy"instruction", Call ("FCLASS_D",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))), Call ("FConv",CTy"instruction", Call ("FCVT_D_W",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, bVar"b'20", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))), Call ("FConv",CTy"instruction", Call ("FCVT_D_WU",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, bVar"b'21", Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))), Call ("FConv",CTy"instruction", Call ("FCVT_L_S",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, bVar"b'21", Bop(And, bVar"b'20", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))), Call ("FConv",CTy"instruction", Call ("FCVT_LU_S",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, bVar"b'21", Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))), Call ("FConv",CTy"instruction", Call ("FCVT_S_L",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, bVar"b'21", Bop(And, bVar"b'20", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))), Call ("FConv",CTy"instruction", Call ("FCVT_S_LU",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, bVar"b'21", Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))), Call ("FConv",CTy"instruction", Call ("FCVT_L_D",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, bVar"b'21", Bop(And, bVar"b'20", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))), Call ("FConv",CTy"instruction", Call ("FCVT_LU_D",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, bVar"b'21", Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))), Call ("FConv",CTy"instruction", Call ("FCVT_D_L",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, bVar"b'21", Bop(And, bVar"b'20", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))), Call ("FConv",CTy"instruction", Call ("FCVT_D_LU",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))))))))))), Call ("FConv",CTy"instruction", Call ("FMV_X_D",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,bVar"b'29", Bop(And,bVar"b'28", Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))))))))))), Call ("FConv",CTy"instruction", Call ("FMV_D_X",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, bVar"b'20", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))), Call ("FConv",CTy"instruction", Call ("FCVT_S_D",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))), Call ("FConv",CTy"instruction", Call ("FCVT_D_S",CTy"FConv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 3), LL[bVar"b'14",bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And,bVar"b'5", Bop(And,bVar"b'4", Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("System",CTy"instruction", Call ("CSRRW",CTy"System", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,Mop(Not,bVar"b'12"), Bop(And,bVar"b'5", Bop(And,bVar"b'4", Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("System",CTy"instruction", Call ("CSRRS",CTy"System", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And,bVar"b'5", Bop(And,bVar"b'4", Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("System",CTy"instruction", Call ("CSRRC",CTy"System", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'14", Bop(And,Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And,bVar"b'5", Bop(And,bVar"b'4", Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("System",CTy"instruction", Call ("CSRRWI",CTy"System", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'14", Bop(And,bVar"b'13", Bop(And,Mop(Not,bVar"b'12"), Bop(And,bVar"b'5", Bop(And,bVar"b'4", Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("System",CTy"instruction", Call ("CSRRSI",CTy"System", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'14", Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And,bVar"b'5", Bop(And,bVar"b'4", Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("System",CTy"instruction", Call ("CSRRCI",CTy"System", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'19"), Bop(And, Mop(Not, bVar"b'18"), Bop(And, Mop(Not, bVar"b'17"), Bop(And, Mop(Not, bVar"b'16"), Bop(And, Mop(Not, bVar"b'15"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'11"), Bop(And, Mop(Not, bVar"b'10"), Bop(And, Mop(Not, bVar"b'9"), Bop(And, Mop(Not, bVar"b'8"), Bop(And, Mop(Not, bVar"b'7"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))))))))))))))))))))), Call ("System",CTy"instruction", Const("ECALL",CTy"System"))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, bVar"b'20", Bop(And, Mop(Not, bVar"b'19"), Bop(And, Mop(Not, bVar"b'18"), Bop(And, Mop(Not, bVar"b'17"), Bop(And, Mop(Not, bVar"b'16"), Bop(And, Mop(Not, bVar"b'15"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'11"), Bop(And, Mop(Not, bVar"b'10"), Bop(And, Mop(Not, bVar"b'9"), Bop(And, Mop(Not, bVar"b'8"), Bop(And, Mop(Not, bVar"b'7"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))))))))))))))))))))), Call ("System",CTy"instruction", Const("EBREAK",CTy"System"))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'19"), Bop(And, Mop(Not, bVar"b'18"), Bop(And, Mop(Not, bVar"b'17"), Bop(And, Mop(Not, bVar"b'16"), Bop(And, Mop(Not, bVar"b'15"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'11"), Bop(And, Mop(Not, bVar"b'10"), Bop(And, Mop(Not, bVar"b'9"), Bop(And, Mop(Not, bVar"b'8"), Bop(And, Mop(Not, bVar"b'7"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))))))))))))))))))))), Call ("System",CTy"instruction", Const("ERET",CTy"System"))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,bVar"b'28", Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, bVar"b'22", Bop(And, Mop(Not, bVar"b'21"), Bop(And, bVar"b'20", Bop(And, Mop(Not, bVar"b'19"), Bop(And, Mop(Not, bVar"b'18"), Bop(And, Mop(Not, bVar"b'17"), Bop(And, Mop(Not, bVar"b'16"), Bop(And, Mop(Not, bVar"b'15"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'11"), Bop(And, Mop(Not, bVar"b'10"), Bop(And, Mop(Not, bVar"b'9"), Bop(And, Mop(Not, bVar"b'8"), Bop(And, Mop(Not, bVar"b'7"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))))))))))))))))))))), Call ("System",CTy"instruction", Const("MRTS",CTy"System"))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, bVar"b'21", Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'19"), Bop(And, Mop(Not, bVar"b'18"), Bop(And, Mop(Not, bVar"b'17"), Bop(And, Mop(Not, bVar"b'16"), Bop(And, Mop(Not, bVar"b'15"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'11"), Bop(And, Mop(Not, bVar"b'10"), Bop(And, Mop(Not, bVar"b'9"), Bop(And, Mop(Not, bVar"b'8"), Bop(And, Mop(Not, bVar"b'7"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))))))))))))))))))))), Call ("System",CTy"instruction", Const("WFI",CTy"System"))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And, Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'24"), Bop(And, Mop(Not, bVar"b'23"), Bop(And, Mop(Not, bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, bVar"b'20", Bop(And, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'11"), Bop(And, Mop(Not, bVar"b'10"), Bop(And, Mop(Not, bVar"b'9"), Bop(And, Mop(Not, bVar"b'8"), Bop(And, Mop(Not, bVar"b'7"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))))))))))))), Call ("System",CTy"instruction", Call ("SFENCE_VM",CTy"System", Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]))))], Const("UnknownInstruction",CTy"instruction")), Const("UnknownInstruction",CTy"instruction"))), (Bop(And,bVar"b'1",bVar"b'0"), ITB([(Bop(And,bVar"b'5", Bop(And,bVar"b'4", Bop(And,Mop(Not,bVar"b'3"),bVar"b'2"))), Call ("ArithI",CTy"instruction", Call ("LUI",CTy"ArithI", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 20), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20", bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'5"), Bop(And,bVar"b'4", Bop(And,Mop(Not,bVar"b'3"),bVar"b'2"))), Call ("ArithI",CTy"instruction", Call ("AUIPC",CTy"ArithI", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 20), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20", bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,Mop(Not,bVar"b'13"), Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'5"), Bop(And,bVar"b'4", Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("ArithI",CTy"instruction", Call ("ADDI",CTy"ArithI", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'14"), Bop(And, Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))))), Call ("Shift",CTy"instruction", Call ("SLLI",CTy"Shift", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 6), LL[bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'5"), Bop(And,bVar"b'4", Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("ArithI",CTy"instruction", Call ("SLTI",CTy"ArithI", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And,Mop(Not,bVar"b'5"), Bop(And,bVar"b'4", Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("ArithI",CTy"instruction", Call ("SLTIU",CTy"ArithI", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'14", Bop(And,Mop(Not,bVar"b'13"), Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'5"), Bop(And,bVar"b'4", Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("ArithI",CTy"instruction", Call ("XORI",CTy"ArithI", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'14", Bop(And, Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))))), Call ("Shift",CTy"instruction", Call ("SRLI",CTy"Shift", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 6), LL[bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'14", Bop(And, Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2"))))))))))))), Call ("Shift",CTy"instruction", Call ("SRAI",CTy"Shift", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 6), LL[bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'14", Bop(And,bVar"b'13", Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'5"), Bop(And,bVar"b'4", Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("ArithI",CTy"instruction", Call ("ORI",CTy"ArithI", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'14", Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And,Mop(Not,bVar"b'5"), Bop(And,bVar"b'4", Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("ArithI",CTy"instruction", Call ("ANDI",CTy"ArithI", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not,bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("ArithR",CTy"instruction", Call ("ADD",CTy"ArithR", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not,bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("ArithR",CTy"instruction", Call ("SUB",CTy"ArithR", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("Shift",CTy"instruction", Call ("SLL",CTy"Shift", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And, Mop(Not, bVar"b'12"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("ArithR",CTy"instruction", Call ("SLT",CTy"ArithR", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("ArithR",CTy"instruction", Call ("SLTU",CTy"ArithR", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'14", Bop(And, Mop(Not,bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("ArithR",CTy"instruction", Call ("XOR",CTy"ArithR", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'14", Bop(And, Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("Shift",CTy"instruction", Call ("SRL",CTy"Shift", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'14", Bop(And, Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("Shift",CTy"instruction", Call ("SRA",CTy"Shift", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'14", Bop(And,bVar"b'13", Bop(And, Mop(Not, bVar"b'12"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("ArithR",CTy"instruction", Call ("OR",CTy"ArithR", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'14", Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("ArithR",CTy"instruction", Call ("AND",CTy"ArithR", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,Mop(Not,bVar"b'13"), Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'5"), Bop(And,bVar"b'4", Bop(And,bVar"b'3", Mop(Not,bVar"b'2"))))))), Call ("ArithI",CTy"instruction", Call ("ADDIW",CTy"ArithI", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, bVar"b'3", Mop(Not, bVar"b'2")))))))))))))), Call ("Shift",CTy"instruction", Call ("SLLIW",CTy"Shift", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'14", Bop(And, Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, bVar"b'3", Mop(Not, bVar"b'2")))))))))))))), Call ("Shift",CTy"instruction", Call ("SRLIW",CTy"Shift", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'14", Bop(And, Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, bVar"b'3", Mop(Not, bVar"b'2")))))))))))))), Call ("Shift",CTy"instruction", Call ("SRAIW",CTy"Shift", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not,bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, bVar"b'3", Mop(Not, bVar"b'2")))))))))))))), Call ("ArithR",CTy"instruction", Call ("ADDW",CTy"ArithR", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not,bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, bVar"b'3", Mop(Not, bVar"b'2")))))))))))))), Call ("ArithR",CTy"instruction", Call ("SUBW",CTy"ArithR", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, bVar"b'3", Mop(Not, bVar"b'2")))))))))))))), Call ("Shift",CTy"instruction", Call ("SLLW",CTy"Shift", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'14", Bop(And, Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, bVar"b'3", Mop(Not, bVar"b'2")))))))))))))), Call ("Shift",CTy"instruction", Call ("SRLW",CTy"Shift", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'14", Bop(And, Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, bVar"b'3", Mop(Not, bVar"b'2")))))))))))))), Call ("Shift",CTy"instruction", Call ("SRAW",CTy"Shift", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not,bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("MulDiv",CTy"instruction", Call ("MUL",CTy"MulDiv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("MulDiv",CTy"instruction", Call ("MULH",CTy"MulDiv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And, Mop(Not, bVar"b'12"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("MulDiv",CTy"instruction", Call ("MULHSU",CTy"MulDiv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("MulDiv",CTy"instruction", Call ("MULHU",CTy"MulDiv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And,bVar"b'14", Bop(And, Mop(Not,bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("MulDiv",CTy"instruction", Call ("DIV",CTy"MulDiv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And,bVar"b'14", Bop(And, Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("MulDiv",CTy"instruction", Call ("DIVU",CTy"MulDiv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And,bVar"b'14", Bop(And,bVar"b'13", Bop(And, Mop(Not, bVar"b'12"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("MulDiv",CTy"instruction", Call ("REM",CTy"MulDiv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And,bVar"b'14", Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("MulDiv",CTy"instruction", Call ("REMU",CTy"MulDiv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And, Mop(Not,bVar"b'14"), Bop(And, Mop(Not,bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, bVar"b'3", Mop(Not, bVar"b'2")))))))))))))), Call ("MulDiv",CTy"instruction", Call ("MULW",CTy"MulDiv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And,bVar"b'14", Bop(And, Mop(Not,bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, bVar"b'3", Mop(Not, bVar"b'2")))))))))))))), Call ("MulDiv",CTy"instruction", Call ("DIVW",CTy"MulDiv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And,bVar"b'14", Bop(And, Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, bVar"b'3", Mop(Not, bVar"b'2")))))))))))))), Call ("MulDiv",CTy"instruction", Call ("DIVUW",CTy"MulDiv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And,bVar"b'14", Bop(And,bVar"b'13", Bop(And, Mop(Not, bVar"b'12"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, bVar"b'3", Mop(Not, bVar"b'2")))))))))))))), Call ("MulDiv",CTy"instruction", Call ("REMW",CTy"MulDiv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And,bVar"b'14", Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, bVar"b'3", Mop(Not, bVar"b'2")))))))))))))), Call ("MulDiv",CTy"instruction", Call ("REMUW",CTy"MulDiv", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,Mop(Not,bVar"b'13"), Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'5"), Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("Load",CTy"instruction", Call ("LB",CTy"Load", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And,Mop(Not,bVar"b'5"), Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("Load",CTy"instruction", Call ("LH",CTy"Load", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'5"), Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("Load",CTy"instruction", Call ("LW",CTy"Load", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And,Mop(Not,bVar"b'5"), Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("Load",CTy"instruction", Call ("LD",CTy"Load", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'14", Bop(And,Mop(Not,bVar"b'13"), Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'5"), Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("Load",CTy"instruction", Call ("LBU",CTy"Load", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'14", Bop(And,Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And,Mop(Not,bVar"b'5"), Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("Load",CTy"instruction", Call ("LHU",CTy"Load", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'14", Bop(And,bVar"b'13", Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'5"), Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("Load",CTy"instruction", Call ("LWU",CTy"Load", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,Mop(Not,bVar"b'13"), Bop(And,Mop(Not,bVar"b'12"), Bop(And,bVar"b'5", Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("Store",CTy"instruction", Call ("SB",CTy"Store", TP[Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Call ("asSImm12",FTy 12, TP[Mop(Cast(FTy 7), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"])])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And,bVar"b'5", Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("Store",CTy"instruction", Call ("SH",CTy"Store", TP[Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Call ("asSImm12",FTy 12, TP[Mop(Cast(FTy 7), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"])])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,Mop(Not,bVar"b'12"), Bop(And,bVar"b'5", Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("Store",CTy"instruction", Call ("SW",CTy"Store", TP[Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Call ("asSImm12",FTy 12, TP[Mop(Cast(FTy 7), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"])])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And,bVar"b'5", Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), Mop(Not,bVar"b'2"))))))), Call ("Store",CTy"instruction", Call ("SD",CTy"Store", TP[Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Call ("asSImm12",FTy 12, TP[Mop(Cast(FTy 7), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"])])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,Mop(Not,bVar"b'13"), Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'5"), Bop(And,Mop(Not,bVar"b'4"), Bop(And,bVar"b'3",bVar"b'2")))))), Call ("FENCE",CTy"instruction", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8", bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast F4, LL[bVar"b'27",bVar"b'26",bVar"b'25", bVar"b'24"]), Mop(Cast F4, LL[bVar"b'23",bVar"b'22",bVar"b'21", bVar"b'20"])])), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,Mop(Not,bVar"b'13"), Bop(And,bVar"b'12", Bop(And,Mop(Not,bVar"b'5"), Bop(And,Mop(Not,bVar"b'4"), Bop(And,bVar"b'3",bVar"b'2")))))), Call ("FENCE_I",CTy"instruction", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8", bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])])), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'5"), Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), bVar"b'2")))))), Call ("FPLoad",CTy"instruction", Call ("FLW",CTy"FPLoad", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And,Mop(Not,bVar"b'5"), Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), bVar"b'2")))))), Call ("FPLoad",CTy"instruction", Call ("FLD",CTy"FPLoad", TP[Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 12), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25",bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,Mop(Not,bVar"b'12"), Bop(And,bVar"b'5", Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), bVar"b'2")))))), Call ("FPStore",CTy"instruction", Call ("FSW",CTy"FPStore", TP[Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Call ("asSImm12",FTy 12, TP[Mop(Cast(FTy 7), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"])])]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And,bVar"b'5", Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), bVar"b'2")))))), Call ("FPStore",CTy"instruction", Call ("FSD",CTy"FPStore", TP[Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"]), Call ("asSImm12",FTy 12, TP[Mop(Cast(FTy 7), LL[bVar"b'31",bVar"b'30",bVar"b'29", bVar"b'28",bVar"b'27",bVar"b'26", bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"])])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'24"), Bop(And,Mop(Not,bVar"b'23"), Bop(And, Mop(Not,bVar"b'22"), Bop(And, Mop(Not,bVar"b'21"), Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, bVar"b'13", Bop(And, Mop(Not, bVar"b'12"), Bop(And, bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2")))))))))))))))), Call ("AMO",CTy"instruction", Call ("LR_W",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'24"), Bop(And,Mop(Not,bVar"b'23"), Bop(And, Mop(Not,bVar"b'22"), Bop(And, Mop(Not,bVar"b'21"), Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, bVar"b'13", Bop(And, bVar"b'12", Bop(And, bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2")))))))))))))))), Call ("AMO",CTy"instruction", Call ("LR_D",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,bVar"b'27", Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And, Mop(Not,bVar"b'12"), Bop(And,bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2"))))))))))), Call ("AMO",CTy"instruction", Call ("SC_W",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,bVar"b'28", Bop(And,bVar"b'27", Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And,bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2"))))))))))), Call ("AMO",CTy"instruction", Call ("SC_D",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,bVar"b'27", Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And, Mop(Not,bVar"b'12"), Bop(And,bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2"))))))))))), Call ("AMO",CTy"instruction", Call ("AMOSWAP_W",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And, Mop(Not,bVar"b'12"), Bop(And,bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2"))))))))))), Call ("AMO",CTy"instruction", Call ("AMOADD_W",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And, Mop(Not,bVar"b'12"), Bop(And,bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2"))))))))))), Call ("AMO",CTy"instruction", Call ("AMOXOR_W",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,bVar"b'30", Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And, Mop(Not,bVar"b'12"), Bop(And,bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2"))))))))))), Call ("AMO",CTy"instruction", Call ("AMOAND_W",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And, Mop(Not,bVar"b'12"), Bop(And,bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2"))))))))))), Call ("AMO",CTy"instruction", Call ("AMOOR_W",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'31", Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And, Mop(Not,bVar"b'12"), Bop(And,bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2"))))))))))), Call ("AMO",CTy"instruction", Call ("AMOMIN_W",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'31", Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And, Mop(Not,bVar"b'12"), Bop(And,bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2"))))))))))), Call ("AMO",CTy"instruction", Call ("AMOMAX_W",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And, Mop(Not,bVar"b'12"), Bop(And,bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2"))))))))))), Call ("AMO",CTy"instruction", Call ("AMOMINU_W",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And, Mop(Not,bVar"b'12"), Bop(And,bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2"))))))))))), Call ("AMO",CTy"instruction", Call ("AMOMAXU_W",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,bVar"b'27", Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And,bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2"))))))))))), Call ("AMO",CTy"instruction", Call ("AMOSWAP_D",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And,bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2"))))))))))), Call ("AMO",CTy"instruction", Call ("AMOADD_D",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And,bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2"))))))))))), Call ("AMO",CTy"instruction", Call ("AMOXOR_D",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,bVar"b'30", Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And,bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2"))))))))))), Call ("AMO",CTy"instruction", Call ("AMOAND_D",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And,bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2"))))))))))), Call ("AMO",CTy"instruction", Call ("AMOOR_D",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'31", Bop(And,Mop(Not,bVar"b'30"), Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And,bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2"))))))))))), Call ("AMO",CTy"instruction", Call ("AMOMIN_D",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'31", Bop(And,Mop(Not,bVar"b'30"), Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And,bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2"))))))))))), Call ("AMO",CTy"instruction", Call ("AMOMAX_D",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,Mop(Not,bVar"b'29"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And,bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2"))))))))))), Call ("AMO",CTy"instruction", Call ("AMOMINU_D",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])]))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'13", Bop(And,bVar"b'12", Bop(And,bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", bVar"b'2"))))))))))), Call ("AMO",CTy"instruction", Call ("AMOMAXU_D",CTy"AMO", TP[Mop(Cast F1,LL[bVar"b'26"]), Mop(Cast F1,LL[bVar"b'25"]), Mop(Cast(FTy 5), LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7"]), Mop(Cast(FTy 5), LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16",bVar"b'15"]), Mop(Cast(FTy 5), LL[bVar"b'24",bVar"b'23",bVar"b'22", bVar"b'21",bVar"b'20"])])))], Const("UnknownInstruction",CTy"instruction")))], Const("UnknownInstruction",CTy"instruction")))) ; val imm_def = Def ("imm",Var("i",BTy"N"),CC[LS"0x",Mop(Cast sTy,Var("i",BTy"N"))]) ; val instr_def = Def ("instr",sVar"o",Mop(PadRight,TP[LSC #" ",LN 12,sVar"o"])) ; val amotype_def = Def ("amotype",TP[Var("aq",F1),Var("rl",F1)], CS(TP[Var("aq",F1),Var("rl",F1)], [(TP[LW(0,1),LW(0,1)],LS""),(TP[LW(1,1),LW(0,1)],LS".aq"), (TP[LW(0,1),LW(1,1)],LS".rl"),(TP[LW(1,1),LW(1,1)],LS".sc")])) ; val pRtype_def = Def ("pRtype",TP[sVar"o",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], CC[Call("instr",sTy,sVar"o"),LS" ",Call("reg",sTy,Var("rd",FTy 5)), LS", ",Call("reg",sTy,Var("rs1",FTy 5)),LS", ", Call("reg",sTy,Var("rs2",FTy 5))]) ; val pARtype_def = Def ("pARtype", TP[sVar"o",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)], Call ("pRtype",sTy, TP[CC[sVar"o",Call("amotype",sTy,TP[Var("aq",F1),Var("rl",F1)])], Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])) ; val pLRtype_def = Def ("pLRtype", TP[sVar"o",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5),Var("rs1",FTy 5)], CC[Call ("instr",sTy, CC[sVar"o",Call("amotype",sTy,TP[Var("aq",F1),Var("rl",F1)])]), LS" ",Call("reg",sTy,Var("rd",FTy 5)),LS", ", Call("reg",sTy,Var("rs1",FTy 5))]) ; val pItype_def = Def ("pItype",TP[sVar"o",Var("rd",FTy 5),Var("rs1",FTy 5),Var("i",BTy"N")], CC[Call("instr",sTy,sVar"o"),LS" ",Call("reg",sTy,Var("rd",FTy 5)), LS", ",Call("reg",sTy,Var("rs1",FTy 5)),LS", ", Call("imm",sTy,Var("i",BTy"N"))]) ; val pCSRtype_def = Def ("pCSRtype", TP[sVar"o",Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)], CC[Call("instr",sTy,sVar"o"),LS" ",Call("reg",sTy,Var("rd",FTy 5)), LS", ",Call("reg",sTy,Var("rs1",FTy 5)),LS", ", Call("csrName",sTy,Var("csr",FTy 12))]) ; val pCSRItype_def = Def ("pCSRItype", TP[sVar"o",Var("rd",FTy 5),Var("i",BTy"N"),Var("csr",FTy 12)], CC[Call("instr",sTy,sVar"o"),LS" ",Call("reg",sTy,Var("rd",FTy 5)), LS", ",Call("imm",sTy,Var("i",BTy"N")),LS", ", Call("csrName",sTy,Var("csr",FTy 12))]) ; val pStype_def = Def ("pStype",TP[sVar"o",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("i",BTy"N")], CC[Call("instr",sTy,sVar"o"),LS" ",Call("reg",sTy,Var("rs2",FTy 5)), LS", ",Call("reg",sTy,Var("rs1",FTy 5)),LS", ", Call("imm",sTy,Var("i",BTy"N"))]) ; val pSBtype_def = Def ("pSBtype", TP[sVar"o",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("i",BTy"N")], CC[Call("instr",sTy,sVar"o"),LS" ",Call("reg",sTy,Var("rs1",FTy 5)), LS", ",Call("reg",sTy,Var("rs2",FTy 5)),LS", ", Call("imm",sTy,Bop(Lsl,Var("i",BTy"N"),LN 1))]) ; val pUtype_def = Def ("pUtype",TP[sVar"o",Var("rd",FTy 5),Var("i",BTy"N")], CC[Call("instr",sTy,sVar"o"),LS" ",Call("reg",sTy,Var("rd",FTy 5)), LS", ",Call("imm",sTy,Var("i",BTy"N"))]) ; val pUJtype_def = Def ("pUJtype",TP[sVar"o",Var("rd",FTy 5),Var("i",BTy"N")], CC[Call("instr",sTy,sVar"o"),LS" ",Call("reg",sTy,Var("rd",FTy 5)), LS", ",Call("imm",sTy,Bop(Lsl,Var("i",BTy"N"),LN 1))]) ; val pN0type_def = Def ("pN0type",sVar"o",Call("instr",sTy,sVar"o")) ; val pN1type_def = Def ("pN1type",TP[sVar"o",Var("r",FTy 5)], CC[Call("instr",sTy,sVar"o"),LS" ",Call("reg",sTy,Var("r",FTy 5))]) ; val pFRtype_def = Def ("pFRtype", TP[sVar"o",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)], CC[Call("instr",sTy,sVar"o"),LS" ",Call("fpreg",sTy,Var("rd",FTy 5)), LS", ",Call("fpreg",sTy,Var("rs1",FTy 5)),LS", ", Call("fpreg",sTy,Var("rs2",FTy 5))]) ; val pFR1type_def = Def ("pFR1type",TP[sVar"o",Var("rd",FTy 5),Var("rs",FTy 5)], CC[Call("instr",sTy,sVar"o"),LS" ",Call("fpreg",sTy,Var("rd",FTy 5)), LS", ",Call("fpreg",sTy,Var("rs",FTy 5))]) ; val pFR3type_def = Def ("pFR3type", TP[sVar"o",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("rs3",FTy 5)], CC[Call("instr",sTy,sVar"o"),LS" ",Call("fpreg",sTy,Var("rd",FTy 5)), LS", ",Call("fpreg",sTy,Var("rs1",FTy 5)),LS", ", Call("fpreg",sTy,Var("rs2",FTy 5)),LS", ", Call("fpreg",sTy,Var("rs3",FTy 5))]) ; val pFItype_def = Def ("pFItype",TP[sVar"o",Var("rd",FTy 5),Var("rs1",FTy 5),Var("i",BTy"N")], CC[Call("instr",sTy,sVar"o"),LS" ",Call("fpreg",sTy,Var("rd",FTy 5)), LS", ",Call("reg",sTy,Var("rs1",FTy 5)),LS", ", Call("imm",sTy,Var("i",BTy"N"))]) ; val pFStype_def = Def ("pFStype", TP[sVar"o",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("i",BTy"N")], CC[Call("instr",sTy,sVar"o"),LS" ",Call("fpreg",sTy,Var("rs2",FTy 5)), LS", ",Call("reg",sTy,Var("rs1",FTy 5)),LS", ", Call("imm",sTy,Var("i",BTy"N"))]) ; val pCFItype_def = Def ("pCFItype",TP[sVar"o",Var("rd",FTy 5),Var("rs",FTy 5)], CC[Call("instr",sTy,sVar"o"),LS" ",Call("fpreg",sTy,Var("rd",FTy 5)), LS", ",Call("reg",sTy,Var("rs",FTy 5))]) ; val pCIFtype_def = Def ("pCIFtype",TP[sVar"o",Var("rd",FTy 5),Var("rs",FTy 5)], CC[Call("instr",sTy,sVar"o"),LS" ",Call("reg",sTy,Var("rd",FTy 5)), LS", ",Call("fpreg",sTy,Var("rs",FTy 5))]) ; val instructionToString_def = Def ("instructionToString",Var("i",CTy"instruction"), CS(Var("i",CTy"instruction"), [(Call ("Branch",CTy"instruction", Call ("BEQ",CTy"Branch", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("pSBtype",sTy, TP[LS"BEQ",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("Branch",CTy"instruction", Call ("BNE",CTy"Branch", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("pSBtype",sTy, TP[LS"BNE",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("Branch",CTy"instruction", Call ("BLT",CTy"Branch", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("pSBtype",sTy, TP[LS"BLT",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("Branch",CTy"instruction", Call ("BGE",CTy"Branch", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("pSBtype",sTy, TP[LS"BGE",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("Branch",CTy"instruction", Call ("BLTU",CTy"Branch", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("pSBtype",sTy, TP[LS"BLTU",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("Branch",CTy"instruction", Call ("BGEU",CTy"Branch", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("pSBtype",sTy, TP[LS"BGEU",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("Branch",CTy"instruction", Call ("JALR",CTy"Branch", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("pItype",sTy, TP[LS"JALR",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Branch",CTy"instruction", Call("JAL",CTy"Branch",TP[Var("rd",FTy 5),Var("imm",FTy 20)])), Call("pUJtype",sTy,TP[LS"JAL",Var("rd",FTy 5),Var("imm",FTy 20)])), (Call ("ArithI",CTy"instruction", Call("LUI",CTy"ArithI",TP[Var("rd",FTy 5),Var("imm",FTy 20)])), Call("pUtype",sTy,TP[LS"LUI",Var("rd",FTy 5),Var("imm",FTy 20)])), (Call ("ArithI",CTy"instruction", Call("AUIPC",CTy"ArithI",TP[Var("rd",FTy 5),Var("imm",FTy 20)])), Call("pUtype",sTy,TP[LS"AUIPC",Var("rd",FTy 5),Var("imm",FTy 20)])), (Call ("ArithI",CTy"instruction", Call ("ADDI",CTy"ArithI", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("pItype",sTy, TP[LS"ADDI",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Shift",CTy"instruction", Call ("SLLI",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)])), Call ("pItype",sTy, TP[LS"SLLI",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)])), (Call ("ArithI",CTy"instruction", Call ("SLTI",CTy"ArithI", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("pItype",sTy, TP[LS"SLTI",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("ArithI",CTy"instruction", Call ("SLTIU",CTy"ArithI", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("pItype",sTy, TP[LS"SLTIU",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("ArithI",CTy"instruction", Call ("XORI",CTy"ArithI", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("pItype",sTy, TP[LS"XORI",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Shift",CTy"instruction", Call ("SRLI",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)])), Call ("pItype",sTy, TP[LS"SRLI",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)])), (Call ("Shift",CTy"instruction", Call ("SRAI",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)])), Call ("pItype",sTy, TP[LS"SRAI",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)])), (Call ("ArithI",CTy"instruction", Call ("ORI",CTy"ArithI", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("pItype",sTy, TP[LS"ORI",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("ArithI",CTy"instruction", Call ("ANDI",CTy"ArithI", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("pItype",sTy, TP[LS"ANDI",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("ArithR",CTy"instruction", Call ("ADD",CTy"ArithR", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"ADD",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("ArithR",CTy"instruction", Call ("SUB",CTy"ArithR", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"SUB",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("Shift",CTy"instruction", Call ("SLL",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"SLL",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("ArithR",CTy"instruction", Call ("SLT",CTy"ArithR", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"SLT",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("ArithR",CTy"instruction", Call ("SLTU",CTy"ArithR", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"SLTU",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("ArithR",CTy"instruction", Call ("XOR",CTy"ArithR", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"XOR",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("Shift",CTy"instruction", Call ("SRL",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"SRL",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("Shift",CTy"instruction", Call ("SRA",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"SRA",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("ArithR",CTy"instruction", Call ("OR",CTy"ArithR", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"OR",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("ArithR",CTy"instruction", Call ("AND",CTy"ArithR", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"AND",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("ArithI",CTy"instruction", Call ("ADDIW",CTy"ArithI", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("pItype",sTy, TP[LS"ADDIW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Shift",CTy"instruction", Call ("SLLIW",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)])), Call ("pItype",sTy, TP[LS"SLLIW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)])), (Call ("Shift",CTy"instruction", Call ("SRLIW",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)])), Call ("pItype",sTy, TP[LS"SRLIW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)])), (Call ("Shift",CTy"instruction", Call ("SRAIW",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)])), Call ("pItype",sTy, TP[LS"SRAIW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)])), (Call ("ArithR",CTy"instruction", Call ("ADDW",CTy"ArithR", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"ADDW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("ArithR",CTy"instruction", Call ("SUBW",CTy"ArithR", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"SUBW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("Shift",CTy"instruction", Call ("SLLW",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"SLLW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("Shift",CTy"instruction", Call ("SRLW",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"SRLW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("Shift",CTy"instruction", Call ("SRAW",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"SRAW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("MulDiv",CTy"instruction", Call ("MUL",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"MUL",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("MulDiv",CTy"instruction", Call ("MULH",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"MULH",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("MulDiv",CTy"instruction", Call ("MULHSU",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"MULHSU",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("MulDiv",CTy"instruction", Call ("MULHU",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"MULHU",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("MulDiv",CTy"instruction", Call ("DIV",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"DIV",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("MulDiv",CTy"instruction", Call ("DIVU",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"DIVU",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("MulDiv",CTy"instruction", Call ("REM",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"REM",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("MulDiv",CTy"instruction", Call ("REMU",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"REMU",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("MulDiv",CTy"instruction", Call ("MULW",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"MULW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("MulDiv",CTy"instruction", Call ("DIVW",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"DIVW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("MulDiv",CTy"instruction", Call ("DIVUW",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"DIVUW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("MulDiv",CTy"instruction", Call ("REMW",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"REMW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("MulDiv",CTy"instruction", Call ("REMUW",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pRtype",sTy, TP[LS"REMUW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("Load",CTy"instruction", Call ("LB",CTy"Load", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("pItype",sTy, TP[LS"LB",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Load",CTy"instruction", Call ("LH",CTy"Load", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("pItype",sTy, TP[LS"LH",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Load",CTy"instruction", Call ("LW",CTy"Load", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("pItype",sTy, TP[LS"LW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Load",CTy"instruction", Call ("LD",CTy"Load", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("pItype",sTy, TP[LS"LD",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Load",CTy"instruction", Call ("LBU",CTy"Load", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("pItype",sTy, TP[LS"LBU",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Load",CTy"instruction", Call ("LHU",CTy"Load", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("pItype",sTy, TP[LS"LHU",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Load",CTy"instruction", Call ("LWU",CTy"Load", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("pItype",sTy, TP[LS"LWU",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Store",CTy"instruction", Call ("SB",CTy"Store", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("pStype",sTy, TP[LS"SB",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("Store",CTy"instruction", Call ("SH",CTy"Store", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("pStype",sTy, TP[LS"SH",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("Store",CTy"instruction", Call ("SW",CTy"Store", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("pStype",sTy, TP[LS"SW",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("Store",CTy"instruction", Call ("SD",CTy"Store", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("pStype",sTy, TP[LS"SD",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("FENCE",CTy"instruction", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("pred",F4), Var("succ",F4)]),Call("pN0type",sTy,LS"FENCE")), (Call ("FENCE_I",CTy"instruction", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)]), Call("pN0type",sTy,LS"FENCE.I")), (Call ("FArith",CTy"instruction", Call ("FADD_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("frm",FTy 3)])), Call ("pFRtype",sTy, TP[LS"FADD.S",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FSUB_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("frm",FTy 3)])), Call ("pFRtype",sTy, TP[LS"FSUB.S",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FMUL_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("frm",FTy 3)])), Call ("pFRtype",sTy, TP[LS"FMUL.S",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FDIV_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("frm",FTy 3)])), Call ("pFRtype",sTy, TP[LS"FDIV.S",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FSQRT_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("pFR1type",sTy,TP[LS"FSQRT.S",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FMIN_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pFRtype",sTy, TP[LS"FMIN.S",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FMAX_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pFRtype",sTy, TP[LS"FMAX.S",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FEQ_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pFRtype",sTy, TP[LS"FEQ.S",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FLT_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pFRtype",sTy, TP[LS"FLT.S",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FLE_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pFRtype",sTy, TP[LS"FLE.S",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FMADD_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("rs3",FTy 5),Var("frm",FTy 3)])), Call ("pFR3type",sTy, TP[LS"FMADD.S",Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("rs3",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FMSUB_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("rs3",FTy 5),Var("frm",FTy 3)])), Call ("pFR3type",sTy, TP[LS"FMSUB.S",Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("rs3",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FNMADD_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("rs3",FTy 5),Var("frm",FTy 3)])), Call ("pFR3type",sTy, TP[LS"FNMADD.S",Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("rs3",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FNMSUB_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("rs3",FTy 5),Var("frm",FTy 3)])), Call ("pFR3type",sTy, TP[LS"FNMSUB.S",Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("rs3",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FADD_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("frm",FTy 3)])), Call ("pFRtype",sTy, TP[LS"FADD.D",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FSUB_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("frm",FTy 3)])), Call ("pFRtype",sTy, TP[LS"FSUB.D",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FMUL_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("frm",FTy 3)])), Call ("pFRtype",sTy, TP[LS"FMUL.D",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FDIV_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("frm",FTy 3)])), Call ("pFRtype",sTy, TP[LS"FDIV.D",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FSQRT_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("pFR1type",sTy,TP[LS"FSQRT.D",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FMIN_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pFRtype",sTy, TP[LS"FMIN.D",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FMAX_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pFRtype",sTy, TP[LS"FMAX.D",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FEQ_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pFRtype",sTy, TP[LS"FEQ.D",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FLT_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pFRtype",sTy, TP[LS"FLT.D",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FLE_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pFRtype",sTy, TP[LS"FLE.D",Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FMADD_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("rs3",FTy 5),Var("frm",FTy 3)])), Call ("pFR3type",sTy, TP[LS"FMADD.D",Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("rs3",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FMSUB_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("rs3",FTy 5),Var("frm",FTy 3)])), Call ("pFR3type",sTy, TP[LS"FMSUB.D",Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("rs3",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FNMADD_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("rs3",FTy 5),Var("frm",FTy 3)])), Call ("pFR3type",sTy, TP[LS"FNMADD.D",Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("rs3",FTy 5)])), (Call ("FArith",CTy"instruction", Call ("FNMSUB_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("rs3",FTy 5),Var("frm",FTy 3)])), Call ("pFR3type",sTy, TP[LS"FNMSUB.D",Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("rs3",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FSGNJ_S",CTy"FConv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pFRtype",sTy, TP[LS"FSGNJ.S",Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FSGNJN_S",CTy"FConv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pFRtype",sTy, TP[LS"FSGNJN.S",Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FSGNJX_S",CTy"FConv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pFRtype",sTy, TP[LS"FSGNJX.S",Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FCVT_W_S",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("pCIFtype",sTy,TP[LS"FCVT.W.S",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FCVT_WU_S",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("pCIFtype",sTy, TP[LS"FCVT.WU.S",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call("FMV_X_S",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])), Call ("pCIFtype",sTy,TP[LS"FMV.X.S",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call("FCLASS_S",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])), Call ("pCIFtype",sTy,TP[LS"FCLASS.S",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FCVT_S_W",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("pCFItype",sTy,TP[LS"FCVT.S.W",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FCVT_S_WU",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("pCFItype",sTy, TP[LS"FCVT.S.WU",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call("FMV_S_X",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])), Call ("pCFItype",sTy,TP[LS"FMV.S.X",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FSGNJ_D",CTy"FConv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pFRtype",sTy, TP[LS"FSGNJ.D",Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FSGNJN_D",CTy"FConv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pFRtype",sTy, TP[LS"FSGNJN.D",Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FSGNJX_D",CTy"FConv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pFRtype",sTy, TP[LS"FSGNJX.D",Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FCVT_W_D",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("pCIFtype",sTy,TP[LS"FCVT.W.D",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FCVT_WU_D",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("pCIFtype",sTy, TP[LS"FCVT.WU.D",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call("FCLASS_D",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])), Call ("pCIFtype",sTy,TP[LS"FCLASS.D",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FCVT_D_W",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("pCFItype",sTy,TP[LS"FCVT.D.W",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FCVT_D_WU",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("pCFItype",sTy, TP[LS"FCVT.D.WU",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FCVT_L_S",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("pCIFtype",sTy,TP[LS"FCVT.L.S",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FCVT_LU_S",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("pCIFtype",sTy, TP[LS"FCVT.LU.S",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FCVT_S_L",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("pCFItype",sTy,TP[LS"FCVT.S.L",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FCVT_S_LU",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("pCFItype",sTy, TP[LS"FCVT.S.LU",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FCVT_L_D",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("pCIFtype",sTy,TP[LS"FCVT.L.D",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FCVT_LU_D",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("pCIFtype",sTy, TP[LS"FCVT.LU.D",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call("FMV_X_D",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])), Call ("pCIFtype",sTy,TP[LS"FMV.X.D",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FCVT_D_L",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("pCFItype",sTy,TP[LS"FCVT.D.L",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FCVT_D_LU",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("pCFItype",sTy, TP[LS"FCVT.D.LU",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call("FMV_D_X",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])), Call ("pCFItype",sTy,TP[LS"FMV.D.X",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FCVT_D_S",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("pCFItype",sTy,TP[LS"FCVT.D.S",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FConv",CTy"instruction", Call ("FCVT_S_D",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("pCFItype",sTy,TP[LS"FCVT.S.D",Var("rd",FTy 5),Var("rs",FTy 5)])), (Call ("FPLoad",CTy"instruction", Call ("FLW",CTy"FPLoad", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("pFItype",sTy, TP[LS"FLW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("FPLoad",CTy"instruction", Call ("FLD",CTy"FPLoad", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("pFItype",sTy, TP[LS"FLD",Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("FPStore",CTy"instruction", Call ("FSW",CTy"FPStore", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("pFStype",sTy, TP[LS"FSW",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("FPStore",CTy"instruction", Call ("FSD",CTy"FPStore", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("pFStype",sTy, TP[LS"FSD",Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("AMO",CTy"instruction", Call ("LR_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5)])), Call ("pLRtype",sTy, TP[LS"LR.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("LR_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5)])), Call ("pLRtype",sTy, TP[LS"LR.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("SC_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pARtype",sTy, TP[LS"SC.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("SC_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pARtype",sTy, TP[LS"SC.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("AMOSWAP_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pARtype",sTy, TP[LS"AMOSWAP.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("AMOADD_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pARtype",sTy, TP[LS"AMOADD.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("AMOXOR_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pARtype",sTy, TP[LS"AMOXOR.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("AMOAND_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pARtype",sTy, TP[LS"AMOAND.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("AMOOR_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pARtype",sTy, TP[LS"AMOOR.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("AMOMIN_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pARtype",sTy, TP[LS"AMOMIN.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("AMOMAX_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pARtype",sTy, TP[LS"AMOMAX.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("AMOMINU_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pARtype",sTy, TP[LS"AMOMINU.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("AMOMAXU_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pARtype",sTy, TP[LS"AMOMAXU.W",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("AMOSWAP_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pARtype",sTy, TP[LS"AMOSWAP.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("AMOADD_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pARtype",sTy, TP[LS"AMOADD.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("AMOXOR_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pARtype",sTy, TP[LS"AMOXOR.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("AMOAND_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pARtype",sTy, TP[LS"AMOAND.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("AMOOR_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pARtype",sTy, TP[LS"AMOOR.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("AMOMIN_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pARtype",sTy, TP[LS"AMOMIN.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("AMOMAX_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pARtype",sTy, TP[LS"AMOMAX.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("AMOMINU_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pARtype",sTy, TP[LS"AMOMINU.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call ("AMO",CTy"instruction", Call ("AMOMAXU_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("pARtype",sTy, TP[LS"AMOMAXU.D",Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), (Call("System",CTy"instruction",Const("ECALL",CTy"System")), Call("pN0type",sTy,LS"ECALL")), (Call("System",CTy"instruction",Const("EBREAK",CTy"System")), Call("pN0type",sTy,LS"EBREAK")), (Call("System",CTy"instruction",Const("ERET",CTy"System")), Call("pN0type",sTy,LS"ERET")), (Call("System",CTy"instruction",Const("MRTS",CTy"System")), Call("pN0type",sTy,LS"MRTS")), (Call("System",CTy"instruction",Const("WFI",CTy"System")), Call("pN0type",sTy,LS"WFI")), (Call ("System",CTy"instruction", Call ("CSRRW",CTy"System", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)])), Call ("pCSRtype",sTy, TP[LS"CSRRW",Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)])), (Call ("System",CTy"instruction", Call ("CSRRS",CTy"System", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)])), Call ("pCSRtype",sTy, TP[LS"CSRRS",Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)])), (Call ("System",CTy"instruction", Call ("CSRRC",CTy"System", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)])), Call ("pCSRtype",sTy, TP[LS"CSRRC",Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)])), (Call ("System",CTy"instruction", Call ("CSRRWI",CTy"System", TP[Var("rd",FTy 5),Var("imm",FTy 5),Var("csr",FTy 12)])), Call ("pCSRItype",sTy, TP[LS"CSRRWI",Var("rd",FTy 5),Var("imm",FTy 5), Var("csr",FTy 12)])), (Call ("System",CTy"instruction", Call ("CSRRSI",CTy"System", TP[Var("rd",FTy 5),Var("imm",FTy 5),Var("csr",FTy 12)])), Call ("pCSRItype",sTy, TP[LS"CSRRSI",Var("rd",FTy 5),Var("imm",FTy 5), Var("csr",FTy 12)])), (Call ("System",CTy"instruction", Call ("CSRRCI",CTy"System", TP[Var("rd",FTy 5),Var("imm",FTy 5),Var("csr",FTy 12)])), Call ("pCSRItype",sTy, TP[LS"CSRRCI",Var("rd",FTy 5),Var("imm",FTy 5), Var("csr",FTy 12)])), (Call ("System",CTy"instruction", Call("SFENCE_VM",CTy"System",Var("rs1",FTy 5))), Call("pN1type",sTy,TP[LS"SFENCE.VM",Var("rs1",FTy 5)])), (Const("UnknownInstruction",CTy"instruction"), Call("pN0type",sTy,LS"UNKNOWN")), (Call ("Internal",CTy"instruction", Call("FETCH_MISALIGNED",CTy"Internal",AVar F64)), Call("pN0type",sTy,LS"FETCH_MISALIGNED")), (Call ("Internal",CTy"instruction", Call("FETCH_FAULT",CTy"Internal",AVar F64)), Call("pN0type",sTy,LS"FETCH_FAULT"))])) ; val Rtype_def = Def ("Rtype", TP[Var("o",FTy 7),Var("f3",FTy 3),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("f7",FTy 7)], CC[Var("f7",FTy 7),Var("rs2",FTy 5),Var("rs1",FTy 5),Var("f3",FTy 3), Var("rd",FTy 5),Var("o",FTy 7)]) ; val R4type_def = Def ("R4type", TP[Var("o",FTy 7),Var("f3",FTy 3),Var("rd",FTy 5),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("rs3",FTy 5),Var("f2",FTy 2)], CC[Var("rs3",FTy 5),Var("f2",FTy 2),Var("rs2",FTy 5),Var("rs1",FTy 5), Var("f3",FTy 3),Var("rd",FTy 5),Var("o",FTy 7)]) ; val Itype_def = Def ("Itype", TP[Var("o",FTy 7),Var("f3",FTy 3),Var("rd",FTy 5),Var("rs1",FTy 5), Var("imm",FTy 12)], CC[Var("imm",FTy 12),Var("rs1",FTy 5),Var("f3",FTy 3),Var("rd",FTy 5), Var("o",FTy 7)]) ; val Stype_def = Def ("Stype", TP[Var("o",FTy 7),Var("f3",FTy 3),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("imm",FTy 12)], CC[EX(Var("imm",FTy 12),LN 11,LN 5,FTy 7),Var("rs2",FTy 5), Var("rs1",FTy 5),Var("f3",FTy 3), EX(Var("imm",FTy 12),LN 4,LN 0,FTy 5),Var("o",FTy 7)]) ; val SBtype_def = Def ("SBtype", TP[Var("o",FTy 7),Var("f3",FTy 3),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("imm",FTy 12)], CC[Mop(Cast F1,Bop(Bit,Var("imm",FTy 12),LN 11)), EX(Var("imm",FTy 12),LN 9,LN 4,FTy 6),Var("rs2",FTy 5), Var("rs1",FTy 5),Var("f3",FTy 3),EX(Var("imm",FTy 12),LN 3,LN 0,F4), Mop(Cast F1,Bop(Bit,Var("imm",FTy 12),LN 10)),Var("o",FTy 7)]) ; val Utype_def = Def ("Utype",TP[Var("o",FTy 7),Var("rd",FTy 5),Var("imm",FTy 20)], CC[Var("imm",FTy 20),Var("rd",FTy 5),Var("o",FTy 7)]) ; val UJtype_def = Def ("UJtype",TP[Var("o",FTy 7),Var("rd",FTy 5),Var("imm",FTy 20)], CC[Mop(Cast F1,Bop(Bit,Var("imm",FTy 20),LN 19)), EX(Var("imm",FTy 20),LN 9,LN 0,FTy 10), Mop(Cast F1,Bop(Bit,Var("imm",FTy 20),LN 10)), EX(Var("imm",FTy 20),LN 18,LN 11,F8),Var("rd",FTy 5),Var("o",FTy 7)]) ; val opc_def = Def ("opc",Var("code",F8),CC[EX(Var("code",F8),LN 4,LN 0,FTy 5),LW(3,2)]) ; val amofunc_def = Def ("amofunc",TP[Var("code",FTy 5),Var("aq",F1),Var("rl",F1)], CC[Var("code",FTy 5),Var("aq",F1),Var("rl",F1)]) ; val Encode_def = Def ("Encode",Var("i",CTy"instruction"), CS(Var("i",CTy"instruction"), [(Call ("Branch",CTy"instruction", Call ("BEQ",CTy"Branch", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("SBtype",F32, TP[Call("opc",FTy 7,LW(24,8)),LW(0,3),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("Branch",CTy"instruction", Call ("BNE",CTy"Branch", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("SBtype",F32, TP[Call("opc",FTy 7,LW(24,8)),LW(1,3),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("Branch",CTy"instruction", Call ("BLT",CTy"Branch", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("SBtype",F32, TP[Call("opc",FTy 7,LW(24,8)),LW(4,3),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("Branch",CTy"instruction", Call ("BGE",CTy"Branch", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("SBtype",F32, TP[Call("opc",FTy 7,LW(24,8)),LW(5,3),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("Branch",CTy"instruction", Call ("BLTU",CTy"Branch", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("SBtype",F32, TP[Call("opc",FTy 7,LW(24,8)),LW(6,3),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("Branch",CTy"instruction", Call ("BGEU",CTy"Branch", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("SBtype",F32, TP[Call("opc",FTy 7,LW(24,8)),LW(7,3),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("Branch",CTy"instruction", Call ("JALR",CTy"Branch", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(25,8)),LW(0,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Branch",CTy"instruction", Call("JAL",CTy"Branch",TP[Var("rd",FTy 5),Var("imm",FTy 20)])), Call ("UJtype",F32, TP[Call("opc",FTy 7,LW(27,8)),Var("rd",FTy 5),Var("imm",FTy 20)])), (Call ("ArithI",CTy"instruction", Call("LUI",CTy"ArithI",TP[Var("rd",FTy 5),Var("imm",FTy 20)])), Call ("Utype",F32, TP[Call("opc",FTy 7,LW(13,8)),Var("rd",FTy 5),Var("imm",FTy 20)])), (Call ("ArithI",CTy"instruction", Call("AUIPC",CTy"ArithI",TP[Var("rd",FTy 5),Var("imm",FTy 20)])), Call ("Utype",F32, TP[Call("opc",FTy 7,LW(5,8)),Var("rd",FTy 5),Var("imm",FTy 20)])), (Call ("ArithI",CTy"instruction", Call ("ADDI",CTy"ArithI", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(4,8)),LW(0,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Shift",CTy"instruction", Call ("SLLI",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(4,8)),LW(1,3),Var("rd",FTy 5), Var("rs1",FTy 5),CC[LW(0,6),Var("imm",FTy 6)]])), (Call ("ArithI",CTy"instruction", Call ("SLTI",CTy"ArithI", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(4,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("ArithI",CTy"instruction", Call ("SLTIU",CTy"ArithI", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(4,8)),LW(3,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("ArithI",CTy"instruction", Call ("XORI",CTy"ArithI", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(4,8)),LW(4,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Shift",CTy"instruction", Call ("SRLI",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(4,8)),LW(5,3),Var("rd",FTy 5), Var("rs1",FTy 5),CC[LW(0,6),Var("imm",FTy 6)]])), (Call ("Shift",CTy"instruction", Call ("SRAI",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 6)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(4,8)),LW(5,3),Var("rd",FTy 5), Var("rs1",FTy 5),CC[LW(16,6),Var("imm",FTy 6)]])), (Call ("ArithI",CTy"instruction", Call ("ORI",CTy"ArithI", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(4,8)),LW(6,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("ArithI",CTy"instruction", Call ("ANDI",CTy"ArithI", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(4,8)),LW(7,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("ArithR",CTy"instruction", Call ("ADD",CTy"ArithR", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(12,8)),LW(0,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])), (Call ("ArithR",CTy"instruction", Call ("SUB",CTy"ArithR", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(12,8)),LW(0,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(32,7)])), (Call ("Shift",CTy"instruction", Call ("SLL",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(12,8)),LW(1,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])), (Call ("ArithR",CTy"instruction", Call ("SLT",CTy"ArithR", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(12,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])), (Call ("ArithR",CTy"instruction", Call ("SLTU",CTy"ArithR", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(12,8)),LW(3,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])), (Call ("ArithR",CTy"instruction", Call ("XOR",CTy"ArithR", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(12,8)),LW(4,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])), (Call ("Shift",CTy"instruction", Call ("SRL",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(12,8)),LW(5,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])), (Call ("Shift",CTy"instruction", Call ("SRA",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(12,8)),LW(5,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(32,7)])), (Call ("ArithR",CTy"instruction", Call ("OR",CTy"ArithR", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(12,8)),LW(6,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])), (Call ("ArithR",CTy"instruction", Call ("AND",CTy"ArithR", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(12,8)),LW(7,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])), (Call ("ArithI",CTy"instruction", Call ("ADDIW",CTy"ArithI", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(6,8)),LW(0,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Shift",CTy"instruction", Call ("SLLIW",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(6,8)),LW(1,3),Var("rd",FTy 5), Var("rs1",FTy 5),CC[LW(0,7),Var("imm",FTy 5)]])), (Call ("Shift",CTy"instruction", Call ("SRLIW",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(6,8)),LW(5,3),Var("rd",FTy 5), Var("rs1",FTy 5),CC[LW(0,7),Var("imm",FTy 5)]])), (Call ("Shift",CTy"instruction", Call ("SRAIW",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 5)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(6,8)),LW(5,3),Var("rd",FTy 5), Var("rs1",FTy 5),CC[LW(32,7),Var("imm",FTy 5)]])), (Call ("ArithR",CTy"instruction", Call ("ADDW",CTy"ArithR", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(14,8)),LW(0,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])), (Call ("ArithR",CTy"instruction", Call ("SUBW",CTy"ArithR", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(14,8)),LW(0,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(32,7)])), (Call ("Shift",CTy"instruction", Call ("SLLW",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(14,8)),LW(1,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])), (Call ("Shift",CTy"instruction", Call ("SRLW",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(14,8)),LW(5,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])), (Call ("Shift",CTy"instruction", Call ("SRAW",CTy"Shift", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(14,8)),LW(5,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(32,7)])), (Call ("MulDiv",CTy"instruction", Call ("MUL",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(12,8)),LW(0,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])), (Call ("MulDiv",CTy"instruction", Call ("MULH",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(12,8)),LW(1,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])), (Call ("MulDiv",CTy"instruction", Call ("MULHSU",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(12,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])), (Call ("MulDiv",CTy"instruction", Call ("MULHU",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(12,8)),LW(3,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])), (Call ("MulDiv",CTy"instruction", Call ("DIV",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(12,8)),LW(4,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])), (Call ("MulDiv",CTy"instruction", Call ("DIVU",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(12,8)),LW(5,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])), (Call ("MulDiv",CTy"instruction", Call ("REM",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(12,8)),LW(6,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])), (Call ("MulDiv",CTy"instruction", Call ("REMU",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(12,8)),LW(7,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])), (Call ("MulDiv",CTy"instruction", Call ("MULW",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(14,8)),LW(0,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])), (Call ("MulDiv",CTy"instruction", Call ("DIVW",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(14,8)),LW(4,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])), (Call ("MulDiv",CTy"instruction", Call ("DIVUW",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(14,8)),LW(5,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])), (Call ("MulDiv",CTy"instruction", Call ("REMW",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(14,8)),LW(6,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])), (Call ("MulDiv",CTy"instruction", Call ("REMUW",CTy"MulDiv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(14,8)),LW(7,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])), (Call ("Load",CTy"instruction", Call ("LB",CTy"Load", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(0,8)),LW(0,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Load",CTy"instruction", Call ("LH",CTy"Load", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(0,8)),LW(1,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Load",CTy"instruction", Call ("LW",CTy"Load", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(0,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Load",CTy"instruction", Call ("LD",CTy"Load", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(0,8)),LW(3,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Load",CTy"instruction", Call ("LBU",CTy"Load", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(0,8)),LW(4,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Load",CTy"instruction", Call ("LHU",CTy"Load", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(0,8)),LW(5,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Load",CTy"instruction", Call ("LWU",CTy"Load", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(0,8)),LW(6,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("Store",CTy"instruction", Call ("SB",CTy"Store", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("Stype",F32, TP[Call("opc",FTy 7,LW(8,8)),LW(0,3),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("Store",CTy"instruction", Call ("SH",CTy"Store", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("Stype",F32, TP[Call("opc",FTy 7,LW(8,8)),LW(1,3),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("Store",CTy"instruction", Call ("SW",CTy"Store", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("Stype",F32, TP[Call("opc",FTy 7,LW(8,8)),LW(2,3),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("Store",CTy"instruction", Call ("SD",CTy"Store", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("Stype",F32, TP[Call("opc",FTy 7,LW(8,8)),LW(3,3),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("FENCE",CTy"instruction", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("pred",F4), Var("succ",F4)]), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(3,8)),LW(0,3),Var("rd",FTy 5), Var("rs1",FTy 5),CC[LW(0,4),Var("pred",F4),Var("succ",F4)]])), (Call ("FENCE_I",CTy"instruction", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)]), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(3,8)),LW(1,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("FArith",CTy"instruction", Call ("FADD_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(0,7)])), (Call ("FArith",CTy"instruction", Call ("FSUB_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(4,7)])), (Call ("FArith",CTy"instruction", Call ("FMUL_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(8,7)])), (Call ("FArith",CTy"instruction", Call ("FDIV_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(12,7)])), (Call ("FArith",CTy"instruction", Call ("FSQRT_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs",FTy 5),LW(0,5),LW(44,7)])), (Call ("FArith",CTy"instruction", Call ("FMIN_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(0,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(20,7)])), (Call ("FArith",CTy"instruction", Call ("FMAX_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(1,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(20,7)])), (Call ("FArith",CTy"instruction", Call ("FEQ_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(80,7)])), (Call ("FArith",CTy"instruction", Call ("FLT_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(1,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(80,7)])), (Call ("FArith",CTy"instruction", Call ("FLE_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(0,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(80,7)])), (Call ("FArith",CTy"instruction", Call ("FADD_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(1,7)])), (Call ("FArith",CTy"instruction", Call ("FSUB_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(5,7)])), (Call ("FArith",CTy"instruction", Call ("FMUL_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(9,7)])), (Call ("FArith",CTy"instruction", Call ("FDIV_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(13,7)])), (Call ("FArith",CTy"instruction", Call ("FSQRT_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs",FTy 5),LW(0,5),LW(45,7)])), (Call ("FArith",CTy"instruction", Call ("FMIN_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(0,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(21,7)])), (Call ("FArith",CTy"instruction", Call ("FMAX_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(1,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(21,7)])), (Call ("FArith",CTy"instruction", Call ("FEQ_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(81,7)])), (Call ("FArith",CTy"instruction", Call ("FLT_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(1,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(81,7)])), (Call ("FArith",CTy"instruction", Call ("FLE_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(0,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(81,7)])), (Call ("FPLoad",CTy"instruction", Call ("FLW",CTy"FPLoad", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(1,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("FPLoad",CTy"instruction", Call ("FLD",CTy"FPLoad", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("imm",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(1,8)),LW(3,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("imm",FTy 12)])), (Call ("FPStore",CTy"instruction", Call ("FSW",CTy"FPStore", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("Stype",F32, TP[Call("opc",FTy 7,LW(9,8)),LW(2,3),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("FPStore",CTy"instruction", Call ("FSD",CTy"FPStore", TP[Var("rs1",FTy 5),Var("rs2",FTy 5),Var("imm",FTy 12)])), Call ("Stype",F32, TP[Call("opc",FTy 7,LW(9,8)),LW(3,3),Var("rs1",FTy 5), Var("rs2",FTy 5),Var("imm",FTy 12)])), (Call ("FArith",CTy"instruction", Call ("FMADD_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("rs3",FTy 5),Var("frm",FTy 3)])), Call ("R4type",F32, TP[Call("opc",FTy 7,LW(16,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),LW(0,2)])), (Call ("FArith",CTy"instruction", Call ("FMSUB_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("rs3",FTy 5),Var("frm",FTy 3)])), Call ("R4type",F32, TP[Call("opc",FTy 7,LW(17,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),LW(0,2)])), (Call ("FArith",CTy"instruction", Call ("FNMSUB_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("rs3",FTy 5),Var("frm",FTy 3)])), Call ("R4type",F32, TP[Call("opc",FTy 7,LW(18,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),LW(0,2)])), (Call ("FArith",CTy"instruction", Call ("FNMADD_S",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("rs3",FTy 5),Var("frm",FTy 3)])), Call ("R4type",F32, TP[Call("opc",FTy 7,LW(19,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),LW(0,2)])), (Call ("FArith",CTy"instruction", Call ("FMADD_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("rs3",FTy 5),Var("frm",FTy 3)])), Call ("R4type",F32, TP[Call("opc",FTy 7,LW(16,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),LW(1,2)])), (Call ("FArith",CTy"instruction", Call ("FMSUB_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("rs3",FTy 5),Var("frm",FTy 3)])), Call ("R4type",F32, TP[Call("opc",FTy 7,LW(17,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),LW(1,2)])), (Call ("FArith",CTy"instruction", Call ("FNMSUB_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("rs3",FTy 5),Var("frm",FTy 3)])), Call ("R4type",F32, TP[Call("opc",FTy 7,LW(18,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),LW(1,2)])), (Call ("FArith",CTy"instruction", Call ("FNMADD_D",CTy"FArith", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5), Var("rs3",FTy 5),Var("frm",FTy 3)])), Call ("R4type",F32, TP[Call("opc",FTy 7,LW(19,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),Var("rs3",FTy 5),LW(1,2)])), (Call ("FConv",CTy"instruction", Call ("FSGNJ_S",CTy"FConv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(0,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(16,7)])), (Call ("FConv",CTy"instruction", Call ("FSGNJN_S",CTy"FConv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(1,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(16,7)])), (Call ("FConv",CTy"instruction", Call ("FSGNJX_S",CTy"FConv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(16,7)])), (Call ("FConv",CTy"instruction", Call ("FCVT_W_S",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs",FTy 5),LW(0,5),LW(96,7)])), (Call ("FConv",CTy"instruction", Call ("FCVT_WU_S",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs",FTy 5),LW(1,5),LW(96,7)])), (Call ("FConv",CTy"instruction", Call("FMV_X_S",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(0,3),Var("rd",FTy 5), Var("rs",FTy 5),LW(0,5),LW(112,7)])), (Call ("FConv",CTy"instruction", Call("FCLASS_S",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(1,3),Var("rd",FTy 5), Var("rs",FTy 5),LW(0,5),LW(112,7)])), (Call ("FConv",CTy"instruction", Call ("FCVT_S_W",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs",FTy 5),LW(0,5),LW(104,7)])), (Call ("FConv",CTy"instruction", Call ("FCVT_S_WU",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs",FTy 5),LW(1,5),LW(104,7)])), (Call ("FConv",CTy"instruction", Call("FMV_S_X",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(0,3),Var("rd",FTy 5), Var("rs",FTy 5),LW(0,5),LW(120,7)])), (Call ("FConv",CTy"instruction", Call ("FSGNJ_D",CTy"FConv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(0,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(17,7)])), (Call ("FConv",CTy"instruction", Call ("FSGNJN_D",CTy"FConv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(1,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(17,7)])), (Call ("FConv",CTy"instruction", Call ("FSGNJX_D",CTy"FConv", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5),LW(17,7)])), (Call ("FConv",CTy"instruction", Call ("FCVT_W_D",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs",FTy 5),LW(0,5),LW(97,7)])), (Call ("FConv",CTy"instruction", Call ("FCVT_WU_D",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs",FTy 5),LW(1,5),LW(97,7)])), (Call ("FConv",CTy"instruction", Call("FCLASS_D",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(1,3),Var("rd",FTy 5), Var("rs",FTy 5),LW(0,5),LW(113,7)])), (Call ("FConv",CTy"instruction", Call ("FCVT_D_W",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs",FTy 5),LW(0,5),LW(105,7)])), (Call ("FConv",CTy"instruction", Call ("FCVT_D_WU",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs",FTy 5),LW(1,5),LW(105,7)])), (Call ("FConv",CTy"instruction", Call ("FCVT_S_D",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs",FTy 5),LW(1,5),LW(32,7)])), (Call ("FConv",CTy"instruction", Call ("FCVT_D_S",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs",FTy 5),LW(0,5),LW(33,7)])), (Call ("FConv",CTy"instruction", Call ("FCVT_L_S",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs",FTy 5),LW(2,5),LW(96,7)])), (Call ("FConv",CTy"instruction", Call ("FCVT_LU_S",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs",FTy 5),LW(3,5),LW(96,7)])), (Call ("FConv",CTy"instruction", Call ("FCVT_S_L",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs",FTy 5),LW(2,5),LW(104,7)])), (Call ("FConv",CTy"instruction", Call ("FCVT_S_LU",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs",FTy 5),LW(3,5),LW(104,7)])), (Call ("FConv",CTy"instruction", Call ("FCVT_L_D",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs",FTy 5),LW(2,5),LW(97,7)])), (Call ("FConv",CTy"instruction", Call ("FCVT_LU_D",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs",FTy 5),LW(3,5),LW(97,7)])), (Call ("FConv",CTy"instruction", Call("FMV_X_D",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(0,3),Var("rd",FTy 5), Var("rs",FTy 5),LW(0,5),LW(113,7)])), (Call ("FConv",CTy"instruction", Call ("FCVT_D_L",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs",FTy 5),LW(2,5),LW(105,7)])), (Call ("FConv",CTy"instruction", Call ("FCVT_D_LU",CTy"FConv", TP[Var("rd",FTy 5),Var("rs",FTy 5),Var("frm",FTy 3)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),Var("frm",FTy 3),Var("rd",FTy 5), Var("rs",FTy 5),LW(3,5),LW(105,7)])), (Call ("FConv",CTy"instruction", Call("FMV_D_X",CTy"FConv",TP[Var("rd",FTy 5),Var("rs",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(20,8)),LW(0,3),Var("rd",FTy 5), Var("rs",FTy 5),LW(0,5),LW(121,7)])), (Call ("AMO",CTy"instruction", Call ("LR_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),LW(0,5), Call("amofunc",FTy 7,TP[LW(2,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("LR_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5), Var("rs1",FTy 5),LW(0,5), Call("amofunc",FTy 7,TP[LW(2,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("SC_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5), Call("amofunc",FTy 7,TP[LW(3,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("SC_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5), Call("amofunc",FTy 7,TP[LW(2,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("AMOSWAP_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5), Call("amofunc",FTy 7,TP[LW(1,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("AMOADD_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5), Call("amofunc",FTy 7,TP[LW(0,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("AMOXOR_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5), Call("amofunc",FTy 7,TP[LW(4,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("AMOAND_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5), Call("amofunc",FTy 7,TP[LW(12,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("AMOOR_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5), Call("amofunc",FTy 7,TP[LW(8,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("AMOMIN_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5), Call("amofunc",FTy 7,TP[LW(16,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("AMOMAX_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5), Call("amofunc",FTy 7,TP[LW(20,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("AMOMINU_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5), Call("amofunc",FTy 7,TP[LW(24,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("AMOMAXU_W",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5), Call("amofunc",FTy 7,TP[LW(28,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("AMOSWAP_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5), Call("amofunc",FTy 7,TP[LW(1,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("AMOADD_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5), Call("amofunc",FTy 7,TP[LW(0,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("AMOXOR_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5), Call("amofunc",FTy 7,TP[LW(4,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("AMOAND_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5), Call("amofunc",FTy 7,TP[LW(12,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("AMOOR_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5), Call("amofunc",FTy 7,TP[LW(8,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("AMOMIN_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5), Call("amofunc",FTy 7,TP[LW(16,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("AMOMAX_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5), Call("amofunc",FTy 7,TP[LW(20,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("AMOMINU_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5), Call("amofunc",FTy 7,TP[LW(24,5),Var("aq",F1),Var("rl",F1)])])), (Call ("AMO",CTy"instruction", Call ("AMOMAXU_D",CTy"AMO", TP[Var("aq",F1),Var("rl",F1),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5)])), Call ("Rtype",F32, TP[Call("opc",FTy 7,LW(11,8)),LW(3,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("rs2",FTy 5), Call("amofunc",FTy 7,TP[LW(28,5),Var("aq",F1),Var("rl",F1)])])), (Call("System",CTy"instruction",Const("ECALL",CTy"System")), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(28,8)),LW(0,3),LW(0,5),LW(0,5),LW(0,12)])), (Call("System",CTy"instruction",Const("EBREAK",CTy"System")), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(28,8)),LW(0,3),LW(0,5),LW(0,5),LW(1,12)])), (Call("System",CTy"instruction",Const("ERET",CTy"System")), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(28,8)),LW(0,3),LW(0,5),LW(0,5), LW(256,12)])), (Call("System",CTy"instruction",Const("MRTS",CTy"System")), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(28,8)),LW(0,3),LW(0,5),LW(0,5), LW(773,12)])), (Call("System",CTy"instruction",Const("WFI",CTy"System")), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(28,8)),LW(0,3),LW(0,5),LW(0,5), LW(258,12)])), (Call ("System",CTy"instruction", Call("SFENCE_VM",CTy"System",Var("rs1",FTy 5))), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(28,8)),LW(0,3),LW(0,5),Var("rs1",FTy 5), LW(257,12)])), (Call ("System",CTy"instruction", Call ("CSRRW",CTy"System", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(28,8)),LW(1,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("csr",FTy 12)])), (Call ("System",CTy"instruction", Call ("CSRRS",CTy"System", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(28,8)),LW(2,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("csr",FTy 12)])), (Call ("System",CTy"instruction", Call ("CSRRC",CTy"System", TP[Var("rd",FTy 5),Var("rs1",FTy 5),Var("csr",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(28,8)),LW(3,3),Var("rd",FTy 5), Var("rs1",FTy 5),Var("csr",FTy 12)])), (Call ("System",CTy"instruction", Call ("CSRRWI",CTy"System", TP[Var("rd",FTy 5),Var("imm",FTy 5),Var("csr",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(28,8)),LW(5,3),Var("rd",FTy 5), Var("imm",FTy 5),Var("csr",FTy 12)])), (Call ("System",CTy"instruction", Call ("CSRRSI",CTy"System", TP[Var("rd",FTy 5),Var("imm",FTy 5),Var("csr",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(28,8)),LW(6,3),Var("rd",FTy 5), Var("imm",FTy 5),Var("csr",FTy 12)])), (Call ("System",CTy"instruction", Call ("CSRRCI",CTy"System", TP[Var("rd",FTy 5),Var("imm",FTy 5),Var("csr",FTy 12)])), Call ("Itype",F32, TP[Call("opc",FTy 7,LW(28,8)),LW(7,3),Var("rd",FTy 5), Var("imm",FTy 5),Var("csr",FTy 12)])), (Const("UnknownInstruction",CTy"instruction"),LW(0,32)), (Call ("Internal",CTy"instruction", Call("FETCH_MISALIGNED",CTy"Internal",AVar F64)),LW(0,32)), (Call ("Internal",CTy"instruction", Call("FETCH_FAULT",CTy"Internal",AVar F64)),LW(0,32))])) ; val log_instruction_def = Def ("log_instruction",TP[Var("w",F32),Var("inst",CTy"instruction")], Close (qVar"state", CC[LS"instr ",Mop(Cast sTy,Dest("procID",F8,qVar"state")),LS" ", Mop(Cast sTy, Mop(Cast nTy, Apply (Dest("c_instret",ATy(F8,F64),qVar"state"), Dest("procID",F8,qVar"state")))),LS" 0x", Call("hex64",sTy,Apply(Const("PC",ATy(qTy,F64)),qVar"state")), LS" : ",Call("hex32",sTy,Var("w",F32)),LS" ", Call("instructionToString",sTy,Var("inst",CTy"instruction"))])) ; val exitCode_def = Def ("exitCode",AVar uTy, Close (qVar"state", Mop(Cast nTy,Apply(Const("ExitCode",ATy(qTy,F64)),qVar"state")))) ; val CYCLES_PER_TIMER_TICK_def = Def0 ("CYCLES_PER_TIMER_TICK",LN 200) ; val tickClock_def = Def ("tickClock",AVar uTy, Close (qVar"state", Let(Var("v",F64), Bop(Add, Apply (Dest("c_cycles",ATy(F8,F64),qVar"state"), Dest("procID",F8,qVar"state")),LW(1,64)), Rupd ("clock", TP[Rupd ("c_cycles", TP[qVar"state", Fupd (Dest("c_cycles",ATy(F8,F64),qVar"state"), Dest("procID",F8,qVar"state"),Var("v",F64))]), Bop(Div,Var("v",F64), Mop(Cast F64,Const("CYCLES_PER_TIMER_TICK",nTy)))])))) ; val incrInstret_def = Def ("incrInstret",AVar uTy, Close (qVar"state", Rupd ("c_instret", TP[qVar"state", Fupd (Dest("c_instret",ATy(F8,F64),qVar"state"), Dest("procID",F8,qVar"state"), Bop(Add, Apply (Dest("c_instret",ATy(F8,F64),qVar"state"), Dest("procID",F8,qVar"state")),LW(1,64)))]))) ; val checkTimers_def = Def ("checkTimers",AVar uTy, Close (qVar"state", Let(qVar"s", ITE(Bop(Ugt,Dest("clock",F64,qVar"state"), Bop(Add, Dest ("mtimecmp",F64, Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"state")), Dest ("mtime_delta",F64, Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"state")))), Let(Var("v",CTy"MachineCSR"), Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"state"), Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mip", TP[Var("v",CTy"MachineCSR"), Rupd ("MTIP", TP[Dest ("mip",CTy"mip", Var("v",CTy"MachineCSR")),LT])])), qVar"state")),qVar"state"), ITE(Bop(Ugt,Dest("clock",F64,qVar"s"), Bop(Add, Dest ("stimecmp",F64, Apply (Const("SCSR",ATy(qTy,CTy"SupervisorCSR")), qVar"s")), Dest ("stime_delta",F64, Apply (Const("SCSR",ATy(qTy,CTy"SupervisorCSR")), qVar"s")))), Let(Var("v",CTy"MachineCSR"), Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s"), Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mip", TP[Var("v",CTy"MachineCSR"), Rupd ("STIP", TP[Dest ("mip",CTy"mip", Var("v",CTy"MachineCSR")),LT])])), qVar"s")),qVar"s")))) ; val Next_def = Def ("Next",qVar"state", Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s",Apply(Call("clear_logs",ATy(qTy,qTy),LU),qVar"state"), TP[Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s"), qVar"s"]), Let(TP[Var("v",CTy"FetchResult"),qVar"s"], Apply (Call("Fetch",ATy(qTy,PTy(CTy"FetchResult",qTy)),LU), ITE(Mop(Not, EQ(Dest("mtohost",F64,Var("v",CTy"MachineCSR")), LW(0,64))), ITE(Bop(Bit, Dest ("mtohost",F64, Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"s")),LN 0), Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s0",Rupd("done",TP[qVar"s",LT]), TP[Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"s0"),qVar"s0"]), Apply (Call ("write'ExitCode",ATy(qTy,qTy), Bop(Asr, Dest ("mtohost",F64, Var("v",CTy"MachineCSR")),LN 1)), qVar"s")), Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mtohost", TP[Apply (Const ("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"s"),LW(0,64)])),qVar"s")), qVar"s")), Let(TP[Var("v",OTy(CTy"TransferControl")),qVar"s"], Let(qVar"s0", Apply (Call("checkTimers",ATy(qTy,qTy),LU), CS(Var("v",CTy"FetchResult"), [(Call("F_Result",CTy"FetchResult",Var("w",F32)), Apply (Call ("Run",ATy(qTy,qTy), Call ("Decode",CTy"instruction",Var("w",F32))), qVar"s")), (Call ("F_Error",CTy"FetchResult", Var("inst",CTy"instruction")), Apply (Call ("Run",ATy(qTy,qTy), Var("inst",CTy"instruction")),qVar"s"))])), TP[Apply (Const ("NextFetch",ATy(qTy,OTy(CTy"TransferControl"))), qVar"s0"),qVar"s0"]), Apply (Call("tickClock",ATy(qTy,qTy),LU), Let(TP[Var("v", PTy(OTy(CTy"TransferControl"), OTy(PTy(CTy"Interrupt",CTy"Privilege")))), qVar"s"], Let(TP[Var("v0", OTy(PTy(CTy"Interrupt",CTy"Privilege"))), qVar"s"], Apply (Call ("checkInterrupts", ATy(qTy, PTy(OTy(PTy(CTy"Interrupt", CTy"Privilege")),qTy)),LU), qVar"s"), TP[TP[Var("v",OTy(CTy"TransferControl")), Var("v0", OTy(PTy(CTy"Interrupt",CTy"Privilege")))], qVar"s"]), CS(Var("v", PTy(OTy(CTy"TransferControl"), OTy(PTy(CTy"Interrupt",CTy"Privilege")))), [(TP[LO(CTy"TransferControl"), LO(PTy(CTy"Interrupt",CTy"Privilege"))], Let(TP[Var("v",F64),qVar"s"], Let(qVar"s0", Apply (Call("incrInstret",ATy(qTy,qTy),LU), qVar"s"), TP[Apply (Const("PC",ATy(qTy,F64)),qVar"s0"), qVar"s0"]), Apply (Call ("write'PC",ATy(qTy,qTy), Bop(Add,Var("v",F64),LW(4,64))), qVar"s"))), (TP[LO(CTy"TransferControl"), Mop(Some, TP[Var("i",CTy"Interrupt"), Var("p",CTy"Privilege")])], Let(TP[Var("v",F64),qVar"s"], Let(qVar"s0", Apply (Call("incrInstret",ATy(qTy,qTy),LU), qVar"s"), TP[Apply (Const("PC",ATy(qTy,F64)),qVar"s0"), qVar"s0"]), Apply (Call ("takeTrap",ATy(qTy,qTy), TP[LT, Call ("interruptIndex",F4, Var("i",CTy"Interrupt")), Bop(Add,Var("v",F64),LW(4,64)), LO F64,Var("p",CTy"Privilege")]), qVar"s"))), (TP[Mop(Some, Call ("BranchTo",CTy"TransferControl", Var("addr",F64))), AVar (OTy(PTy(CTy"Interrupt",CTy"Privilege")))], Apply (Call ("write'PC",ATy(qTy,qTy),Var("addr",F64)), Apply (Call ("write'NextFetch",ATy(qTy,qTy), LO(CTy"TransferControl")), Apply (Call("incrInstret",ATy(qTy,qTy),LU), qVar"s")))), (TP[Mop(Some, Const("Ereturn",CTy"TransferControl")), AVar (OTy(PTy(CTy"Interrupt",CTy"Privilege")))], Let(TP[Var("v",F64),qVar"s"], Apply (Call("curEPC",ATy(qTy,PTy(F64,qTy)),LU), Apply (Call ("write'NextFetch",ATy(qTy,qTy), LO(CTy"TransferControl")), Apply (Call ("incrInstret",ATy(qTy,qTy),LU), qVar"s"))), Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'PC",ATy(qTy,qTy), Var("v",F64)),qVar"s"), TP[Apply (Const ("MCSR", ATy(qTy,CTy"MachineCSR")), qVar"s0"),qVar"s0"]), Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mstatus", TP[Var("v",CTy"MachineCSR"), Call ("popPrivilegeStack", CTy"mstatus", Dest ("mstatus", CTy"mstatus", Apply (Const ("MCSR", ATy(qTy, CTy"MachineCSR")), qVar"s")))])), qVar"s")))), (TP[Mop(Some, Call ("Trap",CTy"TransferControl", Var("t",CTy"SynchronousTrap"))), AVar (OTy(PTy(CTy"Interrupt",CTy"Privilege")))], Let(TP[Var("v",F64),qVar"s"], Let(qVar"s0", Apply (Call ("write'NextFetch",ATy(qTy,qTy), LO(CTy"TransferControl")),qVar"s"), TP[Apply (Const("PC",ATy(qTy,F64)),qVar"s0"), qVar"s0"]), Apply (Call ("takeTrap",ATy(qTy,qTy), TP[LF, Call ("excCode",F4, Dest ("trap",CTy"ExceptionType", Var("t",CTy"SynchronousTrap"))), Var("v",F64), Dest ("badaddr",OTy F64, Var("t",CTy"SynchronousTrap")), LC("Machine",CTy"Privilege")]), qVar"s"))), (TP[Mop(Some,Const("Mrts",CTy"TransferControl")), AVar (OTy(PTy(CTy"Interrupt",CTy"Privilege")))], Let(TP[Var("v",CTy"SupervisorCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'NextFetch",ATy(qTy,qTy), LO(CTy"TransferControl")), Apply (Call ("incrInstret",ATy(qTy,qTy),LU), qVar"s")), TP[Apply (Const ("SCSR", ATy(qTy,CTy"SupervisorCSR")), qVar"s0"),qVar"s0"]), Apply (Call ("write'PC",ATy(qTy,qTy), Dest ("stvec",F64, Var("v",CTy"SupervisorCSR"))), qVar"s")))]))))))) ; val initIdent_def = Def ("initIdent",Var("arch",CTy"Architecture"), Close (qVar"state", Let(Var("v",CTy"MachineCSR"), Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"state"), Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mcpuid", TP[Var("v",CTy"MachineCSR"), Rupd ("ArchBase", TP[Dest ("mcpuid",CTy"mcpuid", Var("v",CTy"MachineCSR")), Call ("archBase",FTy 2, Var("arch",CTy"Architecture"))])])), qVar"state"), TP[Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s0"), qVar"s0"]), Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mcpuid", TP[Var("v",CTy"MachineCSR"), Rupd ("U", TP[Dest ("mcpuid",CTy"mcpuid", Var("v",CTy"MachineCSR")),LT])])), qVar"s"), TP[Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"s0"),qVar"s0"]), Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mcpuid", TP[Var("v",CTy"MachineCSR"), Rupd ("S", TP[Dest ("mcpuid",CTy"mcpuid", Var("v",CTy"MachineCSR")), LT])])),qVar"s"), TP[Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"s0"),qVar"s0"]), Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mcpuid", TP[Var("v",CTy"MachineCSR"), Rupd ("M", TP[Dest ("mcpuid",CTy"mcpuid", Var("v",CTy"MachineCSR")), LT])])),qVar"s"), TP[Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"s0"),qVar"s0"]), Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mcpuid", TP[Var("v",CTy"MachineCSR"), Rupd ("I", TP[Dest ("mcpuid", CTy"mcpuid", Var("v", CTy"MachineCSR")), LT])])),qVar"s"), TP[Apply (Const ("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"s0"),qVar"s0"]), Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mimpid", TP[Var("v",CTy"MachineCSR"), Rupd ("RVSource", TP[Dest ("mimpid", CTy"mimpid", Var("v", CTy"MachineCSR")), LW(32768,16)])])), qVar"s"), TP[Apply (Const ("MCSR", ATy(qTy,CTy"MachineCSR")), qVar"s0"),qVar"s0"]), Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mimpid", TP[Var("v",CTy"MachineCSR"), Rupd ("RVImpl", TP[Dest ("mimpid", CTy"mimpid", Var("v", CTy"MachineCSR")), LW(0,48)])])),qVar"s")))))))))) ; val initMachine_def = Def ("initMachine",Var("hartid",F8), Close (qVar"state", Let(Var("v",CTy"MachineCSR"), Apply(Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"state"), Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mstatus", TP[Var("v",CTy"MachineCSR"), Rupd ("VM", TP[Dest ("mstatus",CTy"mstatus", Var("v",CTy"MachineCSR")), Call ("vmMode",FTy 5, LC("Mbare",CTy"VM_Mode"))])])), qVar"state"), TP[Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")),qVar"s0"), qVar"s0"]), Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mstatus", TP[Var("v",CTy"MachineCSR"), Rupd ("MPRV", TP[Dest ("mstatus",CTy"mstatus", Var("v",CTy"MachineCSR")), Call ("privLevel",FTy 2, LC("Machine",CTy"Privilege"))])])), qVar"s"), TP[Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"s0"),qVar"s0"]), Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mstatus", TP[Var("v",CTy"MachineCSR"), Rupd ("MIE", TP[Dest ("mstatus",CTy"mstatus", Var("v",CTy"MachineCSR")), LF])])),qVar"s"), TP[Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"s0"),qVar"s0"]), Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mstatus", TP[Var("v",CTy"MachineCSR"), Rupd ("MFS", TP[Dest ("mstatus",CTy"mstatus", Var("v",CTy"MachineCSR")), Call ("ext_status",FTy 2, LC("Initial", CTy"ExtStatus"))])])), qVar"s"), TP[Apply (Const("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"s0"),qVar"s0"]), Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mstatus", TP[Var("v",CTy"MachineCSR"), Rupd ("MXS", TP[Dest ("mstatus", CTy"mstatus", Var("v", CTy"MachineCSR")), Call ("ext_status",FTy 2, LC("Off", CTy"ExtStatus"))])])), qVar"s"), TP[Apply (Const ("MCSR",ATy(qTy,CTy"MachineCSR")), qVar"s0"),qVar"s0"]), Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mstatus", TP[Var("v",CTy"MachineCSR"), Rupd ("MSD", TP[Dest ("mstatus", CTy"mstatus", Var("v", CTy"MachineCSR")), LF])])),qVar"s"), TP[Apply (Const ("MCSR", ATy(qTy,CTy"MachineCSR")), qVar"s0"),qVar"s0"]), Let(TP[Var("v",CTy"MachineCSR"),qVar"s"], Let(qVar"s0", Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mhartid", TP[Var("v", CTy"MachineCSR"), Mop(Cast F64, Var("hartid",F8))])), qVar"s"), TP[Apply (Const ("MCSR", ATy(qTy,CTy"MachineCSR")), qVar"s0"),qVar"s0"]), Apply (Call ("write'MCSR",ATy(qTy,qTy), Rupd ("mtvec", TP[Var("v",CTy"MachineCSR"), Mop(Cast F64,LW(256,16))])), qVar"s"))))))))))) ; val initRegs_def = Def ("initRegs",nVar"pc", Close (qVar"state", Rupd ("done", TP[Apply (Call ("write'NextFetch",ATy(qTy,qTy),LO(CTy"TransferControl")), Apply (Call("write'PC",ATy(qTy,qTy),Mop(Cast F64,nVar"pc")), Mop(Snd, Apply (For(TP[LN 0,LN 31, Close (nVar"i", Close (qVar"state", TP[LU, Apply (Call ("write'fpr",ATy(qTy,qTy), TP[LW(0,64), Mop(Cast(FTy 5),nVar"i")]), qVar"state")]))]), Mop(Snd, Apply (For(TP[LN 0,LN 31, Close (nVar"i", Close (qVar"state", TP[LU, Apply (Call ("write'gpr", ATy(qTy,qTy), TP[LW(0,64), Mop(Cast(FTy 5), nVar"i")]), qVar"state")]))]), qVar"state")))))),LF]))) val () = Import.finish 0