(* arm8Script.sml - generated by L3 - Wed Oct 11 10:50:19 2017 *) open HolKernel boolLib bossLib Import val () = Import.start "arm8" val () = ieee_underflow_before := true val _ = Record ("ProcState", [("C",bTy),("EL",FTy 2),("N",bTy),("SPS",bTy),("V",bTy),("Z",bTy)]) ; val _ = Record ("TCR_EL1",[("TBI0",bTy),("TBI1",bTy),("tcr_el1'rst",FTy 62)]) ; val _ = Record ("TCR_EL2_EL3",[("TBI",bTy),("tcr_el2_el3'rst",FTy 31)]) ; val _ = Record ("SCTLRType", [("A",bTy),("E0E",bTy),("EE",bTy),("SA",bTy),("SA0",bTy), ("sctlrtype'rst",FTy 27)]) ; val _ = Construct [("BranchType", [("BranchType_CALL",[]),("BranchType_ERET",[]), ("BranchType_DBGEXIT",[]),("BranchType_RET",[]), ("BranchType_JMP",[]),("BranchType_EXCEPTION",[]), ("BranchType_UNKNOWN",[])])] ; val _ = Construct [("AccType", [("AccType_NORMAL",[]),("AccType_VEC",[]),("AccType_STREAM",[]), ("AccType_VECSTREAM",[]),("AccType_ATOMIC",[]), ("AccType_ORDERED",[]),("AccType_UNPRIV",[]),("AccType_IFETCH",[]), ("AccType_PTW",[]),("AccType_DC",[]),("AccType_IC",[]), ("AccType_AT",[])])] ; val _ = Construct [("ShiftType", [("ShiftType_LSL",[]),("ShiftType_LSR",[]),("ShiftType_ASR",[]), ("ShiftType_ROR",[])])] ; val _ = Construct [("ExtendType", [("ExtendType_UXTB",[]),("ExtendType_UXTH",[]),("ExtendType_UXTW",[]), ("ExtendType_UXTX",[]),("ExtendType_SXTB",[]),("ExtendType_SXTH",[]), ("ExtendType_SXTW",[]),("ExtendType_SXTX",[])])] ; val _ = Construct [("LogicalOp", [("LogicalOp_AND",[]),("LogicalOp_ORR",[]),("LogicalOp_EOR",[])])] ; val _ = Construct [("MemOp",[("MemOp_LOAD",[]),("MemOp_STORE",[]),("MemOp_PREFETCH",[])])] ; val _ = Construct [("MemBarrierOp", [("MemBarrierOp_DSB",[]),("MemBarrierOp_DMB",[]), ("MemBarrierOp_ISB",[])])] ; val _ = Construct [("MoveWideOp", [("MoveWideOp_N",[]),("MoveWideOp_Z",[]),("MoveWideOp_K",[])])] ; val _ = Construct [("RevOp", [("RevOp_RBIT",[]),("RevOp_REV16",[]),("RevOp_REV32",[]), ("RevOp_REV64",[])])] ; val _ = Construct [("SystemHintOp", [("SystemHintOp_NOP",[]),("SystemHintOp_YIELD",[]), ("SystemHintOp_WFE",[]),("SystemHintOp_WFI",[]), ("SystemHintOp_SEV",[]),("SystemHintOp_SEVL",[])])] ; val _ = Construct [("PSTATEField", [("PSTATEField_DAIFSet",[]),("PSTATEField_DAIFClr",[]), ("PSTATEField_SP",[])])] ; val _ = Construct [("System", [("ExceptionReturn",[]),("HypervisorCall",[F16]), ("MoveImmediateProcState",[PTy(CTy"PSTATEField",F4)]), ("MoveSystemRegister", [PTy(bTy,PTy(FTy 3,PTy(FTy 3,PTy(FTy 3,PTy(F4,PTy(F4,FTy 5))))))]), ("SecureMonitorCall",[F16]),("SupervisorCall",[F16]), ("SystemInstruction", [PTy(FTy 3,PTy(FTy 3,PTy(F4,PTy(F4,PTy(bTy,FTy 5)))))])])] ; val _ = Construct [("Debug", [("Breakpoint",[F16]),("DebugRestore",[]),("DebugSwitch",[FTy 2]), ("Halt",[F16])])] ; val _ = Construct [("LoadStore", [("LoadLiteral@32",[PTy(F32,PTy(CTy"MemOp",PTy(bTy,PTy(F64,FTy 5))))]), ("LoadLiteral@64",[PTy(F64,PTy(CTy"MemOp",PTy(bTy,PTy(F64,FTy 5))))]), ("LoadStoreAcquire@16", [PTy(F16, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))))))]), ("LoadStoreAcquire@32", [PTy(F32, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))))))]), ("LoadStoreAcquire@64", [PTy(F64, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))))))]), ("LoadStoreAcquire@8", [PTy(F8, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))))))]), ("LoadStoreAcquirePair@128", [PTy(FTy 128, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5))))))))]), ("LoadStoreAcquirePair@64", [PTy(F64, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5))))))))]), ("LoadStoreImmediate@16", [PTy(F16, PTy(bTy, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(F64,PTy(FTy 5,FTy 5))))))))))))]), ("LoadStoreImmediate@32", [PTy(F32, PTy(bTy, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(F64,PTy(FTy 5,FTy 5))))))))))))]), ("LoadStoreImmediate@64", [PTy(F64, PTy(bTy, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(F64,PTy(FTy 5,FTy 5))))))))))))]), ("LoadStoreImmediate@8", [PTy(F8, PTy(bTy, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(F64,PTy(FTy 5,FTy 5))))))))))))]), ("LoadStorePair@32", [PTy(F32, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(F64,PTy(FTy 5,PTy(FTy 5,FTy 5)))))))))))]), ("LoadStorePair@64", [PTy(F64, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(F64,PTy(FTy 5,PTy(FTy 5,FTy 5)))))))))))]), ("LoadStoreRegister@16", [PTy(F16, PTy(bTy, PTy(CTy"MemOp", PTy(bTy, PTy(FTy 5, PTy(CTy"ExtendType",PTy(nTy,PTy(FTy 5,FTy 5))))))))]), ("LoadStoreRegister@32", [PTy(F32, PTy(bTy, PTy(CTy"MemOp", PTy(bTy, PTy(FTy 5, PTy(CTy"ExtendType",PTy(nTy,PTy(FTy 5,FTy 5))))))))]), ("LoadStoreRegister@64", [PTy(F64, PTy(bTy, PTy(CTy"MemOp", PTy(bTy, PTy(FTy 5, PTy(CTy"ExtendType",PTy(nTy,PTy(FTy 5,FTy 5))))))))]), ("LoadStoreRegister@8", [PTy(F8, PTy(bTy, PTy(CTy"MemOp", PTy(bTy, PTy(FTy 5, PTy(CTy"ExtendType",PTy(nTy,PTy(FTy 5,FTy 5))))))))])])] ; val _ = Construct [("Branch", [("BranchConditional",[PTy(F64,F4)]), ("BranchImmediate",[PTy(F64,CTy"BranchType")]), ("BranchRegister",[PTy(FTy 5,CTy"BranchType")]), ("CompareAndBranch@32",[PTy(F32,PTy(bTy,PTy(F64,FTy 5)))]), ("CompareAndBranch@64",[PTy(F64,PTy(bTy,PTy(F64,FTy 5)))]), ("TestBitAndBranch@32",[PTy(F32,PTy(FTy 6,PTy(bTy,PTy(F64,FTy 5))))]), ("TestBitAndBranch@64",[PTy(F64,PTy(FTy 6,PTy(bTy,PTy(F64,FTy 5))))])])] ; val _ = Construct [("CRCExt", [("CRC@16",[PTy(F16,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("CRC@32",[PTy(F32,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("CRC@64",[PTy(F64,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("CRC@8",[PTy(F8,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))])])] ; val _ = Construct [("Data", [("AddSubCarry@32", [PTy(F32,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))]), ("AddSubCarry@64", [PTy(F64,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))]), ("AddSubExtendRegister@32", [PTy(F32, PTy(bTy, PTy(bTy, PTy(FTy 5, PTy(CTy"ExtendType",PTy(FTy 3,PTy(FTy 5,FTy 5)))))))]), ("AddSubExtendRegister@64", [PTy(F64, PTy(bTy, PTy(bTy, PTy(FTy 5, PTy(CTy"ExtendType",PTy(FTy 3,PTy(FTy 5,FTy 5)))))))]), ("AddSubImmediate@32", [PTy(F32,PTy(bTy,PTy(bTy,PTy(F32,PTy(FTy 5,FTy 5)))))]), ("AddSubImmediate@64", [PTy(F64,PTy(bTy,PTy(bTy,PTy(F64,PTy(FTy 5,FTy 5)))))]), ("AddSubShiftedRegister@32", [PTy(F32, PTy(bTy, PTy(bTy, PTy(CTy"ShiftType", PTy(FTy 5,PTy(FTy 6,PTy(FTy 5,FTy 5)))))))]), ("AddSubShiftedRegister@64", [PTy(F64, PTy(bTy, PTy(bTy, PTy(CTy"ShiftType", PTy(FTy 5,PTy(FTy 6,PTy(FTy 5,FTy 5)))))))]), ("BitfieldMove@32", [PTy(F32, PTy(bTy, PTy(bTy, PTy(F32,PTy(F32,PTy(nTy,PTy(nTy,PTy(FTy 5,FTy 5))))))))]), ("BitfieldMove@64", [PTy(F64, PTy(bTy, PTy(bTy, PTy(F64,PTy(F64,PTy(nTy,PTy(nTy,PTy(FTy 5,FTy 5))))))))]), ("ConditionalCompareImmediate@32", [PTy(F32, PTy(bTy, PTy(F32,PTy(F4,PTy(PTy(bTy,PTy(bTy,PTy(bTy,bTy))),FTy 5)))))]), ("ConditionalCompareImmediate@64", [PTy(F64, PTy(bTy, PTy(F64,PTy(F4,PTy(PTy(bTy,PTy(bTy,PTy(bTy,bTy))),FTy 5)))))]), ("ConditionalCompareRegister@32", [PTy(F32, PTy(bTy, PTy(F4,PTy(PTy(bTy,PTy(bTy,PTy(bTy,bTy))),PTy(FTy 5,FTy 5)))))]), ("ConditionalCompareRegister@64", [PTy(F64, PTy(bTy, PTy(F4,PTy(PTy(bTy,PTy(bTy,PTy(bTy,bTy))),PTy(FTy 5,FTy 5)))))]), ("ConditionalSelect@32", [PTy(F32,PTy(bTy,PTy(bTy,PTy(F4,PTy(FTy 5,PTy(FTy 5,FTy 5))))))]), ("ConditionalSelect@64", [PTy(F64,PTy(bTy,PTy(bTy,PTy(F4,PTy(FTy 5,PTy(FTy 5,FTy 5))))))]), ("CountLeading@32",[PTy(F32,PTy(bTy,PTy(FTy 5,FTy 5)))]), ("CountLeading@64",[PTy(F64,PTy(bTy,PTy(FTy 5,FTy 5)))]), ("Division@32",[PTy(F32,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("Division@64",[PTy(F64,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("ExtractRegister@32", [PTy(F32,PTy(FTy 6,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("ExtractRegister@64", [PTy(F64,PTy(FTy 6,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("LogicalImmediate@32", [PTy(F32,PTy(CTy"LogicalOp",PTy(bTy,PTy(F32,PTy(FTy 5,FTy 5)))))]), ("LogicalImmediate@64", [PTy(F64,PTy(CTy"LogicalOp",PTy(bTy,PTy(F64,PTy(FTy 5,FTy 5)))))]), ("LogicalShiftedRegister@32", [PTy(F32, PTy(CTy"LogicalOp", PTy(bTy, PTy(bTy, PTy(CTy"ShiftType", PTy(nTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))))))]), ("LogicalShiftedRegister@64", [PTy(F64, PTy(CTy"LogicalOp", PTy(bTy, PTy(bTy, PTy(CTy"ShiftType", PTy(nTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))))))]), ("MoveWide@32", [PTy(F32,PTy(CTy"MoveWideOp",PTy(FTy 2,PTy(F16,FTy 5))))]), ("MoveWide@64", [PTy(F64,PTy(CTy"MoveWideOp",PTy(FTy 2,PTy(F16,FTy 5))))]), ("MultiplyAddSub@32", [PTy(F32,PTy(bTy,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5)))))]), ("MultiplyAddSub@64", [PTy(F64,PTy(bTy,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5)))))]), ("MultiplyAddSubLong", [PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5)))))]), ("MultiplyHigh",[PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))]), ("Reverse@32",[PTy(F32,PTy(CTy"RevOp",PTy(FTy 5,FTy 5)))]), ("Reverse@64",[PTy(F64,PTy(CTy"RevOp",PTy(FTy 5,FTy 5)))]), ("Shift@32", [PTy(F32,PTy(CTy"ShiftType",PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("Shift@64", [PTy(F64,PTy(CTy"ShiftType",PTy(FTy 5,PTy(FTy 5,FTy 5))))])])] ; val _ = Construct [("instruction", [("Address",[PTy(bTy,PTy(F64,FTy 5))]),("Branch",[CTy"Branch"]), ("CRCExt",[CTy"CRCExt"]),("ClearExclusive",[F4]), ("Data",[CTy"Data"]),("Debug",[CTy"Debug"]), ("Hint",[CTy"SystemHintOp"]),("LoadStore",[CTy"LoadStore"]), ("MemoryBarrier",[PTy(CTy"MemBarrierOp",F4)]),("Reserved",[]), ("System",[CTy"System"]),("Unallocated",[])])] ; val _ = Construct [("MachineCode",[("ARM8",[F32]),("BadCode",[sTy])])] ; val _ = Construct [("exception", [("ALIGNMENT_FAULT",[]),("ASSERT",[sTy]),("NoException",[]), ("UNDEFINED_FAULT",[sTy])])] ; val _ = Record ("arm8_state", [("MEM",ATy(F64,F8)),("PC",F64),("PSTATE",CTy"ProcState"), ("REG",ATy(FTy 5,F64)),("SCTLR_EL1",CTy"SCTLRType"), ("SCTLR_EL2",CTy"SCTLRType"),("SCTLR_EL3",CTy"SCTLRType"), ("SP_EL0",F64),("SP_EL1",F64),("SP_EL2",F64),("SP_EL3",F64), ("TCR_EL1",CTy"TCR_EL1"),("TCR_EL2",CTy"TCR_EL2_EL3"), ("TCR_EL3",CTy"TCR_EL2_EL3"),("branch_hint",OTy(CTy"BranchType")), ("exception",CTy"exception")]) ; val qTy = CTy "arm8_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 rec'TCR_EL1_def = Def ("rec'TCR_EL1",Var("x",F64), Rec(CTy"TCR_EL1", [Bop(Bit,Var("x",F64),LN 37),Bop(Bit,Var("x",F64),LN 38), CC[EX(Var("x",F64),LN 36,LN 0,FTy 37), EX(Var("x",F64),LN 63,LN 39,FTy 25)]])) ; val reg'TCR_EL1_def = Def ("reg'TCR_EL1",Var("x",CTy"TCR_EL1"), CS(Var("x",CTy"TCR_EL1"), [(Rec(CTy"TCR_EL1",[bVar"TBI0",bVar"TBI1",Var("tcr_el1'rst",FTy 62)]), CC[EX(Var("tcr_el1'rst",FTy 62),LN 24,LN 0,FTy 25), Mop(Cast F1,bVar"TBI1"),Mop(Cast F1,bVar"TBI0"), EX(Var("tcr_el1'rst",FTy 62),LN 61,LN 25,FTy 37)])])) ; val write'rec'TCR_EL1_def = Def ("write'rec'TCR_EL1",TP[AVar F64,Var("x",CTy"TCR_EL1")], Call("reg'TCR_EL1",F64,Var("x",CTy"TCR_EL1"))) ; val write'reg'TCR_EL1_def = Def ("write'reg'TCR_EL1",TP[AVar(CTy"TCR_EL1"),Var("x",F64)], Call("rec'TCR_EL1",CTy"TCR_EL1",Var("x",F64))) ; val rec'TCR_EL2_EL3_def = Def ("rec'TCR_EL2_EL3",Var("x",F32), Rec(CTy"TCR_EL2_EL3", [Bop(Bit,Var("x",F32),LN 20), CC[EX(Var("x",F32),LN 19,LN 0,FTy 20), EX(Var("x",F32),LN 31,LN 21,FTy 11)]])) ; val reg'TCR_EL2_EL3_def = Def ("reg'TCR_EL2_EL3",Var("x",CTy"TCR_EL2_EL3"), CS(Var("x",CTy"TCR_EL2_EL3"), [(Rec(CTy"TCR_EL2_EL3",[bVar"TBI",Var("tcr_el2_el3'rst",FTy 31)]), CC[EX(Var("tcr_el2_el3'rst",FTy 31),LN 10,LN 0,FTy 11), Mop(Cast F1,bVar"TBI"), EX(Var("tcr_el2_el3'rst",FTy 31),LN 30,LN 11,FTy 20)])])) ; val write'rec'TCR_EL2_EL3_def = Def ("write'rec'TCR_EL2_EL3",TP[AVar F32,Var("x",CTy"TCR_EL2_EL3")], Call("reg'TCR_EL2_EL3",F32,Var("x",CTy"TCR_EL2_EL3"))) ; val write'reg'TCR_EL2_EL3_def = Def ("write'reg'TCR_EL2_EL3",TP[AVar(CTy"TCR_EL2_EL3"),Var("x",F32)], Call("rec'TCR_EL2_EL3",CTy"TCR_EL2_EL3",Var("x",F32))) ; val rec'SCTLRType_def = Def ("rec'SCTLRType",Var("x",F32), Rec(CTy"SCTLRType", [Bop(Bit,Var("x",F32),LN 1),Bop(Bit,Var("x",F32),LN 24), Bop(Bit,Var("x",F32),LN 25),Bop(Bit,Var("x",F32),LN 3), Bop(Bit,Var("x",F32),LN 4), CC[EX(Var("x",F32),LN 0,LN 0,F1),EX(Var("x",F32),LN 2,LN 2,F1), EX(Var("x",F32),LN 23,LN 5,FTy 19), EX(Var("x",F32),LN 31,LN 26,FTy 6)]])) ; val reg'SCTLRType_def = Def ("reg'SCTLRType",Var("x",CTy"SCTLRType"), CS(Var("x",CTy"SCTLRType"), [(Rec(CTy"SCTLRType", [bVar"A",bVar"E0E",bVar"EE",bVar"SA",bVar"SA0", Var("sctlrtype'rst",FTy 27)]), CC[EX(Var("sctlrtype'rst",FTy 27),LN 5,LN 0,FTy 6), Mop(Cast F1,bVar"EE"),Mop(Cast F1,bVar"E0E"), EX(Var("sctlrtype'rst",FTy 27),LN 24,LN 6,FTy 19), Mop(Cast F1,bVar"SA0"),Mop(Cast F1,bVar"SA"), EX(Var("sctlrtype'rst",FTy 27),LN 25,LN 25,F1), Mop(Cast F1,bVar"A"), EX(Var("sctlrtype'rst",FTy 27),LN 26,LN 26,F1)])])) ; val write'rec'SCTLRType_def = Def ("write'rec'SCTLRType",TP[AVar F32,Var("x",CTy"SCTLRType")], Call("reg'SCTLRType",F32,Var("x",CTy"SCTLRType"))) ; val write'reg'SCTLRType_def = Def ("write'reg'SCTLRType",TP[AVar(CTy"SCTLRType"),Var("x",F32)], Call("rec'SCTLRType",CTy"SCTLRType",Var("x",F32))) ; val X_def = Def ("X",Var("n",FTy 5), Close (qVar"state", ITE(EQ(Var("n",FTy 5),LW(31,5)),LY(0,"N"), Mop(Cast(BTy"N"), Apply(Dest("REG",ATy(FTy 5,F64),qVar"state"),Var("n",FTy 5)))))) ; val write'X_def = Def ("write'X",TP[Var("value",BTy"N"),Var("n",FTy 5)], Close (qVar"state", ITE(Mop(Not,EQ(Var("n",FTy 5),LW(31,5))), Rupd ("REG", TP[qVar"state", Fupd (Dest("REG",ATy(FTy 5,F64),qVar"state"),Var("n",FTy 5), Mop(Cast F64,Var("value",BTy"N")))]),qVar"state"))) ; val SP_def = Def ("SP",qVar"state", Mop(Cast(BTy"N"), ITE(Mop(Not, Dest("SPS",bTy,Dest("PSTATE",CTy"ProcState",qVar"state"))), Dest("SP_EL0",F64,qVar"state"), CS(Dest("EL",FTy 2,Dest("PSTATE",CTy"ProcState",qVar"state")), [(LW(0,2),Dest("SP_EL0",F64,qVar"state")), (LW(1,2),Dest("SP_EL1",F64,qVar"state")), (LW(2,2),Dest("SP_EL2",F64,qVar"state")), (LW(3,2),Dest("SP_EL3",F64,qVar"state"))])))) ; val write'SP_def = Def ("write'SP",Var("value",BTy"N"), Close (qVar"state", Let(Var("v",F64),Mop(Cast F64,Var("value",BTy"N")), ITE(Mop(Not, Dest ("SPS",bTy,Dest("PSTATE",CTy"ProcState",qVar"state"))), Rupd("SP_EL0",TP[qVar"state",Var("v",F64)]), CS(Dest ("EL",FTy 2,Dest("PSTATE",CTy"ProcState",qVar"state")), [(LW(0,2),Rupd("SP_EL0",TP[qVar"state",Var("v",F64)])), (LW(1,2),Rupd("SP_EL1",TP[qVar"state",Var("v",F64)])), (LW(2,2),Rupd("SP_EL2",TP[qVar"state",Var("v",F64)])), (LW(3,2),Rupd("SP_EL3",TP[qVar"state",Var("v",F64)]))]))))) ; val TranslationRegime_def = Def ("TranslationRegime",qVar"state", ITE(Mop(Not, EQ(Dest("EL",FTy 2,Dest("PSTATE",CTy"ProcState",qVar"state")), LW(0,2))), Dest("EL",FTy 2,Dest("PSTATE",CTy"ProcState",qVar"state")),LW(1,2))) ; val SCTLR_def = Def ("SCTLR",qVar"state", CS(Apply(Const("TranslationRegime",ATy(qTy,FTy 2)),qVar"state"), [(LW(1,2),Dest("SCTLR_EL1",CTy"SCTLRType",qVar"state")), (LW(2,2),Dest("SCTLR_EL2",CTy"SCTLRType",qVar"state")), (LW(3,2),Dest("SCTLR_EL3",CTy"SCTLRType",qVar"state")), (LW(0,2),LX(CTy"SCTLRType"))])) ; val Hint_Branch_def = Def ("Hint_Branch",Var("branch_type",CTy"BranchType"), Close (qVar"state", Rupd ("branch_hint", TP[qVar"state",Mop(Some,Var("branch_type",CTy"BranchType"))]))) ; val BranchTo_def = Def ("BranchTo",TP[Var("target0",F64),Var("branch_type",CTy"BranchType")], Close (qVar"state", Let(qVar"s1", Apply (Call ("Hint_Branch",ATy(qTy,qTy), Var("branch_type",CTy"BranchType")),qVar"state"), Let(Var("s",PTy(F64,qTy)), CS(Dest("EL",FTy 2,Dest("PSTATE",CTy"ProcState",qVar"s1")), [(LW(0,2), Let(Var("s0",F64), ITE(Bop(And,Bop(Bit,Var("target0",F64),LN 55), Dest ("TBI1",bTy, Dest("TCR_EL1",CTy"TCR_EL1",qVar"s1"))), BFI(LN 63,LN 56,LW(255,8),Var("target0",F64)), Var("target0",F64)), TP[ITE(Bop(And, Mop(Not,Bop(Bit,Var("s0",F64),LN 55)), Dest ("TBI0",bTy, Dest("TCR_EL1",CTy"TCR_EL1",qVar"s1"))), BFI(LN 63,LN 56,LW(0,8),Var("s0",F64)), Var("s0",F64)),qVar"s1"])), (LW(1,2), Let(Var("s0",F64), ITE(Bop(And,Bop(Bit,Var("target0",F64),LN 55), Dest ("TBI1",bTy, Dest("TCR_EL1",CTy"TCR_EL1",qVar"s1"))), BFI(LN 63,LN 56,LW(255,8),Var("target0",F64)), Var("target0",F64)), TP[ITE(Bop(And, Mop(Not,Bop(Bit,Var("s0",F64),LN 55)), Dest ("TBI0",bTy, Dest("TCR_EL1",CTy"TCR_EL1",qVar"s1"))), BFI(LN 63,LN 56,LW(0,8),Var("s0",F64)), Var("s0",F64)),qVar"s1"])), (LW(2,2), TP[ITE(Dest ("TBI",bTy, Dest("TCR_EL2",CTy"TCR_EL2_EL3",qVar"s1")), BFI(LN 63,LN 56,LW(0,8),Var("target0",F64)), Var("target0",F64)),qVar"s1"]), (LW(3,2), TP[ITE(Dest ("TBI",bTy, Dest("TCR_EL3",CTy"TCR_EL2_EL3",qVar"s1")), BFI(LN 63,LN 56,LW(0,8),Var("target0",F64)), Var("target0",F64)),qVar"s1"])]), Rupd ("PC", TP[Mop(Snd,Var("s",PTy(F64,qTy))), Mop(Fst,Var("s",PTy(F64,qTy)))]))))) ; val Align_def = Def ("Align",TP[Var("w",BTy"N"),nVar"n"], Mop(Cast(BTy"N"), Bop(Mul,nVar"n",Bop(Div,Mop(Cast nTy,Var("w",BTy"N")),nVar"n")))) ; val Aligned_def = Def ("Aligned",TP[Var("w",BTy"N"),nVar"n"], EQ(Var("w",BTy"N"),Call("Align",BTy"N",TP[Var("w",BTy"N"),nVar"n"]))) ; val CheckSPAlignment_def = Def ("CheckSPAlignment",qVar"state", ITE(Bop(And, ITE(EQ(Dest ("EL",FTy 2,Dest("PSTATE",CTy"ProcState",qVar"state")), LW(0,2)), Dest ("SA0",bTy,Dest("SCTLR_EL1",CTy"SCTLRType",qVar"state")), Dest ("SA",bTy, Apply (Const("SCTLR",ATy(qTy,CTy"SCTLRType")),qVar"state"))), Mop(Not, Call ("Aligned",bTy, TP[Apply(Const("SP",ATy(qTy,F64)),qVar"state"),LN 16]))), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Const("ALIGNMENT_FAULT",CTy"exception")),qVar"state")), qVar"state")) ; val CheckAlignment_def = Def ("CheckAlignment", TP[Var("address",F64),nVar"size",Var("acctype",CTy"AccType"), bVar"iswrite"], Close (qVar"state", ITE(Bop(And, Mop(Not, Call("Aligned",bTy,TP[Var("address",F64),nVar"size"])), Bop(Or, EQ(Var("acctype",CTy"AccType"), LC("AccType_ATOMIC",CTy"AccType")), Bop(Or, EQ(Var("acctype",CTy"AccType"), LC("AccType_ORDERED",CTy"AccType")), Dest ("A",bTy, Apply (Const("SCTLR",ATy(qTy,CTy"SCTLRType")), qVar"state"))))), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Const("ALIGNMENT_FAULT",CTy"exception")),qVar"state")), qVar"state"))) ; val BigEndian_def = Def ("BigEndian",qVar"state", ITE(EQ(Dest("EL",FTy 2,Dest("PSTATE",CTy"ProcState",qVar"state")), LW(0,2)), Dest("E0E",bTy,Dest("SCTLR_EL1",CTy"SCTLRType",qVar"state")), Dest ("EE",bTy, Apply(Const("SCTLR",ATy(qTy,CTy"SCTLRType")),qVar"state")))) ; val ByteList_def = Def ("ByteList",vVar"l", CS(vVar"l", [(LNL bTy,LNL vTy), (LLC([bVar"b0",bVar"b1",bVar"b2",bVar"b3",bVar"b4",bVar"b5", bVar"b6",bVar"v7"],vVar"rest"), LLC([LL[bVar"b0",bVar"b1",bVar"b2",bVar"b3",bVar"b4",bVar"b5", bVar"b6",bVar"v7"]],Call("ByteList",LTy vTy,vVar"rest"))), (vVar"rest",LL[vVar"rest"])])) ; val BigEndianReverse_def = Def ("BigEndianReverse",vVar"l", Mop(Flat,Mop(Rev,Call("ByteList",LTy vTy,vVar"l")))) ; val Mem_def = Def ("Mem",TP[Var("address",F64),nVar"size",Var("acctype",CTy"AccType")], Close (qVar"state", Let(TP[Var("r",BTy"N"),Var("s1",PTy(vTy,qTy))], Let(Var("s",PTy(vTy,qTy)), Mop(Snd, Apply (For(TP[LN 0,Bop(Sub,nVar"size",LN 1), Close (nVar"i", Close (Var("state",PTy(vTy,qTy)), TP[LU, CC[Mop(Cast vTy, Apply (Dest ("MEM",ATy(F64,F8), Mop(Snd, Var("state", PTy(vTy,qTy)))), Bop(Add,Var("address",F64), Mop(Cast F64,nVar"i")))), Mop(Fst,Var("state",PTy(vTy,qTy)))], Mop(Snd,Var("state",PTy(vTy,qTy)))]))]), TP[LNL bTy, Apply (Call ("CheckAlignment",ATy(qTy,qTy), TP[Var("address",F64),nVar"size", Var("acctype",CTy"AccType"),LF]), qVar"state")])), TP[Mop(Cast(BTy"N"), ITE(Apply (Const("BigEndian",ATy(qTy,bTy)), Mop(Snd,Var("s",PTy(vTy,qTy)))), Call ("BigEndianReverse",vTy, Mop(Fst,Var("s",PTy(vTy,qTy)))), Mop(Fst,Var("s",PTy(vTy,qTy))))), Var("s",PTy(vTy,qTy))]), TP[Var("r",BTy"N"),Mop(Snd,Var("s1",PTy(vTy,qTy)))]))) ; val write'Mem_def = Def ("write'Mem", TP[Var("value",BTy"N"),Var("address",F64),nVar"size", Var("acctype",CTy"AccType")], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Let(qVar"s", Apply (Call ("CheckAlignment",ATy(qTy,qTy), TP[Var("address",F64),nVar"size", Var("acctype",CTy"AccType"),LT]),qVar"state"), TP[Apply(Const("BigEndian",ATy(qTy,bTy)),qVar"s"),qVar"s"]), Mop(Snd, Apply (For(TP[LN 0,Bop(Sub,nVar"size",LN 1), Close (nVar"i", Close (qVar"state", TP[LU, Rupd ("MEM", TP[qVar"state", Fupd (Dest ("MEM",ATy(F64,F8),qVar"state"), Bop(Add,Var("address",F64), Mop(Cast F64,nVar"i")), Mop(Cast F8, EX(ITE(bVar"v", Call ("BigEndianReverse", vTy, Mop(Cast vTy, Var("value", BTy"N"))), Mop(Cast vTy, Var("value", BTy"N"))), Bop(Add, Bop(Mul,LN 8,nVar"i"), LN 7), Bop(Mul,LN 8,nVar"i"),vTy)))])]))]), qVar"s"))))) ; val ConditionTest_def = Def ("ConditionTest",TP[Var("cond",F4),bVar"N",bVar"Z",bVar"C",bVar"V"], Let(bVar"result", CS(EX(Var("cond",F4),LN 3,LN 1,FTy 3), [(LW(0,3),bVar"Z"),(LW(1,3),bVar"C"),(LW(2,3),bVar"N"), (LW(3,3),bVar"V"),(LW(4,3),Bop(And,bVar"C",Mop(Not,bVar"Z"))), (LW(5,3),EQ(bVar"N",bVar"V")), (LW(6,3),Bop(And,EQ(bVar"N",bVar"V"),Mop(Not,bVar"Z"))), (LW(7,3),LT)]), ITE(Bop(And,Bop(Bit,Var("cond",F4),LN 0), Mop(Not,EQ(Var("cond",F4),LW(15,4)))), Mop(Not,bVar"result"),bVar"result"))) ; val ConditionHolds_def = Def ("ConditionHolds",Var("cond",F4), Close (qVar"state", Call ("ConditionTest",bTy, TP[Var("cond",F4), Dest("N",bTy,Dest("PSTATE",CTy"ProcState",qVar"state")), Dest("Z",bTy,Dest("PSTATE",CTy"ProcState",qVar"state")), Dest("C",bTy,Dest("PSTATE",CTy"ProcState",qVar"state")), Dest("V",bTy,Dest("PSTATE",CTy"ProcState",qVar"state"))]))) ; val Ones_def = Def ("Ones",nVar"n",Mop(PadLeft,TP[LT,nVar"n",LNL bTy])) ; val Zeros_def = Def ("Zeros",nVar"n",Mop(PadLeft,TP[LF,nVar"n",LNL bTy])) ; val Replicate_def = Def ("Replicate",vVar"l", Mop(Cast(BTy"N"), Bop(Rep,vVar"l",Bop(Div,Mop(Size,LY(0,"N")),Mop(Length,vVar"l"))))) ; val HighestSetBit_def = Def ("HighestSetBit",Var("w",BTy"N"), ITE(EQ(Var("w",BTy"N"),LY(0,"N")),Mop(Neg,LI 1), Mop(Cast iTy,Mop(Log,Var("w",BTy"N"))))) ; val CountLeadingZeroBits_def = Def ("CountLeadingZeroBits",Var("w",BTy"N"), Mop(Cast nTy, Bop(Sub,Bop(Sub,Mop(Cast iTy,Mop(Size,LY(0,"N"))),LI 1), Call("HighestSetBit",iTy,Var("w",BTy"N"))))) ; val CountLeadingSignBits_def = Def ("CountLeadingSignBits",Var("w",BTy"N"), Bop(Sub, Call ("CountLeadingZeroBits",nTy, Bop(BXor,Bop(Lsr,Var("w",BTy"N"),LN 1), Bop(BAnd,Var("w",BTy"N"),Mop(BNot,Bop(Ror,LY(1,"N"),LN 1))))), LN 1)) ; val Poly32Mod2_loop_def = Def ("Poly32Mod2_loop",TP[nVar"i",vVar"data",vVar"poly"], ITE(Bop(Lt,nVar"i",LN 32),vVar"data", Call ("Poly32Mod2_loop",vTy, TP[Bop(Sub,nVar"i",LN 1), ITE(Bop(Bit,vVar"data",nVar"i"), CC[EX(vVar"data",Bop(Sub,Mop(Length,vVar"data"),LN 1), nVar"i",vTy), Bop(BXor, EX(vVar"data",Bop(Sub,nVar"i",LN 1),LN 0,vTy), Mop(PadRight,TP[LF,nVar"i",vVar"poly"]))], vVar"data"),vVar"poly"]))) ; val Poly32Mod2_def = Def ("Poly32Mod2",TP[vVar"data",Var("poly",F32)], Mop(Cast F32, EX(Call ("Poly32Mod2_loop",vTy, TP[Bop(Sub,Mop(Length,vVar"data"),LN 1),vVar"data", Mop(Cast vTy,Var("poly",F32))]),LN 31,LN 0,vTy))) ; val AddWithCarry_def = Def ("AddWithCarry",TP[Var("x",BTy"N"),Var("y",BTy"N"),bVar"carry_in"], Let(nVar"unsigned_sum", Bop(Add, Bop(Add,Mop(Cast nTy,Var("x",BTy"N")), Mop(Cast nTy,Var("y",BTy"N"))),Mop(Cast nTy,bVar"carry_in")), Let(Var("result",BTy"N"),Mop(Cast(BTy"N"),nVar"unsigned_sum"), TP[Var("result",BTy"N"),Mop(Msb,Var("result",BTy"N")), EQ(Var("result",BTy"N"),LY(0,"N")), Mop(Not, EQ(Mop(Cast nTy,Var("result",BTy"N")),nVar"unsigned_sum")), Mop(Not, EQ(Mop(Cast iTy,Var("result",BTy"N")), Bop(Add, Bop(Add,Mop(Cast iTy,Var("x",BTy"N")), Mop(Cast iTy,Var("y",BTy"N"))), Mop(Cast iTy,bVar"carry_in"))))]))) ; val SetTheFlags_def = Def ("SetTheFlags",TP[bVar"setflags",bVar"n",bVar"z",bVar"c",bVar"v"], Close (qVar"state", ITE(bVar"setflags", Let(qVar"s", Rupd ("PSTATE", TP[qVar"state", Rupd ("N", TP[Dest("PSTATE",CTy"ProcState",qVar"state"), bVar"n"])]), Let(qVar"s", Rupd ("PSTATE", TP[qVar"s", Rupd ("Z", TP[Dest("PSTATE",CTy"ProcState",qVar"s"), bVar"z"])]), Let(qVar"s", Rupd ("PSTATE", TP[qVar"s", Rupd ("C", TP[Dest("PSTATE",CTy"ProcState",qVar"s"), bVar"c"])]), Rupd ("PSTATE", TP[qVar"s", Rupd ("V", TP[Dest("PSTATE",CTy"ProcState",qVar"s"), bVar"v"])])))),qVar"state"))) ; val DecodeShift_def = Def ("DecodeShift",Var("sh",FTy 2),Mop(Cast(CTy"ShiftType"),Var("sh",FTy 2))) ; val ShiftValue_def = Def ("ShiftValue", TP[Var("value",BTy"N"),Var("ty",CTy"ShiftType"),nVar"amount"], CS(Var("ty",CTy"ShiftType"), [(LC("ShiftType_LSL",CTy"ShiftType"), Bop(Lsl,Var("value",BTy"N"),nVar"amount")), (LC("ShiftType_LSR",CTy"ShiftType"), Bop(Lsr,Var("value",BTy"N"),nVar"amount")), (LC("ShiftType_ASR",CTy"ShiftType"), Bop(Asr,Var("value",BTy"N"),nVar"amount")), (LC("ShiftType_ROR",CTy"ShiftType"), Bop(Ror,Var("value",BTy"N"),nVar"amount"))])) ; val ShiftReg_def = Def ("ShiftReg",TP[Var("reg",FTy 5),Var("ty",CTy"ShiftType"),nVar"amount"], Close (qVar"state", Call ("ShiftValue",BTy"N", TP[Apply(Call("X",ATy(qTy,BTy"N"),Var("reg",FTy 5)),qVar"state"), Var("ty",CTy"ShiftType"),nVar"amount"]))) ; val ExtendWord_def = Def ("ExtendWord",TP[Var("w",BTy"M"),bVar"signed"], ITE(bVar"signed",Mop(SE(BTy"N"),Var("w",BTy"M")), Mop(Cast(BTy"N"),Var("w",BTy"M")))) ; val Extend_def = Def ("Extend",TP[vVar"l",bVar"unsigned"], ITE(Bop(Or,bVar"unsigned",Mop(Not,Mop(Head,vVar"l"))), Mop(Cast(BTy"N"),vVar"l"), Mop(Cast(BTy"N"),Mop(PadLeft,TP[LT,Mop(Size,LY(0,"N")),vVar"l"])))) ; val DecodeRegExtend_def = Def ("DecodeRegExtend",Var("ext",FTy 3), Mop(Cast(CTy"ExtendType"),Var("ext",FTy 3))) ; val ExtendValue_def = Def ("ExtendValue", TP[Var("value",BTy"N"),Var("ty",CTy"ExtendType"),nVar"sh"], Let(TP[bVar"unsigned",nVar"len"], CS(Var("ty",CTy"ExtendType"), [(LC("ExtendType_SXTB",CTy"ExtendType"),TP[LF,LN 8]), (LC("ExtendType_SXTH",CTy"ExtendType"),TP[LF,LN 16]), (LC("ExtendType_SXTW",CTy"ExtendType"),TP[LF,LN 32]), (LC("ExtendType_SXTX",CTy"ExtendType"),TP[LF,LN 64]), (LC("ExtendType_UXTB",CTy"ExtendType"),TP[LT,LN 8]), (LC("ExtendType_UXTH",CTy"ExtendType"),TP[LT,LN 16]), (LC("ExtendType_UXTW",CTy"ExtendType"),TP[LT,LN 32]), (LC("ExtendType_UXTX",CTy"ExtendType"),TP[LT,LN 64])]), Call ("Extend",BTy"N", TP[Bop(Lsl, EX(Mop(Cast vTy,Var("value",BTy"N")), Bop(Sub, Mop(Min, TP[nVar"len", Bop(Sub,Mop(Size,LY(0,"N")),nVar"sh")]), LN 1),LN 0,vTy),nVar"sh"),bVar"unsigned"]))) ; val ExtendReg_def = Def ("ExtendReg",TP[Var("reg",FTy 5),Var("ty",CTy"ExtendType"),nVar"sh"], Close (qVar"state", Call ("ExtendValue",BTy"N", TP[Apply(Call("X",ATy(qTy,BTy"N"),Var("reg",FTy 5)),qVar"state"), Var("ty",CTy"ExtendType"),nVar"sh"]))) ; val DecodeBitMasks_def = Def ("DecodeBitMasks", TP[Var("immN",F1),Var("imms",FTy 6),Var("immr",FTy 6),bVar"immediate"], Let(iVar"len", Call ("HighestSetBit",iTy, CC[Var("immN",F1),Mop(BNot,Var("imms",FTy 6))]), ITE(Bop(Lt,iVar"len",LI 1),LO(PTy(BTy"M",BTy"M")), Let(nVar"len",Mop(Cast nTy,iVar"len"), Let(Var("levels",FTy 6), Mop(Cast(FTy 6),Call("Ones",vTy,nVar"len")), Let(Var("S",FTy 6), Bop(BAnd,Var("imms",FTy 6),Var("levels",FTy 6)), Let(Var("R",FTy 6), Bop(BAnd,Var("immr",FTy 6),Var("levels",FTy 6)), ITE(Bop(And,bVar"immediate", EQ(Var("S",FTy 6),Var("levels",FTy 6))), LO(PTy(BTy"M",BTy"M")), Let(nVar"esize",Bop(Exp,LN 2,nVar"len"), Mop(Some, TP[Call ("Replicate",BTy"M", Bop(Ror, Mop(PadLeft, TP[LF,nVar"esize", Call ("Ones",vTy, Bop(Add, Mop(Cast nTy, Var("S", FTy 6)), LN 1))]), Mop(Cast nTy, Var("R",FTy 6)))), Call ("Replicate",BTy"M", Mop(PadLeft, TP[LF,nVar"esize", Call ("Ones",vTy, Bop(Add, Mop(Cast nTy, EX(Mop(Cast vTy, Bop(Sub, Var("S", FTy 6), Var("R", FTy 6))), Bop(Sub, nVar"len", LN 1), LN 0,vTy)), LN 1))]))])))))))))) ; val dfn'Address_def = Def ("dfn'Address",TP[bVar"page",Var("imm",F64),Var("d",FTy 5)], Close (qVar"state", Let(Var("v",F64),Dest("PC",F64,qVar"state"), Apply (Call ("write'X",ATy(qTy,qTy), TP[Bop(Add, ITE(bVar"page", BFI(LN 11,LN 0,LW(0,12),Var("v",F64)), Var("v",F64)),Var("imm",F64)),Var("d",FTy 5)]), qVar"state")))) ; val dfn'AddSubCarry_def = Def ("dfn'AddSubCarry", TP[Var("sf",BTy"N"),bVar"sub_op",bVar"setflags",Var("m",FTy 5), Var("n",FTy 5),Var("d",FTy 5)], Close (qVar"state", Let(Var("v0",BTy"N"), Apply(Call("X",ATy(qTy,BTy"N"),Var("m",FTy 5)),qVar"state"), Let(TP[Var("result",BTy"N"), Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))], Call ("AddWithCarry", PTy(BTy"N",PTy(bTy,PTy(bTy,PTy(bTy,bTy)))), TP[Apply (Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)), qVar"state"), ITE(bVar"sub_op",Mop(BNot,Var("v0",BTy"N")), Var("v0",BTy"N")), Dest ("C",bTy,Dest("PSTATE",CTy"ProcState",qVar"state"))]), Apply (Call ("write'X",ATy(qTy,qTy), TP[Var("result",BTy"N"),Var("d",FTy 5)]), Apply (Call ("SetTheFlags",ATy(qTy,qTy), TP[bVar"setflags", Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))]), qVar"state")))))) ; val dfn'AddSubExtendRegister_def = Def ("dfn'AddSubExtendRegister", TP[Var("sf",BTy"N"),bVar"sub_op",bVar"setflags",Var("m",FTy 5), Var("extend_type",CTy"ExtendType"),Var("imm3",FTy 3),Var("n",FTy 5), Var("d",FTy 5)], Close (qVar"state", Let(Var("v0",BTy"N"), Apply (Call ("ExtendReg",ATy(qTy,BTy"N"), TP[Var("m",FTy 5),Var("extend_type",CTy"ExtendType"), Mop(Cast nTy,Var("imm3",FTy 3))]),qVar"state"), Let(TP[Var("operand2",BTy"N"),bVar"carry_in"], ITE(bVar"sub_op",TP[Mop(BNot,Var("v0",BTy"N")),LT], TP[Var("v0",BTy"N"),LF]), Let(TP[Var("result",BTy"N"), Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))], Call ("AddWithCarry", PTy(BTy"N",PTy(bTy,PTy(bTy,PTy(bTy,bTy)))), TP[ITE(EQ(Var("n",FTy 5),LW(31,5)), Apply(Const("SP",ATy(qTy,BTy"N")),qVar"state"), Apply (Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)), qVar"state")),Var("operand2",BTy"N"), bVar"carry_in"]), Let(qVar"s", Apply (Call ("SetTheFlags",ATy(qTy,qTy), TP[bVar"setflags", Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))]), qVar"state"), ITE(Bop(And,EQ(Var("d",FTy 5),LW(31,5)), Mop(Not,bVar"setflags")), Apply (Call ("write'SP",ATy(qTy,qTy), Var("result",BTy"N")),qVar"s"), Apply (Call ("write'X",ATy(qTy,qTy), TP[Var("result",BTy"N"),Var("d",FTy 5)]), qVar"s")))))))) ; val dfn'AddSubImmediate_def = Def ("dfn'AddSubImmediate", TP[Var("sf",BTy"N"),bVar"sub_op",bVar"setflags",Var("imm",BTy"N"), Var("n",FTy 5),Var("d",FTy 5)], Close (qVar"state", Let(TP[Var("operand2",BTy"N"),bVar"carry_in"], ITE(bVar"sub_op",TP[Mop(BNot,Var("imm",BTy"N")),LT], TP[Var("imm",BTy"N"),LF]), Let(TP[Var("result",BTy"N"), Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))], Call ("AddWithCarry", PTy(BTy"N",PTy(bTy,PTy(bTy,PTy(bTy,bTy)))), TP[ITE(EQ(Var("n",FTy 5),LW(31,5)), Apply(Const("SP",ATy(qTy,BTy"N")),qVar"state"), Apply (Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)), qVar"state")),Var("operand2",BTy"N"), bVar"carry_in"]), Let(qVar"s", Apply (Call ("SetTheFlags",ATy(qTy,qTy), TP[bVar"setflags", Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))]), qVar"state"), ITE(Bop(And,EQ(Var("d",FTy 5),LW(31,5)), Mop(Not,bVar"setflags")), Apply (Call ("write'SP",ATy(qTy,qTy),Var("result",BTy"N")), qVar"s"), Apply (Call ("write'X",ATy(qTy,qTy), TP[Var("result",BTy"N"),Var("d",FTy 5)]), qVar"s"))))))) ; val dfn'AddSubShiftedRegister_def = Def ("dfn'AddSubShiftedRegister", TP[Var("sf",BTy"N"),bVar"sub_op",bVar"setflags", Var("shift_type",CTy"ShiftType"),Var("m",FTy 5),Var("imm",FTy 6), Var("n",FTy 5),Var("d",FTy 5)], Close (qVar"state", Let(Var("v0",BTy"N"), Apply (Call ("ShiftReg",ATy(qTy,BTy"N"), TP[Var("m",FTy 5),Var("shift_type",CTy"ShiftType"), Mop(Cast nTy,Var("imm",FTy 6))]),qVar"state"), Let(TP[Var("operand2",BTy"N"),bVar"carry_in"], ITE(bVar"sub_op",TP[Mop(BNot,Var("v0",BTy"N")),LT], TP[Var("v0",BTy"N"),LF]), Let(TP[Var("result",BTy"N"), Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))], Call ("AddWithCarry", PTy(BTy"N",PTy(bTy,PTy(bTy,PTy(bTy,bTy)))), TP[Apply (Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)), qVar"state"),Var("operand2",BTy"N"), bVar"carry_in"]), Apply (Call ("write'X",ATy(qTy,qTy), TP[Var("result",BTy"N"),Var("d",FTy 5)]), Apply (Call ("SetTheFlags",ATy(qTy,qTy), TP[bVar"setflags", Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))]), qVar"state"))))))) ; val dfn'LogicalImmediate_def = Def ("dfn'LogicalImmediate", TP[Var("sf",BTy"N"),Var("opc",CTy"LogicalOp"),bVar"setflags", Var("imm",BTy"N"),Var("n",FTy 5),Var("d",FTy 5)], Close (qVar"state", Let(Var("v",BTy"N"), Apply(Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),qVar"state"), Let(Var("result",BTy"N"), CS(Var("opc",CTy"LogicalOp"), [(LC("LogicalOp_AND",CTy"LogicalOp"), Bop(BAnd,Var("v",BTy"N"),Var("imm",BTy"N"))), (LC("LogicalOp_ORR",CTy"LogicalOp"), Bop(BOr,Var("v",BTy"N"),Var("imm",BTy"N"))), (LC("LogicalOp_EOR",CTy"LogicalOp"), Bop(BXor,Var("v",BTy"N"),Var("imm",BTy"N")))]), Let(qVar"s", Apply (Call ("SetTheFlags",ATy(qTy,qTy), TP[bVar"setflags",Mop(Msb,Var("result",BTy"N")), EQ(Var("result",BTy"N"),LY(0,"N")),LF,LF]), qVar"state"), ITE(Bop(And,EQ(Var("d",FTy 5),LW(31,5)), Mop(Not,bVar"setflags")), Apply (Call ("write'SP",ATy(qTy,qTy),Var("result",BTy"N")), qVar"s"), Apply (Call ("write'X",ATy(qTy,qTy), TP[Var("result",BTy"N"),Var("d",FTy 5)]), qVar"s"))))))) ; val dfn'LogicalShiftedRegister_def = Def ("dfn'LogicalShiftedRegister", TP[Var("sf",BTy"N"),Var("opc",CTy"LogicalOp"),bVar"invert", bVar"setflags",Var("shift_type",CTy"ShiftType"),nVar"shift_amount", Var("m",FTy 5),Var("n",FTy 5),Var("d",FTy 5)], Close (qVar"state", Let(Var("v",BTy"N"), Apply(Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),qVar"state"), Let(Var("v0",BTy"N"), Apply (Call ("ShiftReg",ATy(qTy,BTy"N"), TP[Var("m",FTy 5),Var("shift_type",CTy"ShiftType"), nVar"shift_amount"]),qVar"state"), Let(Var("operand2",BTy"N"), ITE(bVar"invert",Mop(BNot,Var("v0",BTy"N")), Var("v0",BTy"N")), Let(Var("result",BTy"N"), CS(Var("opc",CTy"LogicalOp"), [(LC("LogicalOp_AND",CTy"LogicalOp"), Bop(BAnd,Var("v",BTy"N"),Var("operand2",BTy"N"))), (LC("LogicalOp_ORR",CTy"LogicalOp"), Bop(BOr,Var("v",BTy"N"),Var("operand2",BTy"N"))), (LC("LogicalOp_EOR",CTy"LogicalOp"), Bop(BXor,Var("v",BTy"N"),Var("operand2",BTy"N")))]), Apply (Call ("write'X",ATy(qTy,qTy), TP[Var("result",BTy"N"),Var("d",FTy 5)]), Apply (Call ("SetTheFlags",ATy(qTy,qTy), TP[bVar"setflags", Mop(Msb,Var("result",BTy"N")), EQ(Var("result",BTy"N"),LY(0,"N")),LF,LF]), qVar"state")))))))) ; val dfn'Shift_def = Def ("dfn'Shift", TP[Var("sf",BTy"N"),Var("shift_type",CTy"ShiftType"),Var("m",FTy 5), Var("n",FTy 5),Var("d",FTy 5)], Close (qVar"state", Apply (Call ("write'X",ATy(qTy,qTy), TP[Apply (Call ("ShiftReg",ATy(qTy,BTy"N"), TP[Var("n",FTy 5),Var("shift_type",CTy"ShiftType"), Bop(Mod, Mop(Cast nTy, Apply (Call ("X",ATy(qTy,BTy"N"),Var("m",FTy 5)), qVar"state")),Mop(Size,LY(0,"N")))]), qVar"state"),Var("d",FTy 5)]),qVar"state"))) ; val dfn'MoveWide_def = Def ("dfn'MoveWide", TP[Var("sf",BTy"N"),Var("opcode",CTy"MoveWideOp"),Var("hw",FTy 2), Var("imm",F16),Var("d",FTy 5)], Close (qVar"state", Let(nVar"pos",Mop(Cast nTy,CC[Var("hw",FTy 2),LW(0,4)]), Let(Var("s0",BTy"N"), BFI(Bop(Add,nVar"pos",LN 15),nVar"pos",Var("imm",F16), ITE(EQ(Var("opcode",CTy"MoveWideOp"), LC("MoveWideOp_K",CTy"MoveWideOp")), Apply (Call("X",ATy(qTy,BTy"N"),Var("d",FTy 5)), qVar"state"),LY(0,"N"))), Apply (Call ("write'X",ATy(qTy,qTy), TP[ITE(EQ(Var("opcode",CTy"MoveWideOp"), LC("MoveWideOp_N",CTy"MoveWideOp")), Mop(BNot,Var("s0",BTy"N")),Var("s0",BTy"N")), Var("d",FTy 5)]),qVar"state"))))) ; val dfn'BitfieldMove_def = Def ("dfn'BitfieldMove", TP[Var("sf",BTy"N"),bVar"inzero",bVar"extend",Var("wmask",BTy"N"), Var("tmask",BTy"N"),nVar"R",nVar"S",Var("n",FTy 5),Var("d",FTy 5)], Close (qVar"state", Let(Var("v",BTy"N"), ITE(bVar"inzero",LY(0,"N"), Apply(Call("X",ATy(qTy,BTy"N"),Var("d",FTy 5)),qVar"state")), Let(Var("v0",BTy"N"), Apply(Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),qVar"state"), Apply (Call ("write'X",ATy(qTy,qTy), TP[Bop(BOr, Bop(BAnd, ITE(bVar"extend", Call ("Replicate",BTy"N", Mop(Cast vTy, Bop(Bit,Var("v0",BTy"N"),nVar"S"))), Var("v",BTy"N")), Mop(BNot,Var("tmask",BTy"N"))), Bop(BAnd, Bop(BOr, Bop(BAnd,Var("v",BTy"N"), Mop(BNot,Var("wmask",BTy"N"))), Bop(BAnd, Bop(Ror,Var("v0",BTy"N"),nVar"R"), Var("wmask",BTy"N"))), Var("tmask",BTy"N"))),Var("d",FTy 5)]), qVar"state"))))) ; val dfn'ConditionalCompareImmediate_def = Def ("dfn'ConditionalCompareImmediate", TP[Var("sf",BTy"N"),bVar"sub_op",Var("imm",BTy"N"),Var("cond",F4), Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy)))),Var("n",FTy 5)], Close (qVar"state", ITE(Apply (Call("ConditionHolds",ATy(qTy,bTy),Var("cond",F4)), qVar"state"), Let(TP[Var("operand2",BTy"N"),bVar"carry_in"], ITE(bVar"sub_op",TP[Mop(BNot,Var("imm",BTy"N")),LT], TP[Var("imm",BTy"N"),LF]), Let(TP[AVar(BTy"N"), Var("flags",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))], Call ("AddWithCarry", PTy(BTy"N",PTy(bTy,PTy(bTy,PTy(bTy,bTy)))), TP[Apply (Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)), qVar"state"),Var("operand2",BTy"N"), bVar"carry_in"]), Apply (Call ("SetTheFlags",ATy(qTy,qTy), TP[LT,Var("flags",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))]), qVar"state"))), Apply (Call ("SetTheFlags",ATy(qTy,qTy), TP[LT,Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))]), qVar"state")))) ; val dfn'ConditionalCompareRegister_def = Def ("dfn'ConditionalCompareRegister", TP[Var("sf",BTy"N"),bVar"sub_op",Var("cond",F4), Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy)))),Var("m",FTy 5), Var("n",FTy 5)], Close (qVar"state", Let(Var("v0",BTy"N"), Apply(Call("X",ATy(qTy,BTy"N"),Var("m",FTy 5)),qVar"state"), ITE(Apply (Call("ConditionHolds",ATy(qTy,bTy),Var("cond",F4)), qVar"state"), Let(TP[Var("operand2",BTy"N"),bVar"carry_in"], ITE(bVar"sub_op",TP[Mop(BNot,Var("v0",BTy"N")),LT], TP[Var("v0",BTy"N"),LF]), Let(TP[AVar(BTy"N"), Var("flags",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))], Call ("AddWithCarry", PTy(BTy"N",PTy(bTy,PTy(bTy,PTy(bTy,bTy)))), TP[Apply (Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)), qVar"state"),Var("operand2",BTy"N"), bVar"carry_in"]), Apply (Call ("SetTheFlags",ATy(qTy,qTy), TP[LT, Var("flags",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))]), qVar"state"))), Apply (Call ("SetTheFlags",ATy(qTy,qTy), TP[LT,Var("nzcv",PTy(bTy,PTy(bTy,PTy(bTy,bTy))))]), qVar"state"))))) ; val dfn'ConditionalSelect_def = Def ("dfn'ConditionalSelect", TP[Var("sf",BTy"N"),bVar"else_inv",bVar"else_inc",Var("cond",F4), Var("m",FTy 5),Var("n",FTy 5),Var("d",FTy 5)], Close (qVar"state", Let(Var("s",PTy(BTy"N",qTy)), ITE(Apply (Call("ConditionHolds",ATy(qTy,bTy),Var("cond",F4)), qVar"state"), TP[Apply (Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),qVar"state"), qVar"state"], Let(Var("s3",BTy"N"), Apply (Call("X",ATy(qTy,BTy"N"),Var("m",FTy 5)),qVar"state"), Let(Var("s0",BTy"N"), ITE(bVar"else_inv",Mop(BNot,Var("s3",BTy"N")), Var("s3",BTy"N")), TP[ITE(bVar"else_inc", Bop(Add,Var("s0",BTy"N"),LY(1,"N")), Var("s0",BTy"N")),qVar"state"]))), Apply (Call ("write'X",ATy(qTy,qTy), TP[Mop(Fst,Var("s",PTy(BTy"N",qTy))),Var("d",FTy 5)]), Mop(Snd,Var("s",PTy(BTy"N",qTy))))))) ; val dfn'CountLeading_def = Def ("dfn'CountLeading", TP[Var("sf",BTy"N"),bVar"count_clz",Var("n",FTy 5),Var("d",FTy 5)], Close (qVar"state", Let(Var("v",BTy"N"), Apply(Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),qVar"state"), Apply (Call ("write'X",ATy(qTy,qTy), TP[Mop(Cast(BTy"N"), ITE(bVar"count_clz", Call ("CountLeadingZeroBits",nTy,Var("v",BTy"N")), Call ("CountLeadingSignBits",nTy,Var("v",BTy"N")))), Var("d",FTy 5)]),qVar"state")))) ; val dfn'ExtractRegister_def = Def ("dfn'ExtractRegister", TP[Var("sf",BTy"N"),Var("imms",FTy 6),Var("m",FTy 5),Var("n",FTy 5), Var("d",FTy 5)], Close (qVar"state", Apply (Call ("write'X",ATy(qTy,qTy), TP[Mop(Cast(BTy"N"), Bop(Lsr, CC[Mop(Cast vTy, Apply (Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)), qVar"state")), Mop(Cast vTy, Apply (Call("X",ATy(qTy,BTy"N"),Var("m",FTy 5)), qVar"state"))], Mop(Cast nTy,Var("imms",FTy 6)))),Var("d",FTy 5)]), qVar"state"))) ; val dfn'Division_def = Def ("dfn'Division", TP[Var("sf",BTy"N"),bVar"unsigned",Var("m",FTy 5),Var("n",FTy 5), Var("d",FTy 5)], Close (qVar"state", Let(Var("v",BTy"N"), Apply(Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),qVar"state"), Let(Var("v0",BTy"N"), Apply(Call("X",ATy(qTy,BTy"N"),Var("m",FTy 5)),qVar"state"), Apply (Call ("write'X",ATy(qTy,qTy), TP[ITB([(EQ(Var("v0",BTy"N"),LY(0,"N")),LY(0,"N")), (bVar"unsigned", Bop(Div,Var("v",BTy"N"),Var("v0",BTy"N")))], Bop(Quot,Var("v",BTy"N"),Var("v0",BTy"N"))), Var("d",FTy 5)]),qVar"state"))))) ; val dfn'MultiplyAddSub_def = Def ("dfn'MultiplyAddSub", TP[Var("sf",BTy"N"),bVar"sub_op",Var("m",FTy 5),Var("a",FTy 5), Var("n",FTy 5),Var("d",FTy 5)], Close (qVar"state", Let(Var("v",BTy"N"), Apply(Call("X",ATy(qTy,BTy"N"),Var("n",FTy 5)),qVar"state"), Let(Var("v0",BTy"N"), Apply(Call("X",ATy(qTy,BTy"N"),Var("m",FTy 5)),qVar"state"), Let(Var("v1",BTy"N"), Apply (Call("X",ATy(qTy,BTy"N"),Var("a",FTy 5)),qVar"state"), Apply (Call ("write'X",ATy(qTy,qTy), TP[ITE(bVar"sub_op", Bop(Sub,Var("v1",BTy"N"), Bop(Mul,Var("v",BTy"N"), Var("v0",BTy"N"))), Bop(Add,Var("v1",BTy"N"), Bop(Mul,Var("v",BTy"N"), Var("v0",BTy"N")))),Var("d",FTy 5)]), qVar"state")))))) ; val dfn'MultiplyAddSubLong_def = Def ("dfn'MultiplyAddSubLong", TP[bVar"sub_op",bVar"signed",Var("m",FTy 5),Var("a",FTy 5), Var("n",FTy 5),Var("d",FTy 5)], Close (qVar"state", Let(Var("v1",F64), Apply(Call("X",ATy(qTy,F64),Var("a",FTy 5)),qVar"state"), Let(Var("product",F64), Bop(Mul, Call ("ExtendWord",F64, TP[Apply (Call("X",ATy(qTy,F32),Var("n",FTy 5)), qVar"state"),bVar"signed"]), Call ("ExtendWord",F64, TP[Apply (Call("X",ATy(qTy,F32),Var("m",FTy 5)), qVar"state"),bVar"signed"])), Apply (Call ("write'X",ATy(qTy,qTy), TP[ITE(bVar"sub_op", Bop(Sub,Var("v1",F64),Var("product",F64)), Bop(Add,Var("v1",F64),Var("product",F64))), Var("d",FTy 5)]),qVar"state"))))) ; val dfn'MultiplyHigh_def = Def ("dfn'MultiplyHigh", TP[bVar"signed",Var("m",FTy 5),Var("n",FTy 5),Var("d",FTy 5)], Close (qVar"state", Apply (Call ("write'X",ATy(qTy,qTy), TP[EX(Bop(Mul, Call ("ExtendWord",FTy 128, TP[Apply (Call("X",ATy(qTy,F64),Var("n",FTy 5)), qVar"state"),bVar"signed"]), Call ("ExtendWord",FTy 128, TP[Apply (Call("X",ATy(qTy,F64),Var("m",FTy 5)), qVar"state"),bVar"signed"])),LN 127,LN 64, F64),Var("d",FTy 5)]),qVar"state"))) ; val dfn'Reverse_def = Def ("dfn'Reverse", TP[Var("sf",BTy"N"),Var("op",CTy"RevOp"),Var("n",FTy 5),Var("d",FTy 5)], Close (qVar"state", ITE(EQ(Mop(Size,LY(0,"N")),LN 32), Let(Var("v",F32), Apply(Call("X",ATy(qTy,F32),Var("n",FTy 5)),qVar"state"), Apply (Call ("write'X",ATy(qTy,qTy), TP[CS(Var("op",CTy"RevOp"), [(LC("RevOp_RBIT",CTy"RevOp"), Mop(Rev,Var("v",F32))), (LC("RevOp_REV16",CTy"RevOp"), CC[EX(Var("v",F32),LN 23,LN 16,F8), EX(Var("v",F32),LN 31,LN 24,F8), EX(Var("v",F32),LN 7,LN 0,F8), EX(Var("v",F32),LN 15,LN 8,F8)]), (LC("RevOp_REV32",CTy"RevOp"), CC[EX(Var("v",F32),LN 7,LN 0,F8), EX(Var("v",F32),LN 15,LN 8,F8), EX(Var("v",F32),LN 23,LN 16,F8), EX(Var("v",F32),LN 31,LN 24,F8)]), (LC("RevOp_REV64",CTy"RevOp"),LX F32)]), Var("d",FTy 5)]),qVar"state")), Let(Var("v",F64), Apply(Call("X",ATy(qTy,F64),Var("n",FTy 5)),qVar"state"), Apply (Call ("write'X",ATy(qTy,qTy), TP[CS(Var("op",CTy"RevOp"), [(LC("RevOp_RBIT",CTy"RevOp"), Mop(Rev,Var("v",F64))), (LC("RevOp_REV16",CTy"RevOp"), CC[EX(Var("v",F64),LN 55,LN 48,F8), EX(Var("v",F64),LN 63,LN 56,F8), EX(Var("v",F64),LN 39,LN 32,F8), EX(Var("v",F64),LN 47,LN 40,F8), EX(Var("v",F64),LN 23,LN 16,F8), EX(Var("v",F64),LN 31,LN 24,F8), EX(Var("v",F64),LN 7,LN 0,F8), EX(Var("v",F64),LN 15,LN 8,F8)]), (LC("RevOp_REV32",CTy"RevOp"), CC[EX(Var("v",F64),LN 39,LN 32,F8), EX(Var("v",F64),LN 47,LN 40,F8), EX(Var("v",F64),LN 55,LN 48,F8), EX(Var("v",F64),LN 63,LN 56,F8), EX(Var("v",F64),LN 7,LN 0,F8), EX(Var("v",F64),LN 15,LN 8,F8), EX(Var("v",F64),LN 23,LN 16,F8), EX(Var("v",F64),LN 31,LN 24,F8)]), (LC("RevOp_REV64",CTy"RevOp"), CC[EX(Var("v",F64),LN 7,LN 0,F8), EX(Var("v",F64),LN 15,LN 8,F8), EX(Var("v",F64),LN 23,LN 16,F8), EX(Var("v",F64),LN 31,LN 24,F8), EX(Var("v",F64),LN 39,LN 32,F8), EX(Var("v",F64),LN 47,LN 40,F8), EX(Var("v",F64),LN 55,LN 48,F8), EX(Var("v",F64),LN 63,LN 56,F8)])]), Var("d",FTy 5)]),qVar"state"))))) ; val dfn'CRC_def = Def ("dfn'CRC", TP[Var("sz",BTy"N"),bVar"crc32c",Var("m",FTy 5),Var("n",FTy 5), Var("d",FTy 5)], Close (qVar"state", Apply (Call ("write'X",ATy(qTy,qTy), TP[Mop(Rev, Call ("Poly32Mod2",F32, TP[Bop(BXor, CC[Mop(Rev, Mop(Cast vTy, Apply (Call ("X",ATy(qTy,F32), Var("n",FTy 5)),qVar"state"))), Call("Zeros",vTy,Mop(Size,LY(0,"N")))], CC[Mop(Rev, Mop(Cast vTy, Apply (Call ("X",ATy(qTy,BTy"N"), Var("m",FTy 5)),qVar"state"))), Call("Zeros",vTy,LN 32)]), ITE(bVar"crc32c",LW(517762881,32),LW(79764919,32))])), Var("d",FTy 5)]),qVar"state"))) ; val dfn'BranchConditional_def = Def ("dfn'BranchConditional",TP[Var("offset",F64),Var("cond",F4)], Close (qVar"state", ITE(Apply (Call("ConditionHolds",ATy(qTy,bTy),Var("cond",F4)), qVar"state"), Apply (Call ("BranchTo",ATy(qTy,qTy), TP[Bop(Add,Dest("PC",F64,qVar"state"),Var("offset",F64)), LC("BranchType_JMP",CTy"BranchType")]),qVar"state"), qVar"state"))) ; val dfn'BranchImmediate_def = Def ("dfn'BranchImmediate", TP[Var("offset",F64),Var("branch_type",CTy"BranchType")], Close (qVar"state", Let(qVar"s", ITE(EQ(Var("branch_type",CTy"BranchType"), LC("BranchType_CALL",CTy"BranchType")), Apply (Call ("write'X",ATy(qTy,qTy), TP[Bop(Add,Dest("PC",F64,qVar"state"),LW(4,64)), LW(30,5)]),qVar"state"),qVar"state"), Apply (Call ("BranchTo",ATy(qTy,qTy), TP[Bop(Add,Dest("PC",F64,qVar"s"),Var("offset",F64)), Var("branch_type",CTy"BranchType")]),qVar"s")))) ; val dfn'BranchRegister_def = Def ("dfn'BranchRegister", TP[Var("n",FTy 5),Var("branch_type",CTy"BranchType")], Close (qVar"state", Apply (Call ("BranchTo",ATy(qTy,qTy), TP[Apply(Call("X",ATy(qTy,F64),Var("n",FTy 5)),qVar"state"), Var("branch_type",CTy"BranchType")]), ITE(EQ(Var("branch_type",CTy"BranchType"), LC("BranchType_CALL",CTy"BranchType")), Apply (Call ("write'X",ATy(qTy,qTy), TP[Bop(Add,Dest("PC",F64,qVar"state"),LW(4,64)), LW(30,5)]),qVar"state"),qVar"state")))) ; val dfn'CompareAndBranch_def = Def ("dfn'CompareAndBranch", TP[Var("sf",BTy"N"),bVar"iszero",Var("offset",F64),Var("t",FTy 5)], Close (qVar"state", ITE(EQ(Apply(Call("X",ATy(qTy,BTy"N"),Var("t",FTy 5)),qVar"state"), LY(0,"N")), Apply (Call ("BranchTo",ATy(qTy,qTy), TP[Bop(Add,Dest("PC",F64,qVar"state"),Var("offset",F64)), LC("BranchType_JMP",CTy"BranchType")]),qVar"state"), qVar"state"))) ; val dfn'TestBitAndBranch_def = Def ("dfn'TestBitAndBranch", TP[Var("sf",BTy"N"),Var("bit_pos",FTy 6),bVar"bit_val", Var("offset",F64),Var("t",FTy 5)], Close (qVar"state", ITE(EQ(Bop(Bit, Apply (Call("X",ATy(qTy,BTy"N"),Var("t",FTy 5)),qVar"state"), Mop(Cast nTy,Var("bit_pos",FTy 6))),bVar"bit_val"), Apply (Call ("BranchTo",ATy(qTy,qTy), TP[Bop(Add,Dest("PC",F64,qVar"state"),Var("offset",F64)), LC("BranchType_JMP",CTy"BranchType")]),qVar"state"), qVar"state"))) ; val LoadStoreSingle_def = Def ("LoadStoreSingle", TP[Var("size",BTy"N"),bVar"regsize_word",Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown", bVar"rt_unknown",bVar"wback",bVar"postindex",Var("offset",F64), Var("n",FTy 5),Var("t",FTy 5)], Close (qVar"state", Let(qVar"s", ITE(Bop(And,EQ(Var("n",FTy 5),LW(31,5)), Mop(Not, EQ(Var("memop",CTy"MemOp"), LC("MemOp_PREFETCH",CTy"MemOp")))), Apply(Const("CheckSPAlignment",ATy(qTy,qTy)),qVar"state"), qVar"state"), Let(Var("v",F64), ITE(EQ(Var("n",FTy 5),LW(31,5)), Apply(Const("SP",ATy(qTy,F64)),qVar"s"), Apply(Call("X",ATy(qTy,F64),Var("n",FTy 5)),qVar"s")), Let(Var("address",F64), ITE(bVar"postindex",Var("v",F64), Bop(Add,Var("v",F64),Var("offset",F64))), Let(qVar"s", CS(Var("memop",CTy"MemOp"), [(LC("MemOp_STORE",CTy"MemOp"), Apply (Call ("write'Mem",ATy(qTy,qTy), TP[ITE(bVar"rt_unknown",LX(BTy"N"), Apply (Call ("X",ATy(qTy,BTy"N"), Var("t",FTy 5)),qVar"s")), Var("address",F64), Bop(Div,Mop(Size,LY(0,"N")),LN 8), Var("acctype",CTy"AccType")]),qVar"s")), (LC("MemOp_LOAD",CTy"MemOp"), Let(TP[Var("v",BTy"N"),qVar"s"], Apply (Call ("Mem",ATy(qTy,PTy(BTy"N",qTy)), TP[Var("address",F64), Bop(Div,Mop(Size,LY(0,"N")),LN 8), Var("acctype",CTy"AccType")]), qVar"s"), ITE(bVar"regsize_word", Apply (Call ("write'X",ATy(qTy,qTy), TP[Call ("ExtendWord",F32, TP[Var("v",BTy"N"), bVar"signed"]), Var("t",FTy 5)]),qVar"s"), Apply (Call ("write'X",ATy(qTy,qTy), TP[Call ("ExtendWord",F64, TP[Var("v",BTy"N"), bVar"signed"]), Var("t",FTy 5)]),qVar"s")))), (LC("MemOp_PREFETCH",CTy"MemOp"),qVar"s")]), ITE(bVar"wback", Let(Var("address",F64), ITB([(bVar"wb_unknown",LX F64), (bVar"postindex", Bop(Add,Var("address",F64), Var("offset",F64)))], Var("address",F64)), ITE(EQ(Var("n",FTy 5),LW(31,5)), Apply (Call ("write'SP",ATy(qTy,qTy), Var("address",F64)),qVar"s"), Apply (Call ("write'X",ATy(qTy,qTy), TP[Var("address",F64), Var("n",FTy 5)]),qVar"s"))), qVar"s"))))))) ; val dfn'LoadStoreImmediate_def = Def ("dfn'LoadStoreImmediate", TP[Var("size",BTy"N"),bVar"regsize_word",Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown", bVar"rt_unknown",bVar"wback",bVar"postindex",bVar"unsigned_offset", Var("offset",F64),Var("n",FTy 5),Var("t",FTy 5)], Close (qVar"state", Apply (Call ("LoadStoreSingle",ATy(qTy,qTy), TP[Var("size",BTy"N"),bVar"regsize_word", Var("memop",CTy"MemOp"),Var("acctype",CTy"AccType"), bVar"signed",bVar"wb_unknown",bVar"rt_unknown",bVar"wback", bVar"postindex",Var("offset",F64),Var("n",FTy 5), Var("t",FTy 5)]),qVar"state"))) ; val dfn'LoadStoreRegister_def = Def ("dfn'LoadStoreRegister", TP[Var("size",BTy"N"),bVar"regsize_word",Var("memop",CTy"MemOp"), bVar"signed",Var("m",FTy 5),Var("extend_type",CTy"ExtendType"), nVar"shift",Var("n",FTy 5),Var("t",FTy 5)], Close (qVar"state", Apply (Call ("LoadStoreSingle",ATy(qTy,qTy), TP[Var("size",BTy"N"),bVar"regsize_word", Var("memop",CTy"MemOp"),LC("AccType_NORMAL",CTy"AccType"), bVar"signed",LF,LF,LF,LF, Apply (Call ("ExtendReg",ATy(qTy,F64), TP[Var("m",FTy 5),Var("extend_type",CTy"ExtendType"), nVar"shift"]),qVar"state"),Var("n",FTy 5), Var("t",FTy 5)]),qVar"state"))) ; val dfn'LoadStorePair_def = Def ("dfn'LoadStorePair", TP[Var("size",BTy"N"),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown", bVar"rt_unknown",bVar"wback",bVar"postindex",Var("offset",F64), Var("n",FTy 5),Var("t",FTy 5),Var("t2",FTy 5)], Close (qVar"state", Let(nVar"dbytes",Bop(Div,Mop(Size,LY(0,"N")),LN 8), Let(qVar"s", ITE(EQ(Var("n",FTy 5),LW(31,5)), Apply (Const("CheckSPAlignment",ATy(qTy,qTy)),qVar"state"), qVar"state"), Let(Var("v",F64), ITE(EQ(Var("n",FTy 5),LW(31,5)), Apply(Const("SP",ATy(qTy,F64)),qVar"s"), Apply(Call("X",ATy(qTy,F64),Var("n",FTy 5)),qVar"s")), Let(Var("address",F64), ITE(bVar"postindex",Var("v",F64), Bop(Add,Var("v",F64),Var("offset",F64))), Let(qVar"s", CS(Var("memop",CTy"MemOp"), [(LC("MemOp_STORE",CTy"MemOp"), Apply (Call ("write'Mem",ATy(qTy,qTy), TP[ITE(Bop(And,bVar"rt_unknown", EQ(Var("t2",FTy 5), Var("n",FTy 5))), LX(BTy"N"), Apply (Call ("X",ATy(qTy,BTy"N"), Var("t2",FTy 5)),qVar"s")), Bop(Add,Var("address",F64), Mop(Cast F64,nVar"dbytes")), nVar"dbytes", Var("acctype",CTy"AccType")]), Apply (Call ("write'Mem",ATy(qTy,qTy), TP[ITE(Bop(And,bVar"rt_unknown", EQ(Var("t",FTy 5), Var("n",FTy 5))), LX(BTy"N"), Apply (Call ("X",ATy(qTy,BTy"N"), Var("t",FTy 5)), qVar"s")), Var("address",F64), nVar"dbytes", Var("acctype",CTy"AccType")]), qVar"s"))), (LC("MemOp_LOAD",CTy"MemOp"), Let(TP[Var("v",PTy(BTy"N",BTy"N")),qVar"s"], ITE(bVar"rt_unknown", TP[LX(PTy(BTy"N",BTy"N")),qVar"s"], Let(TP[Var("v",BTy"N"),qVar"s"], Apply (Call ("Mem", ATy(qTy,PTy(BTy"N",qTy)), TP[Var("address",F64), nVar"dbytes", Var("acctype", CTy"AccType")]), qVar"s"), Let(TP[Var("v0",BTy"N"),qVar"s"], Apply (Call ("Mem", ATy(qTy, PTy(BTy"N",qTy)), TP[Bop(Add, Var("address", F64), Mop(Cast F64, nVar"dbytes")), nVar"dbytes", Var("acctype", CTy"AccType")]), qVar"s"), TP[TP[Var("v",BTy"N"), Var("v0",BTy"N")], qVar"s"]))), Let(TP[Var("data1",BTy"N"), Var("data2",BTy"N")], Var("v",PTy(BTy"N",BTy"N")), ITE(bVar"signed", Apply (Call ("write'X",ATy(qTy,qTy), TP[Call ("ExtendWord",F64, TP[Var("data2", BTy"N"), bVar"signed"]), Var("t2",FTy 5)]), Apply (Call ("write'X", ATy(qTy,qTy), TP[Call ("ExtendWord", F64, TP[Var("data1", BTy"N"), bVar"signed"]), Var("t",FTy 5)]), qVar"s")), Apply (Call ("write'X",ATy(qTy,qTy), TP[Var("data2",BTy"N"), Var("t2",FTy 5)]), Apply (Call ("write'X", ATy(qTy,qTy), TP[Var("data1",BTy"N"), Var("t",FTy 5)]), qVar"s")))))), (AVar(CTy"MemOp"),qVar"s")]), ITE(bVar"wback", Let(Var("address",F64), ITB([(bVar"wb_unknown",LX F64), (bVar"postindex", Bop(Add,Var("address",F64), Var("offset",F64)))], Var("address",F64)), ITE(EQ(Var("n",FTy 5),LW(31,5)), Apply (Call ("write'SP",ATy(qTy,qTy), Var("address",F64)),qVar"s"), Apply (Call ("write'X",ATy(qTy,qTy), TP[Var("address",F64), Var("n",FTy 5)]),qVar"s"))), qVar"s")))))))) ; val ExclusiveMonitorPass_def = Def ("ExclusiveMonitorPass",TP[Var("address",F64),nVar"n"],LX bTy) ; val SetExclusiveMonitors_def = Def ("SetExclusiveMonitors",TP[Var("address",F64),nVar"n"],LU) ; val ExclusiveMonitorStatus_def = Def0 ("ExclusiveMonitorStatus",LX F1) ; val dfn'LoadStoreAcquire_def = Def ("dfn'LoadStoreAcquire", TP[Var("size",BTy"N"),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"excl",bVar"rn_unknown", bVar"rt_unknown",Var("s",FTy 5),Var("n",FTy 5),Var("t",FTy 5)], Close (qVar"state", Let(nVar"dbytes",Bop(Div,Mop(Size,LY(0,"N")),LN 8), Let(qVar"s0", ITE(EQ(Var("n",FTy 5),LW(31,5)), Apply (Const("CheckSPAlignment",ATy(qTy,qTy)),qVar"state"), qVar"state"), Let(Var("v",F64), ITB([(EQ(Var("n",FTy 5),LW(31,5)), Apply(Const("SP",ATy(qTy,F64)),qVar"s0")), (bVar"rn_unknown",LX F64)], Apply (Call("X",ATy(qTy,F64),Var("n",FTy 5)),qVar"s0")), CS(Var("memop",CTy"MemOp"), [(LC("MemOp_STORE",CTy"MemOp"), Let(Var("v0",BTy"N"), ITE(bVar"rt_unknown",LX(BTy"N"), Apply (Call("X",ATy(qTy,BTy"N"),Var("t",FTy 5)), qVar"s0")), ITE(bVar"excl", ITE(Call ("ExclusiveMonitorPass",bTy, TP[Var("v",F64),nVar"dbytes"]), Apply (Call ("write'X",ATy(qTy,qTy), TP[Mop(Cast F32, Const ("ExclusiveMonitorStatus", F1)),Var("s",FTy 5)]), Apply (Call ("write'Mem",ATy(qTy,qTy), TP[Var("v0",BTy"N"), Var("v",F64),nVar"dbytes", Var("acctype",CTy"AccType")]), qVar"s0")), Apply (Call ("write'X",ATy(qTy,qTy), TP[LW(1,32),Var("s",FTy 5)]), qVar"s0")), Apply (Call ("write'Mem",ATy(qTy,qTy), TP[Var("v0",BTy"N"),Var("v",F64), nVar"dbytes", Var("acctype",CTy"AccType")]), qVar"s0")))), (LC("MemOp_LOAD",CTy"MemOp"), Let(TP[Var("v",BTy"N"),qVar"s"], Apply (Call ("Mem",ATy(qTy,PTy(BTy"N",qTy)), TP[Var("v",F64),nVar"dbytes", Var("acctype",CTy"AccType")]),qVar"s0"), ITE(EQ(Mop(Size,LY(0,"N")),LN 64), Apply (Call ("write'X",ATy(qTy,qTy), TP[Var("v",BTy"N"),Var("t",FTy 5)]), qVar"s"), Apply (Call ("write'X",ATy(qTy,qTy), TP[Mop(Cast F32,Var("v",BTy"N")), Var("t",FTy 5)]),qVar"s")))), (AVar(CTy"MemOp"),qVar"s0")])))))) ; val dfn'LoadStoreAcquirePair_def = Def ("dfn'LoadStoreAcquirePair", TP[Var("size",BTy"N"),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"rn_unknown",bVar"rt_unknown", Var("s",FTy 5),Var("n",FTy 5),Var("t",FTy 5),Var("t2",FTy 5)], Close (qVar"state", Let(nVar"dbytes",Bop(Div,Mop(Size,LY(0,"N")),LN 8), Let(qVar"s0", ITE(EQ(Var("n",FTy 5),LW(31,5)), Apply (Const("CheckSPAlignment",ATy(qTy,qTy)),qVar"state"), qVar"state"), Let(Var("v",F64), ITB([(EQ(Var("n",FTy 5),LW(31,5)), Apply(Const("SP",ATy(qTy,F64)),qVar"s0")), (bVar"rn_unknown",LX F64)], Apply (Call("X",ATy(qTy,F64),Var("n",FTy 5)),qVar"s0")), CS(Var("memop",CTy"MemOp"), [(LC("MemOp_STORE",CTy"MemOp"), ITE(Call ("ExclusiveMonitorPass",bTy, TP[Var("v",F64),nVar"dbytes"]), Apply (Call ("write'X",ATy(qTy,qTy), TP[Mop(Cast F32, Const("ExclusiveMonitorStatus",F1)), Var("s",FTy 5)]), Apply (Call ("write'Mem",ATy(qTy,qTy), TP[ITB([(bVar"rt_unknown",LX(BTy"N")), (EQ(Mop(Size,LY(0,"N")),LN 64), ITE(Apply (Const ("BigEndian", ATy(qTy,bTy)), qVar"s0"), Mop(Cast(BTy"N"), CC[Apply (Call ("X", ATy(qTy,F32), Var("t", FTy 5)), qVar"s0"), Apply (Call ("X", ATy(qTy,F32), Var("t2", FTy 5)), qVar"s0")]), Mop(Cast(BTy"N"), CC[Apply (Call ("X", ATy(qTy,F32), Var("t2", FTy 5)), qVar"s0"), Apply (Call ("X", ATy(qTy,F32), Var("t", FTy 5)), qVar"s0")]))), (Apply (Const ("BigEndian", ATy(qTy,bTy)),qVar"s0"), Mop(Cast(BTy"N"), CC[Apply (Call ("X", ATy(qTy,F64), Var("t",FTy 5)), qVar"s0"), Apply (Call ("X", ATy(qTy,F64), Var("t2",FTy 5)), qVar"s0")]))], Mop(Cast(BTy"N"), CC[Apply (Call ("X",ATy(qTy,F64), Var("t2",FTy 5)), qVar"s0"), Apply (Call ("X",ATy(qTy,F64), Var("t",FTy 5)), qVar"s0")])), Var("v",F64),nVar"dbytes", Var("acctype",CTy"AccType")]), qVar"s0")), Apply (Call ("write'X",ATy(qTy,qTy), TP[LW(1,32),Var("s",FTy 5)]),qVar"s0"))), (LC("MemOp_LOAD",CTy"MemOp"), ITB([(bVar"rt_unknown", ITE(EQ(Mop(Size,LY(0,"N")),LN 64), Apply (Call ("write'X",ATy(qTy,qTy), TP[LX F32,Var("t",FTy 5)]),qVar"s0"), Apply (Call ("write'X",ATy(qTy,qTy), TP[LX F64,Var("t",FTy 5)]),qVar"s0"))), (EQ(Mop(Size,LY(0,"N")),LN 64), Let(TP[Var("v",BTy"N"),qVar"s"], Apply (Call ("Mem",ATy(qTy,PTy(BTy"N",qTy)), TP[Var("v",F64),nVar"dbytes", Var("acctype",CTy"AccType")]), qVar"s0"), ITE(Apply (Const("BigEndian",ATy(qTy,bTy)), qVar"s"), Apply (Call ("write'X",ATy(qTy,qTy), TP[EX(Var("v",BTy"N"),LN 31, LN 0,F32),Var("t2",FTy 5)]), Apply (Call ("write'X",ATy(qTy,qTy), TP[EX(Var("v",BTy"N"),LN 63, LN 32,F32), Var("t",FTy 5)]),qVar"s")), Apply (Call ("write'X",ATy(qTy,qTy), TP[EX(Var("v",BTy"N"),LN 63, LN 32,F32), Var("t2",FTy 5)]), Apply (Call ("write'X",ATy(qTy,qTy), TP[EX(Var("v",BTy"N"),LN 31, LN 0,F32), Var("t",FTy 5)]),qVar"s")))))], Let(TP[Var("v0",F64),qVar"s"], Apply (Call ("Mem",ATy(qTy,PTy(F64,qTy)), TP[Var("v",F64),LN 8, Var("acctype",CTy"AccType")]), ITE(Mop(Not, Call ("Aligned",bTy, TP[Var("v",F64),nVar"dbytes"])), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy,PTy(uTy,qTy)), Const ("ALIGNMENT_FAULT", CTy"exception")), qVar"s0")),qVar"s0")), Let(TP[Var("v",F64),qVar"s"], Apply (Call ("Mem",ATy(qTy,PTy(F64,qTy)), TP[Bop(Add,Var("v",F64),LW(8,64)), LN 8, Var("acctype",CTy"AccType")]), Apply (Call ("write'X",ATy(qTy,qTy), TP[Var("v0",F64), Var("t",FTy 5)]),qVar"s")), Apply (Call ("write'X",ATy(qTy,qTy), TP[Var("v",F64),Var("t2",FTy 5)]), qVar"s"))))), (AVar(CTy"MemOp"),qVar"s0")])))))) ; val dfn'LoadLiteral_def = Def ("dfn'LoadLiteral", TP[Var("size",BTy"N"),Var("memop",CTy"MemOp"),bVar"signed", Var("offset",F64),Var("t",FTy 5)], Close (qVar"state", CS(Var("memop",CTy"MemOp"), [(LC("MemOp_LOAD",CTy"MemOp"), Let(TP[Var("v",BTy"N"),qVar"s"], Apply (Call ("Mem",ATy(qTy,PTy(BTy"N",qTy)), TP[Bop(Add,Dest("PC",F64,qVar"state"), Var("offset",F64)), Bop(Div,Mop(Size,LY(0,"N")),LN 8), LC("AccType_NORMAL",CTy"AccType")]),qVar"state"), Apply (Call ("write'X",ATy(qTy,qTy), TP[Call ("ExtendWord",F64, TP[Var("v",BTy"N"),bVar"signed"]), Var("t",FTy 5)]),qVar"s"))), (AVar(CTy"MemOp"),qVar"state")]))) ; val dfn'MemoryBarrier_def = Def ("dfn'MemoryBarrier",TP[Var("op",CTy"MemBarrierOp"),Var("crm",F4)], Close (qVar"state", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("UNDEFINED_FAULT",CTy"exception",LS"MemoryBarrier")), qVar"state")))) ; val dfn'ClearExclusive_def = Def ("dfn'ClearExclusive",Var("imm",F4), Close (qVar"state", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("UNDEFINED_FAULT",CTy"exception",LS"ClearExclusive")), qVar"state")))) ; val dfn'Hint_def = Def ("dfn'Hint",Var("op",CTy"SystemHintOp"), Close (qVar"state", ITE(EQ(Var("op",CTy"SystemHintOp"), LC("SystemHintOp_NOP",CTy"SystemHintOp")),qVar"state", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("UNDEFINED_FAULT",CTy"exception",LS"Hint")), qVar"state"))))) ; val dfn'Breakpoint_def = Def ("dfn'Breakpoint",Var("imm",F16), Close (qVar"state", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("UNDEFINED_FAULT",CTy"exception",LS"Breakpoint")), qVar"state")))) ; val dfn'DebugSwitch_def = Def ("dfn'DebugSwitch",Var("target_level",FTy 2), Close (qVar"state", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("UNDEFINED_FAULT",CTy"exception",LS"DebugSwitch")), qVar"state")))) ; val dfn'DebugRestore_def = Def ("dfn'DebugRestore",qVar"state", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("UNDEFINED_FAULT",CTy"exception",LS"DebugRestore")), qVar"state"))) ; val dfn'Halt_def = Def ("dfn'Halt",Var("imm16",F16), Close (qVar"state", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("UNDEFINED_FAULT",CTy"exception",LS"Halt")), qVar"state")))) ; val dfn'SystemInstruction_def = Def ("dfn'SystemInstruction", TP[Var("sys_op1",FTy 3),Var("sys_op2",FTy 3),Var("sys_crn",F4), Var("sys_crm",F4),bVar"has_result",Var("t",FTy 5)], Close (qVar"state", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("UNDEFINED_FAULT",CTy"exception",LS"System")), qVar"state")))) ; val dfn'MoveSystemRegister_def = Def ("dfn'MoveSystemRegister", TP[bVar"read",Var("sys_op0",FTy 3),Var("sys_op1",FTy 3), Var("sys_op2",FTy 3),Var("sys_crn",F4),Var("sys_crm",F4), Var("t",FTy 5)], Close (qVar"state", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNDEFINED_FAULT",CTy"exception",LS"MoveSystemRegister")), qVar"state")))) ; val dfn'MoveImmediateProcState_def = Def ("dfn'MoveImmediateProcState", TP[Var("field",CTy"PSTATEField"),Var("operand",F4)], Close (qVar"state", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNDEFINED_FAULT",CTy"exception", LS"MoveImmediateProcState")),qVar"state")))) ; val dfn'SupervisorCall_def = Def ("dfn'SupervisorCall",Var("imm16",F16), Close (qVar"state", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("UNDEFINED_FAULT",CTy"exception",LS"SupervisorCall")), qVar"state")))) ; val dfn'HypervisorCall_def = Def ("dfn'HypervisorCall",Var("imm16",F16), Close (qVar"state", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("UNDEFINED_FAULT",CTy"exception",LS"HypervisorCall")), qVar"state")))) ; val dfn'SecureMonitorCall_def = Def ("dfn'SecureMonitorCall",Var("imm16",F16), Close (qVar"state", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNDEFINED_FAULT",CTy"exception",LS"SecureMonitorCall")), qVar"state")))) ; val dfn'ExceptionReturn_def = Def ("dfn'ExceptionReturn",qVar"state", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("UNDEFINED_FAULT",CTy"exception",LS"ExceptionReturn")), qVar"state"))) ; val dfn'Unallocated_def = Def ("dfn'Unallocated",qVar"state", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("UNDEFINED_FAULT",CTy"exception",LS"Unallocated")), qVar"state"))) ; val dfn'Reserved_def = Def ("dfn'Reserved",qVar"state", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("UNDEFINED_FAULT",CTy"exception",LS"Reserved")), qVar"state"))) ; val Run_def = Def ("Run",Var("v0",CTy"instruction"), Close (qVar"state", CS(Var("v0",CTy"instruction"), [(Const("Reserved",CTy"instruction"), Apply(Const("dfn'Reserved",ATy(qTy,qTy)),qVar"state")), (Const("Unallocated",CTy"instruction"), Apply(Const("dfn'Unallocated",ATy(qTy,qTy)),qVar"state")), (Call ("Address",CTy"instruction", Var("v81",PTy(bTy,PTy(F64,FTy 5)))), Apply (Call ("dfn'Address",ATy(qTy,qTy), Var("v81",PTy(bTy,PTy(F64,FTy 5)))),qVar"state")), (Call("ClearExclusive",CTy"instruction",Var("v82",F4)), Apply (Call("dfn'ClearExclusive",ATy(qTy,qTy),Var("v82",F4)), qVar"state")), (Call("Hint",CTy"instruction",Var("v83",CTy"SystemHintOp")), Apply (Call("dfn'Hint",ATy(qTy,qTy),Var("v83",CTy"SystemHintOp")), qVar"state")), (Call ("MemoryBarrier",CTy"instruction", Var("v84",PTy(CTy"MemBarrierOp",F4))), Apply (Call ("dfn'MemoryBarrier",ATy(qTy,qTy), Var("v84",PTy(CTy"MemBarrierOp",F4))),qVar"state")), (Call("Branch",CTy"instruction",Var("v1",CTy"Branch")), CS(Var("v1",CTy"Branch"), [(Call ("BranchConditional",CTy"Branch",Var("v2",PTy(F64,F4))), Apply (Call ("dfn'BranchConditional",ATy(qTy,qTy), Var("v2",PTy(F64,F4))),qVar"state")), (Call ("BranchImmediate",CTy"Branch", Var("v3",PTy(F64,CTy"BranchType"))), Apply (Call ("dfn'BranchImmediate",ATy(qTy,qTy), Var("v3",PTy(F64,CTy"BranchType"))),qVar"state")), (Call ("BranchRegister",CTy"Branch", Var("v4",PTy(FTy 5,CTy"BranchType"))), Apply (Call ("dfn'BranchRegister",ATy(qTy,qTy), Var("v4",PTy(FTy 5,CTy"BranchType"))),qVar"state")), (Call ("CompareAndBranch@32",CTy"Branch", Var("v5",PTy(F32,PTy(bTy,PTy(F64,FTy 5))))), Apply (Call ("dfn'CompareAndBranch",ATy(qTy,qTy), Var("v5",PTy(F32,PTy(bTy,PTy(F64,FTy 5))))), qVar"state")), (Call ("CompareAndBranch@64",CTy"Branch", Var("v6",PTy(F64,PTy(bTy,PTy(F64,FTy 5))))), Apply (Call ("dfn'CompareAndBranch",ATy(qTy,qTy), Var("v6",PTy(F64,PTy(bTy,PTy(F64,FTy 5))))), qVar"state")), (Call ("TestBitAndBranch@32",CTy"Branch", Var("v7",PTy(F32,PTy(FTy 6,PTy(bTy,PTy(F64,FTy 5)))))), Apply (Call ("dfn'TestBitAndBranch",ATy(qTy,qTy), Var("v7",PTy(F32,PTy(FTy 6,PTy(bTy,PTy(F64,FTy 5)))))), qVar"state")), (Call ("TestBitAndBranch@64",CTy"Branch", Var("v8",PTy(F64,PTy(FTy 6,PTy(bTy,PTy(F64,FTy 5)))))), Apply (Call ("dfn'TestBitAndBranch",ATy(qTy,qTy), Var("v8",PTy(F64,PTy(FTy 6,PTy(bTy,PTy(F64,FTy 5)))))), qVar"state"))])), (Call("CRCExt",CTy"instruction",Var("v9",CTy"CRCExt")), CS(Var("v9",CTy"CRCExt"), [(Call ("CRC@16",CTy"CRCExt", Var("v10",PTy(F16,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'CRC",ATy(qTy,qTy), Var("v10", PTy(F16,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("CRC@32",CTy"CRCExt", Var("v11",PTy(F32,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'CRC",ATy(qTy,qTy), Var("v11", PTy(F32,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("CRC@64",CTy"CRCExt", Var("v12",PTy(F64,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'CRC",ATy(qTy,qTy), Var("v12", PTy(F64,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("CRC@8",CTy"CRCExt", Var("v13",PTy(F8,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'CRC",ATy(qTy,qTy), Var("v13", PTy(F8,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state"))])), (Call("Data",CTy"instruction",Var("v14",CTy"Data")), CS(Var("v14",CTy"Data"), [(Call ("AddSubCarry@32",CTy"Data", Var("v15", PTy(F32, PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))))), Apply (Call ("dfn'AddSubCarry",ATy(qTy,qTy), Var("v15", PTy(F32, PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))))), qVar"state")), (Call ("AddSubCarry@64",CTy"Data", Var("v16", PTy(F64, PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))))), Apply (Call ("dfn'AddSubCarry",ATy(qTy,qTy), Var("v16", PTy(F64, PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))))), qVar"state")), (Call ("AddSubExtendRegister@32",CTy"Data", Var("v17", PTy(F32, PTy(bTy, PTy(bTy, PTy(FTy 5, PTy(CTy"ExtendType", PTy(FTy 3,PTy(FTy 5,FTy 5))))))))), Apply (Call ("dfn'AddSubExtendRegister",ATy(qTy,qTy), Var("v17", PTy(F32, PTy(bTy, PTy(bTy, PTy(FTy 5, PTy(CTy"ExtendType", PTy(FTy 3,PTy(FTy 5,FTy 5))))))))), qVar"state")), (Call ("AddSubExtendRegister@64",CTy"Data", Var("v18", PTy(F64, PTy(bTy, PTy(bTy, PTy(FTy 5, PTy(CTy"ExtendType", PTy(FTy 3,PTy(FTy 5,FTy 5))))))))), Apply (Call ("dfn'AddSubExtendRegister",ATy(qTy,qTy), Var("v18", PTy(F64, PTy(bTy, PTy(bTy, PTy(FTy 5, PTy(CTy"ExtendType", PTy(FTy 3,PTy(FTy 5,FTy 5))))))))), qVar"state")), (Call ("AddSubImmediate@32",CTy"Data", Var("v19", PTy(F32,PTy(bTy,PTy(bTy,PTy(F32,PTy(FTy 5,FTy 5))))))), Apply (Call ("dfn'AddSubImmediate",ATy(qTy,qTy), Var("v19", PTy(F32, PTy(bTy,PTy(bTy,PTy(F32,PTy(FTy 5,FTy 5))))))), qVar"state")), (Call ("AddSubImmediate@64",CTy"Data", Var("v20", PTy(F64,PTy(bTy,PTy(bTy,PTy(F64,PTy(FTy 5,FTy 5))))))), Apply (Call ("dfn'AddSubImmediate",ATy(qTy,qTy), Var("v20", PTy(F64, PTy(bTy,PTy(bTy,PTy(F64,PTy(FTy 5,FTy 5))))))), qVar"state")), (Call ("AddSubShiftedRegister@32",CTy"Data", Var("v21", PTy(F32, PTy(bTy, PTy(bTy, PTy(CTy"ShiftType", PTy(FTy 5, PTy(FTy 6,PTy(FTy 5,FTy 5))))))))), Apply (Call ("dfn'AddSubShiftedRegister",ATy(qTy,qTy), Var("v21", PTy(F32, PTy(bTy, PTy(bTy, PTy(CTy"ShiftType", PTy(FTy 5, PTy(FTy 6,PTy(FTy 5,FTy 5))))))))), qVar"state")), (Call ("AddSubShiftedRegister@64",CTy"Data", Var("v22", PTy(F64, PTy(bTy, PTy(bTy, PTy(CTy"ShiftType", PTy(FTy 5, PTy(FTy 6,PTy(FTy 5,FTy 5))))))))), Apply (Call ("dfn'AddSubShiftedRegister",ATy(qTy,qTy), Var("v22", PTy(F64, PTy(bTy, PTy(bTy, PTy(CTy"ShiftType", PTy(FTy 5, PTy(FTy 6,PTy(FTy 5,FTy 5))))))))), qVar"state")), (Call ("BitfieldMove@32",CTy"Data", Var("v23", PTy(F32, PTy(bTy, PTy(bTy, PTy(F32, PTy(F32, PTy(nTy, PTy(nTy,PTy(FTy 5,FTy 5)))))))))), Apply (Call ("dfn'BitfieldMove",ATy(qTy,qTy), Var("v23", PTy(F32, PTy(bTy, PTy(bTy, PTy(F32, PTy(F32, PTy(nTy, PTy(nTy,PTy(FTy 5,FTy 5)))))))))), qVar"state")), (Call ("BitfieldMove@64",CTy"Data", Var("v24", PTy(F64, PTy(bTy, PTy(bTy, PTy(F64, PTy(F64, PTy(nTy, PTy(nTy,PTy(FTy 5,FTy 5)))))))))), Apply (Call ("dfn'BitfieldMove",ATy(qTy,qTy), Var("v24", PTy(F64, PTy(bTy, PTy(bTy, PTy(F64, PTy(F64, PTy(nTy, PTy(nTy,PTy(FTy 5,FTy 5)))))))))), qVar"state")), (Call ("ConditionalCompareImmediate@32",CTy"Data", Var("v25", PTy(F32, PTy(bTy, PTy(F32, PTy(F4, PTy(PTy(bTy,PTy(bTy,PTy(bTy,bTy))), FTy 5))))))), Apply (Call ("dfn'ConditionalCompareImmediate",ATy(qTy,qTy), Var("v25", PTy(F32, PTy(bTy, PTy(F32, PTy(F4, PTy(PTy(bTy, PTy(bTy,PTy(bTy,bTy))), FTy 5))))))),qVar"state")), (Call ("ConditionalCompareImmediate@64",CTy"Data", Var("v26", PTy(F64, PTy(bTy, PTy(F64, PTy(F4, PTy(PTy(bTy,PTy(bTy,PTy(bTy,bTy))), FTy 5))))))), Apply (Call ("dfn'ConditionalCompareImmediate",ATy(qTy,qTy), Var("v26", PTy(F64, PTy(bTy, PTy(F64, PTy(F4, PTy(PTy(bTy, PTy(bTy,PTy(bTy,bTy))), FTy 5))))))),qVar"state")), (Call ("ConditionalCompareRegister@32",CTy"Data", Var("v27", PTy(F32, PTy(bTy, PTy(F4, PTy(PTy(bTy,PTy(bTy,PTy(bTy,bTy))), PTy(FTy 5,FTy 5))))))), Apply (Call ("dfn'ConditionalCompareRegister",ATy(qTy,qTy), Var("v27", PTy(F32, PTy(bTy, PTy(F4, PTy(PTy(bTy,PTy(bTy,PTy(bTy,bTy))), PTy(FTy 5,FTy 5))))))), qVar"state")), (Call ("ConditionalCompareRegister@64",CTy"Data", Var("v28", PTy(F64, PTy(bTy, PTy(F4, PTy(PTy(bTy,PTy(bTy,PTy(bTy,bTy))), PTy(FTy 5,FTy 5))))))), Apply (Call ("dfn'ConditionalCompareRegister",ATy(qTy,qTy), Var("v28", PTy(F64, PTy(bTy, PTy(F4, PTy(PTy(bTy,PTy(bTy,PTy(bTy,bTy))), PTy(FTy 5,FTy 5))))))), qVar"state")), (Call ("ConditionalSelect@32",CTy"Data", Var("v29", PTy(F32, PTy(bTy, PTy(bTy,PTy(F4,PTy(FTy 5,PTy(FTy 5,FTy 5)))))))), Apply (Call ("dfn'ConditionalSelect",ATy(qTy,qTy), Var("v29", PTy(F32, PTy(bTy, PTy(bTy, PTy(F4,PTy(FTy 5,PTy(FTy 5,FTy 5)))))))), qVar"state")), (Call ("ConditionalSelect@64",CTy"Data", Var("v30", PTy(F64, PTy(bTy, PTy(bTy,PTy(F4,PTy(FTy 5,PTy(FTy 5,FTy 5)))))))), Apply (Call ("dfn'ConditionalSelect",ATy(qTy,qTy), Var("v30", PTy(F64, PTy(bTy, PTy(bTy, PTy(F4,PTy(FTy 5,PTy(FTy 5,FTy 5)))))))), qVar"state")), (Call ("CountLeading@32",CTy"Data", Var("v31",PTy(F32,PTy(bTy,PTy(FTy 5,FTy 5))))), Apply (Call ("dfn'CountLeading",ATy(qTy,qTy), Var("v31",PTy(F32,PTy(bTy,PTy(FTy 5,FTy 5))))), qVar"state")), (Call ("CountLeading@64",CTy"Data", Var("v32",PTy(F64,PTy(bTy,PTy(FTy 5,FTy 5))))), Apply (Call ("dfn'CountLeading",ATy(qTy,qTy), Var("v32",PTy(F64,PTy(bTy,PTy(FTy 5,FTy 5))))), qVar"state")), (Call ("Division@32",CTy"Data", Var("v33",PTy(F32,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'Division",ATy(qTy,qTy), Var("v33", PTy(F32,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("Division@64",CTy"Data", Var("v34",PTy(F64,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'Division",ATy(qTy,qTy), Var("v34", PTy(F64,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("ExtractRegister@32",CTy"Data", Var("v35", PTy(F32,PTy(FTy 6,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'ExtractRegister",ATy(qTy,qTy), Var("v35", PTy(F32,PTy(FTy 6,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("ExtractRegister@64",CTy"Data", Var("v36", PTy(F64,PTy(FTy 6,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'ExtractRegister",ATy(qTy,qTy), Var("v36", PTy(F64,PTy(FTy 6,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("LogicalImmediate@32",CTy"Data", Var("v37", PTy(F32, PTy(CTy"LogicalOp", PTy(bTy,PTy(F32,PTy(FTy 5,FTy 5))))))), Apply (Call ("dfn'LogicalImmediate",ATy(qTy,qTy), Var("v37", PTy(F32, PTy(CTy"LogicalOp", PTy(bTy,PTy(F32,PTy(FTy 5,FTy 5))))))), qVar"state")), (Call ("LogicalImmediate@64",CTy"Data", Var("v38", PTy(F64, PTy(CTy"LogicalOp", PTy(bTy,PTy(F64,PTy(FTy 5,FTy 5))))))), Apply (Call ("dfn'LogicalImmediate",ATy(qTy,qTy), Var("v38", PTy(F64, PTy(CTy"LogicalOp", PTy(bTy,PTy(F64,PTy(FTy 5,FTy 5))))))), qVar"state")), (Call ("LogicalShiftedRegister@32",CTy"Data", Var("v39", PTy(F32, PTy(CTy"LogicalOp", PTy(bTy, PTy(bTy, PTy(CTy"ShiftType", PTy(nTy, PTy(FTy 5,PTy(FTy 5,FTy 5)))))))))), Apply (Call ("dfn'LogicalShiftedRegister",ATy(qTy,qTy), Var("v39", PTy(F32, PTy(CTy"LogicalOp", PTy(bTy, PTy(bTy, PTy(CTy"ShiftType", PTy(nTy, PTy(FTy 5, PTy(FTy 5,FTy 5)))))))))), qVar"state")), (Call ("LogicalShiftedRegister@64",CTy"Data", Var("v40", PTy(F64, PTy(CTy"LogicalOp", PTy(bTy, PTy(bTy, PTy(CTy"ShiftType", PTy(nTy, PTy(FTy 5,PTy(FTy 5,FTy 5)))))))))), Apply (Call ("dfn'LogicalShiftedRegister",ATy(qTy,qTy), Var("v40", PTy(F64, PTy(CTy"LogicalOp", PTy(bTy, PTy(bTy, PTy(CTy"ShiftType", PTy(nTy, PTy(FTy 5, PTy(FTy 5,FTy 5)))))))))), qVar"state")), (Call ("MoveWide@32",CTy"Data", Var("v41", PTy(F32, PTy(CTy"MoveWideOp",PTy(FTy 2,PTy(F16,FTy 5)))))), Apply (Call ("dfn'MoveWide",ATy(qTy,qTy), Var("v41", PTy(F32, PTy(CTy"MoveWideOp", PTy(FTy 2,PTy(F16,FTy 5)))))), qVar"state")), (Call ("MoveWide@64",CTy"Data", Var("v42", PTy(F64, PTy(CTy"MoveWideOp",PTy(FTy 2,PTy(F16,FTy 5)))))), Apply (Call ("dfn'MoveWide",ATy(qTy,qTy), Var("v42", PTy(F64, PTy(CTy"MoveWideOp", PTy(FTy 2,PTy(F16,FTy 5)))))), qVar"state")), (Call ("MultiplyAddSub@32",CTy"Data", Var("v43", PTy(F32, PTy(bTy,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5))))))), Apply (Call ("dfn'MultiplyAddSub",ATy(qTy,qTy), Var("v43", PTy(F32, PTy(bTy, PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5))))))), qVar"state")), (Call ("MultiplyAddSub@64",CTy"Data", Var("v44", PTy(F64, PTy(bTy,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5))))))), Apply (Call ("dfn'MultiplyAddSub",ATy(qTy,qTy), Var("v44", PTy(F64, PTy(bTy, PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5))))))), qVar"state")), (Call ("MultiplyAddSubLong",CTy"Data", Var("v45", PTy(bTy, PTy(bTy,PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5))))))), Apply (Call ("dfn'MultiplyAddSubLong",ATy(qTy,qTy), Var("v45", PTy(bTy, PTy(bTy, PTy(FTy 5,PTy(FTy 5,PTy(FTy 5,FTy 5))))))), qVar"state")), (Call ("MultiplyHigh",CTy"Data", Var("v46",PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))), Apply (Call ("dfn'MultiplyHigh",ATy(qTy,qTy), Var("v46",PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))), qVar"state")), (Call ("Reverse@32",CTy"Data", Var("v47",PTy(F32,PTy(CTy"RevOp",PTy(FTy 5,FTy 5))))), Apply (Call ("dfn'Reverse",ATy(qTy,qTy), Var("v47",PTy(F32,PTy(CTy"RevOp",PTy(FTy 5,FTy 5))))), qVar"state")), (Call ("Reverse@64",CTy"Data", Var("v48",PTy(F64,PTy(CTy"RevOp",PTy(FTy 5,FTy 5))))), Apply (Call ("dfn'Reverse",ATy(qTy,qTy), Var("v48",PTy(F64,PTy(CTy"RevOp",PTy(FTy 5,FTy 5))))), qVar"state")), (Call ("Shift@32",CTy"Data", Var("v49", PTy(F32, PTy(CTy"ShiftType",PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'Shift",ATy(qTy,qTy), Var("v49", PTy(F32, PTy(CTy"ShiftType", PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("Shift@64",CTy"Data", Var("v50", PTy(F64, PTy(CTy"ShiftType",PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'Shift",ATy(qTy,qTy), Var("v50", PTy(F64, PTy(CTy"ShiftType", PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state"))])), (Call("Debug",CTy"instruction",Var("v51",CTy"Debug")), CS(Var("v51",CTy"Debug"), [(Const("DebugRestore",CTy"Debug"), Apply(Const("dfn'DebugRestore",ATy(qTy,qTy)),qVar"state")), (Call("Breakpoint",CTy"Debug",Var("v52",F16)), Apply (Call("dfn'Breakpoint",ATy(qTy,qTy),Var("v52",F16)), qVar"state")), (Call("DebugSwitch",CTy"Debug",Var("v53",FTy 2)), Apply (Call("dfn'DebugSwitch",ATy(qTy,qTy),Var("v53",FTy 2)), qVar"state")), (Call("Halt",CTy"Debug",Var("v54",F16)), Apply (Call("dfn'Halt",ATy(qTy,qTy),Var("v54",F16)), qVar"state"))])), (Call("LoadStore",CTy"instruction",Var("v55",CTy"LoadStore")), CS(Var("v55",CTy"LoadStore"), [(Call ("LoadLiteral@32",CTy"LoadStore", Var("v56", PTy(F32,PTy(CTy"MemOp",PTy(bTy,PTy(F64,FTy 5)))))), Apply (Call ("dfn'LoadLiteral",ATy(qTy,qTy), Var("v56", PTy(F32,PTy(CTy"MemOp",PTy(bTy,PTy(F64,FTy 5)))))), qVar"state")), (Call ("LoadLiteral@64",CTy"LoadStore", Var("v57", PTy(F64,PTy(CTy"MemOp",PTy(bTy,PTy(F64,FTy 5)))))), Apply (Call ("dfn'LoadLiteral",ATy(qTy,qTy), Var("v57", PTy(F64,PTy(CTy"MemOp",PTy(bTy,PTy(F64,FTy 5)))))), qVar"state")), (Call ("LoadStoreAcquire@16",CTy"LoadStore", Var("v58", PTy(F16, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(FTy 5,PTy(FTy 5,FTy 5)))))))))), Apply (Call ("dfn'LoadStoreAcquire",ATy(qTy,qTy), Var("v58", PTy(F16, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(FTy 5, PTy(FTy 5,FTy 5)))))))))), qVar"state")), (Call ("LoadStoreAcquire@32",CTy"LoadStore", Var("v59", PTy(F32, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(FTy 5,PTy(FTy 5,FTy 5)))))))))), Apply (Call ("dfn'LoadStoreAcquire",ATy(qTy,qTy), Var("v59", PTy(F32, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(FTy 5, PTy(FTy 5,FTy 5)))))))))), qVar"state")), (Call ("LoadStoreAcquire@64",CTy"LoadStore", Var("v60", PTy(F64, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(FTy 5,PTy(FTy 5,FTy 5)))))))))), Apply (Call ("dfn'LoadStoreAcquire",ATy(qTy,qTy), Var("v60", PTy(F64, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(FTy 5, PTy(FTy 5,FTy 5)))))))))), qVar"state")), (Call ("LoadStoreAcquire@8",CTy"LoadStore", Var("v61", PTy(F8, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(FTy 5,PTy(FTy 5,FTy 5)))))))))), Apply (Call ("dfn'LoadStoreAcquire",ATy(qTy,qTy), Var("v61", PTy(F8, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(FTy 5, PTy(FTy 5,FTy 5)))))))))), qVar"state")), (Call ("LoadStoreAcquirePair@128",CTy"LoadStore", Var("v62", PTy(FTy 128, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(FTy 5, PTy(FTy 5,PTy(FTy 5,FTy 5)))))))))), Apply (Call ("dfn'LoadStoreAcquirePair",ATy(qTy,qTy), Var("v62", PTy(FTy 128, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(FTy 5, PTy(FTy 5, PTy(FTy 5,FTy 5)))))))))), qVar"state")), (Call ("LoadStoreAcquirePair@64",CTy"LoadStore", Var("v63", PTy(F64, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(FTy 5, PTy(FTy 5,PTy(FTy 5,FTy 5)))))))))), Apply (Call ("dfn'LoadStoreAcquirePair",ATy(qTy,qTy), Var("v63", PTy(F64, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(FTy 5, PTy(FTy 5, PTy(FTy 5,FTy 5)))))))))), qVar"state")), (Call ("LoadStoreImmediate@16",CTy"LoadStore", Var("v64", PTy(F16, PTy(bTy, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(F64, PTy(FTy 5, FTy 5)))))))))))))), Apply (Call ("dfn'LoadStoreImmediate",ATy(qTy,qTy), Var("v64", PTy(F16, PTy(bTy, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(F64, PTy(FTy 5, FTy 5)))))))))))))), qVar"state")), (Call ("LoadStoreImmediate@32",CTy"LoadStore", Var("v65", PTy(F32, PTy(bTy, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(F64, PTy(FTy 5, FTy 5)))))))))))))), Apply (Call ("dfn'LoadStoreImmediate",ATy(qTy,qTy), Var("v65", PTy(F32, PTy(bTy, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(F64, PTy(FTy 5, FTy 5)))))))))))))), qVar"state")), (Call ("LoadStoreImmediate@64",CTy"LoadStore", Var("v66", PTy(F64, PTy(bTy, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(F64, PTy(FTy 5, FTy 5)))))))))))))), Apply (Call ("dfn'LoadStoreImmediate",ATy(qTy,qTy), Var("v66", PTy(F64, PTy(bTy, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(F64, PTy(FTy 5, FTy 5)))))))))))))), qVar"state")), (Call ("LoadStoreImmediate@8",CTy"LoadStore", Var("v67", PTy(F8, PTy(bTy, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(F64, PTy(FTy 5, FTy 5)))))))))))))), Apply (Call ("dfn'LoadStoreImmediate",ATy(qTy,qTy), Var("v67", PTy(F8, PTy(bTy, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(F64, PTy(FTy 5, FTy 5)))))))))))))), qVar"state")), (Call ("LoadStorePair@32",CTy"LoadStore", Var("v68", PTy(F32, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(F64, PTy(FTy 5, PTy(FTy 5, FTy 5))))))))))))), Apply (Call ("dfn'LoadStorePair",ATy(qTy,qTy), Var("v68", PTy(F32, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(F64, PTy(FTy 5, PTy(FTy 5, FTy 5))))))))))))), qVar"state")), (Call ("LoadStorePair@64",CTy"LoadStore", Var("v69", PTy(F64, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(F64, PTy(FTy 5, PTy(FTy 5, FTy 5))))))))))))), Apply (Call ("dfn'LoadStorePair",ATy(qTy,qTy), Var("v69", PTy(F64, PTy(CTy"MemOp", PTy(CTy"AccType", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy, PTy(F64, PTy(FTy 5, PTy(FTy 5, FTy 5))))))))))))), qVar"state")), (Call ("LoadStoreRegister@16",CTy"LoadStore", Var("v70", PTy(F16, PTy(bTy, PTy(CTy"MemOp", PTy(bTy, PTy(FTy 5, PTy(CTy"ExtendType", PTy(nTy,PTy(FTy 5,FTy 5)))))))))), Apply (Call ("dfn'LoadStoreRegister",ATy(qTy,qTy), Var("v70", PTy(F16, PTy(bTy, PTy(CTy"MemOp", PTy(bTy, PTy(FTy 5, PTy(CTy"ExtendType", PTy(nTy,PTy(FTy 5,FTy 5)))))))))), qVar"state")), (Call ("LoadStoreRegister@32",CTy"LoadStore", Var("v71", PTy(F32, PTy(bTy, PTy(CTy"MemOp", PTy(bTy, PTy(FTy 5, PTy(CTy"ExtendType", PTy(nTy,PTy(FTy 5,FTy 5)))))))))), Apply (Call ("dfn'LoadStoreRegister",ATy(qTy,qTy), Var("v71", PTy(F32, PTy(bTy, PTy(CTy"MemOp", PTy(bTy, PTy(FTy 5, PTy(CTy"ExtendType", PTy(nTy,PTy(FTy 5,FTy 5)))))))))), qVar"state")), (Call ("LoadStoreRegister@64",CTy"LoadStore", Var("v72", PTy(F64, PTy(bTy, PTy(CTy"MemOp", PTy(bTy, PTy(FTy 5, PTy(CTy"ExtendType", PTy(nTy,PTy(FTy 5,FTy 5)))))))))), Apply (Call ("dfn'LoadStoreRegister",ATy(qTy,qTy), Var("v72", PTy(F64, PTy(bTy, PTy(CTy"MemOp", PTy(bTy, PTy(FTy 5, PTy(CTy"ExtendType", PTy(nTy,PTy(FTy 5,FTy 5)))))))))), qVar"state")), (Call ("LoadStoreRegister@8",CTy"LoadStore", Var("v73", PTy(F8, PTy(bTy, PTy(CTy"MemOp", PTy(bTy, PTy(FTy 5, PTy(CTy"ExtendType", PTy(nTy,PTy(FTy 5,FTy 5)))))))))), Apply (Call ("dfn'LoadStoreRegister",ATy(qTy,qTy), Var("v73", PTy(F8, PTy(bTy, PTy(CTy"MemOp", PTy(bTy, PTy(FTy 5, PTy(CTy"ExtendType", PTy(nTy,PTy(FTy 5,FTy 5)))))))))), qVar"state"))])), (Call("System",CTy"instruction",Var("v74",CTy"System")), CS(Var("v74",CTy"System"), [(Const("ExceptionReturn",CTy"System"), Apply (Const("dfn'ExceptionReturn",ATy(qTy,qTy)),qVar"state")), (Call("HypervisorCall",CTy"System",Var("v75",F16)), Apply (Call("dfn'HypervisorCall",ATy(qTy,qTy),Var("v75",F16)), qVar"state")), (Call ("MoveImmediateProcState",CTy"System", Var("v76",PTy(CTy"PSTATEField",F4))), Apply (Call ("dfn'MoveImmediateProcState",ATy(qTy,qTy), Var("v76",PTy(CTy"PSTATEField",F4))),qVar"state")), (Call ("MoveSystemRegister",CTy"System", Var("v77", PTy(bTy, PTy(FTy 3, PTy(FTy 3,PTy(FTy 3,PTy(F4,PTy(F4,FTy 5)))))))), Apply (Call ("dfn'MoveSystemRegister",ATy(qTy,qTy), Var("v77", PTy(bTy, PTy(FTy 3, PTy(FTy 3, PTy(FTy 3,PTy(F4,PTy(F4,FTy 5)))))))), qVar"state")), (Call("SecureMonitorCall",CTy"System",Var("v78",F16)), Apply (Call ("dfn'SecureMonitorCall",ATy(qTy,qTy),Var("v78",F16)), qVar"state")), (Call("SupervisorCall",CTy"System",Var("v79",F16)), Apply (Call("dfn'SupervisorCall",ATy(qTy,qTy),Var("v79",F16)), qVar"state")), (Call ("SystemInstruction",CTy"System", Var("v80", PTy(FTy 3,PTy(FTy 3,PTy(F4,PTy(F4,PTy(bTy,FTy 5))))))), Apply (Call ("dfn'SystemInstruction",ATy(qTy,qTy), Var("v80", PTy(FTy 3, PTy(FTy 3,PTy(F4,PTy(F4,PTy(bTy,FTy 5))))))), qVar"state"))]))]))) ; val DecodeLogicalOp_def = Def ("DecodeLogicalOp",Var("opc",FTy 2), CS(Var("opc",FTy 2), [(LW(0,2),TP[LC("LogicalOp_AND",CTy"LogicalOp"),LF]), (LW(1,2),TP[LC("LogicalOp_ORR",CTy"LogicalOp"),LF]), (LW(2,2),TP[LC("LogicalOp_EOR",CTy"LogicalOp"),LF]), (LW(3,2),TP[LC("LogicalOp_AND",CTy"LogicalOp"),LT])])) ; val NoOperation_def = Def0 ("NoOperation", Call("Hint",CTy"instruction",LC("SystemHintOp_NOP",CTy"SystemHintOp"))) ; val LoadStoreRegister_def = Def ("LoadStoreRegister", TP[Var("size",FTy 2),bVar"regsize_word",Var("memop",CTy"MemOp"), bVar"signed",Var("m",FTy 5),Var("extend_type",CTy"ExtendType"), nVar"shift",Var("n",FTy 5),Var("t",FTy 5)], CS(Var("size",FTy 2), [(LW(0,2), Call ("LoadStore",CTy"instruction", Call ("LoadStoreRegister@8",CTy"LoadStore", TP[LW(0,8),bVar"regsize_word",Var("memop",CTy"MemOp"), bVar"signed",Var("m",FTy 5), Var("extend_type",CTy"ExtendType"),nVar"shift", Var("n",FTy 5),Var("t",FTy 5)]))), (LW(1,2), Call ("LoadStore",CTy"instruction", Call ("LoadStoreRegister@16",CTy"LoadStore", TP[LW(1,16),bVar"regsize_word",Var("memop",CTy"MemOp"), bVar"signed",Var("m",FTy 5), Var("extend_type",CTy"ExtendType"),nVar"shift", Var("n",FTy 5),Var("t",FTy 5)]))), (LW(2,2), Call ("LoadStore",CTy"instruction", Call ("LoadStoreRegister@32",CTy"LoadStore", TP[LW(2,32),bVar"regsize_word",Var("memop",CTy"MemOp"), bVar"signed",Var("m",FTy 5), Var("extend_type",CTy"ExtendType"),nVar"shift", Var("n",FTy 5),Var("t",FTy 5)]))), (LW(3,2), Call ("LoadStore",CTy"instruction", Call ("LoadStoreRegister@64",CTy"LoadStore", TP[LW(3,64),bVar"regsize_word",Var("memop",CTy"MemOp"), bVar"signed",Var("m",FTy 5), Var("extend_type",CTy"ExtendType"),nVar"shift", Var("n",FTy 5),Var("t",FTy 5)])))])) ; val LoadStoreImmediateN_def = Def ("LoadStoreImmediateN", TP[Var("size",FTy 2),bVar"regsize_word",Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown", bVar"rt_unknown",bVar"wback",bVar"postindex",bVar"unsigned_offset", Var("offset",F64),Var("n",FTy 5),Var("t",FTy 5)], CS(Var("size",FTy 2), [(LW(0,2), Call ("LoadStore",CTy"instruction", Call ("LoadStoreImmediate@8",CTy"LoadStore", TP[LW(0,8),bVar"regsize_word",Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed", bVar"wb_unknown",bVar"rt_unknown",bVar"wback", bVar"postindex",bVar"unsigned_offset",Var("offset",F64), Var("n",FTy 5),Var("t",FTy 5)]))), (LW(1,2), Call ("LoadStore",CTy"instruction", Call ("LoadStoreImmediate@16",CTy"LoadStore", TP[LW(1,16),bVar"regsize_word",Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed", bVar"wb_unknown",bVar"rt_unknown",bVar"wback", bVar"postindex",bVar"unsigned_offset",Var("offset",F64), Var("n",FTy 5),Var("t",FTy 5)]))), (LW(2,2), Call ("LoadStore",CTy"instruction", Call ("LoadStoreImmediate@32",CTy"LoadStore", TP[LW(2,32),bVar"regsize_word",Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed", bVar"wb_unknown",bVar"rt_unknown",bVar"wback", bVar"postindex",bVar"unsigned_offset",Var("offset",F64), Var("n",FTy 5),Var("t",FTy 5)]))), (LW(3,2), Call ("LoadStore",CTy"instruction", Call ("LoadStoreImmediate@64",CTy"LoadStore", TP[LW(3,64),bVar"regsize_word",Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed", bVar"wb_unknown",bVar"rt_unknown",bVar"wback", bVar"postindex",bVar"unsigned_offset",Var("offset",F64), Var("n",FTy 5),Var("t",FTy 5)])))])) ; val LoadStoreImmediate_def = Def ("LoadStoreImmediate", TP[Var("size",FTy 2),Var("opc",FTy 2),Var("acctype",CTy"AccType"), bVar"wback",bVar"postindex",bVar"unsigned_offset",Var("offset",F64), Var("Rn",FTy 5),Var("Rt",FTy 5)], Let(TP[Var("memop",CTy"MemOp"),bVar"regsize_word",bVar"signed"], ITB([(Mop(Not,Bop(Bit,Var("opc",FTy 2),LN 1)), TP[ITE(Bop(Bit,Var("opc",FTy 2),LN 0), LC("MemOp_LOAD",CTy"MemOp"), LC("MemOp_STORE",CTy"MemOp")), Mop(Not,EQ(Var("size",FTy 2),LW(3,2))),LF]), (EQ(Var("size",FTy 2),LW(3,2)), TP[LC("MemOp_PREFETCH",CTy"MemOp"),LX bTy,LX bTy])], TP[LC("MemOp_LOAD",CTy"MemOp"),Bop(Bit,Var("opc",FTy 2),LN 0), LT]), ITB([(Bop(And, EQ(Var("memop",CTy"MemOp"),LC("MemOp_LOAD",CTy"MemOp")), Bop(And,bVar"wback", Bop(And,EQ(Var("Rn",FTy 5),Var("Rt",FTy 5)), Mop(Not,EQ(Var("Rn",FTy 5),LW(31,5)))))), CS(Apply(LX(ATy(sTy,FTy 2)),LS"LoadImmediate unpredictable"), [(LW(0,2), Call ("LoadStoreImmediateN",CTy"instruction", TP[Var("size",FTy 2),bVar"regsize_word", Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",LF,LF,LF, bVar"postindex",bVar"unsigned_offset", Var("offset",F64),Var("Rn",FTy 5),Var("Rt",FTy 5)])), (LW(1,2), Call ("LoadStoreImmediateN",CTy"instruction", TP[Var("size",FTy 2),bVar"regsize_word", Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",LT,LF, bVar"wback",bVar"postindex",bVar"unsigned_offset", Var("offset",F64),Var("Rn",FTy 5),Var("Rt",FTy 5)])), (LW(2,2),Const("Unallocated",CTy"instruction")), (LW(3,2),Const("NoOperation",CTy"instruction"))])), (Bop(And, EQ(Var("memop",CTy"MemOp"),LC("MemOp_STORE",CTy"MemOp")), Bop(And,bVar"wback", Bop(And,EQ(Var("Rn",FTy 5),Var("Rt",FTy 5)), Mop(Not,EQ(Var("Rn",FTy 5),LW(31,5)))))), CS(Apply(LX(ATy(sTy,FTy 2)),LS"StoreImmediate unpredictable"), [(LW(0,2), Call ("LoadStoreImmediateN",CTy"instruction", TP[Var("size",FTy 2),bVar"regsize_word", Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",LF,LF, bVar"wback",bVar"postindex",bVar"unsigned_offset", Var("offset",F64),Var("Rn",FTy 5),Var("Rt",FTy 5)])), (LW(1,2), Call ("LoadStoreImmediateN",CTy"instruction", TP[Var("size",FTy 2),bVar"regsize_word", Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",LF,LT, bVar"wback",bVar"postindex",bVar"unsigned_offset", Var("offset",F64),Var("Rn",FTy 5),Var("Rt",FTy 5)])), (LW(2,2),Const("Unallocated",CTy"instruction")), (LW(3,2),Const("NoOperation",CTy"instruction"))]))], Call ("LoadStoreImmediateN",CTy"instruction", TP[Var("size",FTy 2),bVar"regsize_word", Var("memop",CTy"MemOp"),Var("acctype",CTy"AccType"), bVar"signed",LF,LF,bVar"wback",bVar"postindex", bVar"unsigned_offset",Var("offset",F64),Var("Rn",FTy 5), Var("Rt",FTy 5)])))) ; val LoadStorePairN_def = Def ("LoadStorePairN", TP[Var("sf",F1),Var("memop",CTy"MemOp"),Var("acctype",CTy"AccType"), bVar"signed",bVar"wb_unknown",bVar"rt_unknown",bVar"wback", bVar"postindex",Var("offset",F64),Var("n",FTy 5),Var("t",FTy 5), Var("t2",FTy 5)], ITE(EQ(Var("sf",F1),LW(1,1)), Call ("LoadStore",CTy"instruction", Call ("LoadStorePair@64",CTy"LoadStore", TP[LW(1,64),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown", bVar"rt_unknown",bVar"wback",bVar"postindex", Var("offset",F64),Var("n",FTy 5),Var("t",FTy 5), Var("t2",FTy 5)])), Call ("LoadStore",CTy"instruction", Call ("LoadStorePair@32",CTy"LoadStore", TP[LW(0,32),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown", bVar"rt_unknown",bVar"wback",bVar"postindex", Var("offset",F64),Var("n",FTy 5),Var("t",FTy 5), Var("t2",FTy 5)])))) ; val LoadStorePair_def = Def ("LoadStorePair", TP[Var("sf",F1),Var("memop",CTy"MemOp"),Var("acctype",CTy"AccType"), bVar"signed",bVar"wback",bVar"postindex",Var("offset",F64), Var("Rn",FTy 5),Var("Rt",FTy 5),Var("Rt2",FTy 5)], ITB([(Bop(And,EQ(Var("memop",CTy"MemOp"),LC("MemOp_LOAD",CTy"MemOp")), Bop(And,bVar"wback", Bop(And, Bop(Or,EQ(Var("Rn",FTy 5),Var("Rt",FTy 5)), EQ(Var("Rn",FTy 5),Var("Rt2",FTy 5))), Mop(Not,EQ(Var("Rn",FTy 5),LW(31,5)))))), CS(Apply(LX(ATy(sTy,FTy 2)),LS"LoadPair unpredictable"), [(LW(0,2), Call ("LoadStorePairN",CTy"instruction", TP[Var("sf",F1),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",LF,LF,LF, bVar"postindex",Var("offset",F64),Var("Rn",FTy 5), Var("Rt",FTy 5),Var("Rt2",FTy 5)])), (LW(1,2), Call ("LoadStorePairN",CTy"instruction", TP[Var("sf",F1),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",LT,LF, bVar"wback",bVar"postindex",Var("offset",F64), Var("Rn",FTy 5),Var("Rt",FTy 5),Var("Rt2",FTy 5)])), (LW(2,2),Const("Unallocated",CTy"instruction")), (LW(3,2),Const("NoOperation",CTy"instruction"))])), (Bop(And,EQ(Var("memop",CTy"MemOp"),LC("MemOp_STORE",CTy"MemOp")), Bop(And,bVar"wback", Bop(And, Bop(Or,EQ(Var("Rn",FTy 5),Var("Rt",FTy 5)), EQ(Var("Rn",FTy 5),Var("Rt2",FTy 5))), Mop(Not,EQ(Var("Rn",FTy 5),LW(31,5)))))), CS(Apply(LX(ATy(sTy,FTy 2)),LS"StorePair unpredictable"), [(LW(0,2), Call ("LoadStorePairN",CTy"instruction", TP[Var("sf",F1),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",LF,LF, bVar"wback",bVar"postindex",Var("offset",F64), Var("Rn",FTy 5),Var("Rt",FTy 5),Var("Rt2",FTy 5)])), (LW(1,2), Call ("LoadStorePairN",CTy"instruction", TP[Var("sf",F1),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",LF,LT, bVar"wback",bVar"postindex",Var("offset",F64), Var("Rn",FTy 5),Var("Rt",FTy 5),Var("Rt2",FTy 5)])), (LW(2,2),Const("Unallocated",CTy"instruction")), (LW(3,2),Const("NoOperation",CTy"instruction"))])), (Bop(And,EQ(Var("memop",CTy"MemOp"),LC("MemOp_LOAD",CTy"MemOp")), EQ(Var("Rt",FTy 5),Var("Rt2",FTy 5))), CS(Apply(LX(ATy(sTy,FTy 2)),LS"LoadPair Rt = Rt2 unpredictable"), [(LW(0,2), Call ("LoadStorePairN",CTy"instruction", TP[Var("sf",F1),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",LF,LT, bVar"wback",bVar"postindex",Var("offset",F64), Var("Rn",FTy 5),Var("Rt",FTy 5),Var("Rt2",FTy 5)])), (LW(1,2),Const("Unallocated",CTy"instruction")), (AVar(FTy 2),Const("NoOperation",CTy"instruction"))]))], Call ("LoadStorePairN",CTy"instruction", TP[Var("sf",F1),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",LF,LF,bVar"wback", bVar"postindex",Var("offset",F64),Var("Rn",FTy 5), Var("Rt",FTy 5),Var("Rt2",FTy 5)]))) ; val LoadStoreAcquireN_def = Def ("LoadStoreAcquireN", TP[Var("size",FTy 2),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"excl",bVar"pair",bVar"rn_unknown", bVar"rt_unknown",Var("s",FTy 5),Var("n",FTy 5),Var("t",FTy 5), Var("t2",FTy 5)], ITE(bVar"pair", ITE(EQ(Var("size",FTy 2),LW(2,2)), Call ("LoadStore",CTy"instruction", Call ("LoadStoreAcquirePair@64",CTy"LoadStore", TP[LW(2,64),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"rn_unknown", bVar"rt_unknown",Var("s",FTy 5),Var("n",FTy 5), Var("t",FTy 5),Var("t2",FTy 5)])), Call ("LoadStore",CTy"instruction", Call ("LoadStoreAcquirePair@128",CTy"LoadStore", TP[LW(3,128),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"rn_unknown", bVar"rt_unknown",Var("s",FTy 5),Var("n",FTy 5), Var("t",FTy 5),Var("t2",FTy 5)]))), CS(Var("size",FTy 2), [(LW(0,2), Call ("LoadStore",CTy"instruction", Call ("LoadStoreAcquire@8",CTy"LoadStore", TP[LW(0,8),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"excl", bVar"rn_unknown",bVar"rt_unknown",Var("s",FTy 5), Var("n",FTy 5),Var("t",FTy 5)]))), (LW(1,2), Call ("LoadStore",CTy"instruction", Call ("LoadStoreAcquire@16",CTy"LoadStore", TP[LW(1,16),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"excl", bVar"rn_unknown",bVar"rt_unknown",Var("s",FTy 5), Var("n",FTy 5),Var("t",FTy 5)]))), (LW(2,2), Call ("LoadStore",CTy"instruction", Call ("LoadStoreAcquire@32",CTy"LoadStore", TP[LW(2,32),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"excl", bVar"rn_unknown",bVar"rt_unknown",Var("s",FTy 5), Var("n",FTy 5),Var("t",FTy 5)]))), (LW(3,2), Call ("LoadStore",CTy"instruction", Call ("LoadStoreAcquire@64",CTy"LoadStore", TP[LW(3,64),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"excl", bVar"rn_unknown",bVar"rt_unknown",Var("s",FTy 5), Var("n",FTy 5),Var("t",FTy 5)])))]))) ; val LoadStoreAcquire_def = Def ("LoadStoreAcquire", TP[Var("size",FTy 2),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"excl",bVar"pair",Var("Rs",FTy 5), Var("Rn",FTy 5),Var("Rt",FTy 5),Var("Rt2",FTy 5)], Let(TP[bVar"rt_unknown",bVar"rn_unknown", Var("ast",OTy(CTy"instruction"))], ITE(Bop(And, EQ(Var("memop",CTy"MemOp"),LC("MemOp_LOAD",CTy"MemOp")), Bop(And,bVar"pair",EQ(Var("Rt",FTy 5),Var("Rt2",FTy 5)))), CS(Apply(LX(ATy(sTy,FTy 2)),LS"LoadAcquire unpredictable"), [(LW(0,2),TP[LT,LF,LO(CTy"instruction")]), (LW(1,2), TP[LF,LF,Mop(Some,Const("Unallocated",CTy"instruction"))]), (AVar(FTy 2), TP[LF,LF,Mop(Some,Const("NoOperation",CTy"instruction"))])]), TP[LF,LF,LO(CTy"instruction")]), Let(TP[bVar"rt_unknown",bVar"rn_unknown", Var("ast",OTy(CTy"instruction"))], ITE(Bop(Or, Bop(And, EQ(Var("memop",CTy"MemOp"), LC("MemOp_STORE",CTy"MemOp")), Bop(And,bVar"excl", EQ(Var("Rs",FTy 5),Var("Rt",FTy 5)))), Bop(And,bVar"pair",EQ(Var("Rs",FTy 5),Var("Rt2",FTy 5)))), CS(Apply (LX(ATy(sTy,FTy 2)), LS"StoreAcquire Rs = Rt unpredictable"), [(LW(0,2), TP[LT,bVar"rn_unknown", Var("ast",OTy(CTy"instruction"))]), (LW(1,2), TP[bVar"rt_unknown",bVar"rn_unknown", Var("ast",OTy(CTy"instruction"))]), (LW(2,2), TP[bVar"rt_unknown",bVar"rn_unknown", Mop(Some,Const("Unallocated",CTy"instruction"))]), (LW(3,2), TP[bVar"rt_unknown",bVar"rn_unknown", Mop(Some,Const("NoOperation",CTy"instruction"))])]), TP[bVar"rt_unknown",bVar"rn_unknown", Var("ast",OTy(CTy"instruction"))]), Let(TP[bVar"rt_unknown",bVar"rn_unknown", Var("ast",OTy(CTy"instruction"))], ITE(Bop(And, EQ(Var("memop",CTy"MemOp"), LC("MemOp_STORE",CTy"MemOp")), Bop(And,bVar"excl", Bop(And,EQ(Var("Rs",FTy 5),Var("Rn",FTy 5)), Mop(Not,EQ(Var("Rn",FTy 5),LW(31,5)))))), CS(Apply (LX(ATy(sTy,FTy 2)), LS"StoreAcquire Rs = Rn unpredictable"), [(LW(0,2), TP[bVar"rt_unknown",LT, Var("ast",OTy(CTy"instruction"))]), (LW(1,2), TP[bVar"rt_unknown",bVar"rn_unknown", Var("ast",OTy(CTy"instruction"))]), (LW(2,2), TP[bVar"rt_unknown",bVar"rn_unknown", Mop(Some,Const("Unallocated",CTy"instruction"))]), (LW(3,2), TP[bVar"rt_unknown",bVar"rn_unknown", Mop(Some,Const("NoOperation",CTy"instruction"))])]), TP[bVar"rt_unknown",bVar"rn_unknown", Var("ast",OTy(CTy"instruction"))]), CS(Var("ast",OTy(CTy"instruction")), [(Mop(Some,Var("i",CTy"instruction")), Var("i",CTy"instruction")), (LO(CTy"instruction"), Call ("LoadStoreAcquireN",CTy"instruction", TP[Var("size",FTy 2),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"excl", bVar"pair",bVar"rn_unknown",bVar"rt_unknown", Var("Rs",FTy 5),Var("Rn",FTy 5),Var("Rt",FTy 5), Var("Rt2",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([(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"),Mop(Not,bVar"b'24"))))), Let(Var("immhi",FTy 19), Mop(Cast(FTy 19), LL[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"]), Let(Var("immlo",FTy 2), Mop(Cast(FTy 2),LL[bVar"b'30",bVar"b'29"]), Let(bVar"page", Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'31"])), Call ("Address",CTy"instruction", TP[bVar"page", ITE(bVar"page", Mop(SE F64, CC[Var("immhi",FTy 19), Var("immlo",FTy 2),LW(0,12)]), Mop(SE F64, CC[Var("immhi",FTy 19), Var("immlo",FTy 2)])), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"])]))))), (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,bVar"b'24", Bop(And,bVar"b'23", Bop(And,bVar"b'22", Mop(Not,bVar"b'21")))))))), Const("Reserved",CTy"instruction")), (Bop(And,Mop(Not,bVar"b'31"), 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,bVar"b'24",Mop(Not,bVar"b'21"))))))), Let(Var("imm6",FTy 6), Mop(Cast(FTy 6), LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12", bVar"b'11",bVar"b'10"]), ITE(Bop(Bit,Var("imm6",FTy 6),LN 5), Const("Reserved",CTy"instruction"), Call ("Data",CTy"instruction", Call ("AddSubShiftedRegister@32",CTy"Data", TP[LW(0,32), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'29"])), Call ("DecodeShift",CTy"ShiftType", Mop(Cast(FTy 2),LL[bVar"b'23",bVar"b'22"])), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Var("imm6",FTy 6), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7", bVar"b'6",bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"])]))))), (Bop(And,bVar"b'31", 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,bVar"b'24",Mop(Not,bVar"b'21"))))))), Call ("Data",CTy"instruction", Call ("AddSubShiftedRegister@64",CTy"Data", TP[LW(1,64),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'29"])), Call ("DecodeShift",CTy"ShiftType", Mop(Cast(FTy 2),LL[bVar"b'23",bVar"b'22"])), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 6), LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12", bVar"b'11",bVar"b'10"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (Bop(And,Mop(Not,bVar"b'31"), 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,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,Mop(Not,bVar"b'22"), bVar"b'21")))))))), Let(Var("imm3",FTy 3), Mop(Cast(FTy 3),LL[bVar"b'12",bVar"b'11",bVar"b'10"]), ITE(Bop(Ugt,Var("imm3",FTy 3),LW(4,3)), Const("Reserved",CTy"instruction"), Call ("Data",CTy"instruction", Call ("AddSubExtendRegister@32",CTy"Data", TP[LW(0,32), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'29"])), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Call ("DecodeRegExtend",CTy"ExtendType", Mop(Cast(FTy 3), LL[bVar"b'15",bVar"b'14",bVar"b'13"])), Var("imm3",FTy 3), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7", bVar"b'6",bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"])]))))), (Bop(And,bVar"b'31", 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,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,Mop(Not,bVar"b'22"), bVar"b'21")))))))), Let(Var("imm3",FTy 3), Mop(Cast(FTy 3),LL[bVar"b'12",bVar"b'11",bVar"b'10"]), ITE(Bop(Ugt,Var("imm3",FTy 3),LW(4,3)), Const("Reserved",CTy"instruction"), Call ("Data",CTy"instruction", Call ("AddSubExtendRegister@64",CTy"Data", TP[LW(1,64), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'29"])), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Call ("DecodeRegExtend",CTy"ExtendType", Mop(Cast(FTy 3), LL[bVar"b'15",bVar"b'14",bVar"b'13"])), Var("imm3",FTy 3), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7", bVar"b'6",bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"])]))))), (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,bVar"b'24",bVar"b'23"))))), Const("Reserved",CTy"instruction")), (Bop(And,Mop(Not,bVar"b'31"), 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"),bVar"b'24"))))), Let(Var("imm12",FTy 12), Mop(Cast(FTy 12), LL[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"]), Call ("Data",CTy"instruction", Call ("AddSubImmediate@32",CTy"Data", TP[LW(0,32), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'29"])), ITE(EQ(Mop(Cast(FTy 2),LL[bVar"b'23",bVar"b'22"]), LW(0,2)), Mop(Cast F32,Var("imm12",FTy 12)), Bop(Lsl,Mop(Cast F32,Var("imm12",FTy 12)), LN 12)), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])])))), (Bop(And,bVar"b'31", 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"),bVar"b'24"))))), Let(Var("imm12",FTy 12), Mop(Cast(FTy 12), LL[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"]), Call ("Data",CTy"instruction", Call ("AddSubImmediate@64",CTy"Data", TP[LW(1,64), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'29"])), ITE(EQ(Mop(Cast(FTy 2),LL[bVar"b'23",bVar"b'22"]), LW(0,2)), Mop(Cast F64,Var("imm12",FTy 12)), Bop(Lsl,Mop(Cast F64,Var("imm12",FTy 12)), LN 12)), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])])))), (Bop(And,Mop(Not,bVar"b'31"), 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'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"), Mop(Not, bVar"b'10"))))))))))))))), Call ("Data",CTy"instruction", Call ("AddSubCarry@32",CTy"Data", TP[LW(0,32),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'29"])), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (Bop(And,bVar"b'31", 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'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"), Mop(Not, bVar"b'10"))))))))))))))), Call ("Data",CTy"instruction", Call ("AddSubCarry@64",CTy"Data", TP[LW(1,64),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'29"])), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,Mop(Not,bVar"b'28"), Bop(And,bVar"b'27", Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25",Mop(Not,bVar"b'24")))))), Let(Var("imm6",FTy 6), Mop(Cast(FTy 6), LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12", bVar"b'11",bVar"b'10"]), ITE(Bop(Bit,Var("imm6",FTy 6),LN 5), Const("Reserved",CTy"instruction"), Let(TP[Var("opc",CTy"LogicalOp"),bVar"setflags"], Call ("DecodeLogicalOp",PTy(CTy"LogicalOp",bTy), Mop(Cast(FTy 2),LL[bVar"b'30",bVar"b'29"])), Call ("Data",CTy"instruction", Call ("LogicalShiftedRegister@32",CTy"Data", TP[LW(0,32),Var("opc",CTy"LogicalOp"), EQ(Mop(Cast F1,LL[bVar"b'21"]),LW(1,1)), bVar"setflags", Call ("DecodeShift",CTy"ShiftType", Mop(Cast(FTy 2), LL[bVar"b'23",bVar"b'22"])), Mop(Cast nTy,Var("imm6",FTy 6)), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7", bVar"b'6",bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"])])))))), (Bop(And,bVar"b'31", Bop(And,Mop(Not,bVar"b'28"), Bop(And,bVar"b'27", Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25",Mop(Not,bVar"b'24")))))), Let(TP[Var("opc",CTy"LogicalOp"),bVar"setflags"], Call ("DecodeLogicalOp",PTy(CTy"LogicalOp",bTy), Mop(Cast(FTy 2),LL[bVar"b'30",bVar"b'29"])), Call ("Data",CTy"instruction", Call ("LogicalShiftedRegister@64",CTy"Data", TP[LW(1,64),Var("opc",CTy"LogicalOp"), EQ(Mop(Cast F1,LL[bVar"b'21"]),LW(1,1)), bVar"setflags", Call ("DecodeShift",CTy"ShiftType", Mop(Cast(FTy 2),LL[bVar"b'23",bVar"b'22"])), Mop(Cast nTy, Mop(Cast(FTy 6), LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12",bVar"b'11",bVar"b'10"])), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])])))), (Bop(And,Mop(Not,bVar"b'31"), 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"), bVar"b'22"))))))), Const("Reserved",CTy"instruction")), (Bop(And,Mop(Not,bVar"b'31"), 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"), Mop(Not,bVar"b'23"))))))), CS(Call ("DecodeBitMasks",OTy(PTy(F32,F32)), TP[Mop(Cast F1,LL[bVar"b'22"]), Mop(Cast(FTy 6), LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12", bVar"b'11",bVar"b'10"]), Mop(Cast(FTy 6), LL[bVar"b'21",bVar"b'20",bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]),LT]), [(Mop(Some,TP[Var("imm",F32),AVar F32]), Let(TP[Var("opc",CTy"LogicalOp"),bVar"setflags"], Call ("DecodeLogicalOp",PTy(CTy"LogicalOp",bTy), Mop(Cast(FTy 2),LL[bVar"b'30",bVar"b'29"])), Call ("Data",CTy"instruction", Call ("LogicalImmediate@32",CTy"Data", TP[LW(0,32),Var("opc",CTy"LogicalOp"), bVar"setflags",Var("imm",F32), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7", bVar"b'6",bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"])])))), (LO(PTy(F32,F32)),Const("Reserved",CTy"instruction"))])), (Bop(And,bVar"b'31", 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"), Mop(Not,bVar"b'23"))))))), CS(Call ("DecodeBitMasks",OTy(PTy(F64,F64)), TP[Mop(Cast F1,LL[bVar"b'22"]), Mop(Cast(FTy 6), LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12", bVar"b'11",bVar"b'10"]), Mop(Cast(FTy 6), LL[bVar"b'21",bVar"b'20",bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]),LT]), [(Mop(Some,TP[Var("imm",F64),AVar F64]), Let(TP[Var("opc",CTy"LogicalOp"),bVar"setflags"], Call ("DecodeLogicalOp",PTy(CTy"LogicalOp",bTy), Mop(Cast(FTy 2),LL[bVar"b'30",bVar"b'29"])), Call ("Data",CTy"instruction", Call ("LogicalImmediate@64",CTy"Data", TP[LW(1,64),Var("opc",CTy"LogicalOp"), bVar"setflags",Var("imm",F64), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7", bVar"b'6",bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"])])))), (LO(PTy(F64,F64)),Const("Reserved",CTy"instruction"))])), (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'24"), Bop(And,bVar"b'23", Bop(And,bVar"b'22", Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'15"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, bVar"b'13", Mop(Not, bVar"b'12"))))))))))))))), Call ("Data",CTy"instruction", Call ("Shift@32",CTy"Data", TP[LW(0,32), Call ("DecodeShift",CTy"ShiftType", Mop(Cast(FTy 2),LL[bVar"b'11",bVar"b'10"])), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (Bop(And,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'24"), Bop(And,bVar"b'23", Bop(And,bVar"b'22", Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'15"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, bVar"b'13", Mop(Not, bVar"b'12"))))))))))))))), Call ("Data",CTy"instruction", Call ("Shift@64",CTy"Data", TP[LW(1,64), Call ("DecodeShift",CTy"ShiftType", Mop(Cast(FTy 2),LL[bVar"b'11",bVar"b'10"])), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (Bop(And,Mop(Not,bVar"b'31"), 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,bVar"b'23",bVar"b'22"))))))), Const("Unallocated",CTy"instruction")), (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,bVar"b'25", Bop(And,Mop(Not,bVar"b'24"), bVar"b'23"))))))), Const("Unallocated",CTy"instruction")), (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"),bVar"b'23"))))), Let(Var("Rd",FTy 5), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"]), Let(Var("imm16",F16), Mop(Cast F16, LL[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"]), Let(Var("hw",FTy 2), Mop(Cast(FTy 2),LL[bVar"b'22",bVar"b'21"]), Let(Var("opcode",CTy"MoveWideOp"), CS(Mop(Cast(FTy 2),LL[bVar"b'30",bVar"b'29"]), [(LW(0,2), LC("MoveWideOp_N",CTy"MoveWideOp")), (LW(2,2), LC("MoveWideOp_Z",CTy"MoveWideOp")), (LW(3,2), LC("MoveWideOp_K",CTy"MoveWideOp")), (LW(1,2),LX(CTy"MoveWideOp"))]), ITE(EQ(Mop(Cast F1,LL[bVar"b'31"]),LW(1,1)), Call ("Data",CTy"instruction", Call ("MoveWide@64",CTy"Data", TP[LW(1,64), Var("opcode",CTy"MoveWideOp"), Var("hw",FTy 2), Var("imm16",F16),Var("Rd",FTy 5)])), Call ("Data",CTy"instruction", Call ("MoveWide@32",CTy"Data", TP[LW(0,32), Var("opcode",CTy"MoveWideOp"), Var("hw",FTy 2), Var("imm16",F16),Var("Rd",FTy 5)])))))))), (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,bVar"b'24", Mop(Not,bVar"b'23")))))))), Const("Unallocated",CTy"instruction")), (Bop(And,Mop(Not,bVar"b'31"), 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,bVar"b'24",Mop(Not,bVar"b'23"))))))), Let(Var("imms",FTy 6), Mop(Cast(FTy 6), LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12", bVar"b'11",bVar"b'10"]), Let(Var("immr",FTy 6), Mop(Cast(FTy 6), LL[bVar"b'21",bVar"b'20",bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("N",F1),Mop(Cast F1,LL[bVar"b'22"]), ITE(Bop(Or,EQ(Var("N",F1),LW(1,1)), Bop(Or,Bop(Bit,Var("immr",FTy 6),LN 5), Bop(Bit,Var("imms",FTy 6),LN 5))), Const("Reserved",CTy"instruction"), Let(TP[bVar"inzero",bVar"extend"], CS(Mop(Cast(FTy 2), LL[bVar"b'30",bVar"b'29"]), [(LW(0,2),TP[LT,LT]), (LW(1,2),TP[LF,LF]), (LW(2,2),TP[LT,LF]), (AVar(FTy 2),LX(PTy(bTy,bTy)))]), CS(Call ("DecodeBitMasks",OTy(PTy(F32,F32)), TP[Var("N",F1),Var("imms",FTy 6), Var("immr",FTy 6),LF]), [(Mop(Some, TP[Var("wmask",F32), Var("tmask",F32)]), Call ("Data",CTy"instruction", Call ("BitfieldMove@32",CTy"Data", TP[LW(0,32),bVar"inzero", bVar"extend", Var("wmask",F32), Var("tmask",F32), Mop(Cast nTy, Var("immr",FTy 6)), Mop(Cast nTy, Var("imms",FTy 6)), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8", bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3", bVar"b'2",bVar"b'1", bVar"b'0"])]))), (LO(PTy(F32,F32)), Const("Reserved",CTy"instruction"))]))))))), (Bop(And,bVar"b'31", 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,bVar"b'24",Mop(Not,bVar"b'23"))))))), Let(Var("imms",FTy 6), Mop(Cast(FTy 6), LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12", bVar"b'11",bVar"b'10"]), Let(Var("immr",FTy 6), Mop(Cast(FTy 6), LL[bVar"b'21",bVar"b'20",bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("N",F1),Mop(Cast F1,LL[bVar"b'22"]), ITE(EQ(Var("N",F1),LW(0,1)), Const("Reserved",CTy"instruction"), Let(TP[bVar"inzero",bVar"extend"], CS(Mop(Cast(FTy 2), LL[bVar"b'30",bVar"b'29"]), [(LW(0,2),TP[LT,LT]), (LW(1,2),TP[LF,LF]), (LW(2,2),TP[LT,LF]), (AVar(FTy 2),LX(PTy(bTy,bTy)))]), CS(Call ("DecodeBitMasks",OTy(PTy(F64,F64)), TP[Var("N",F1),Var("imms",FTy 6), Var("immr",FTy 6),LF]), [(Mop(Some, TP[Var("wmask",F64), Var("tmask",F64)]), Call ("Data",CTy"instruction", Call ("BitfieldMove@64",CTy"Data", TP[LW(1,64),bVar"inzero", bVar"extend", Var("wmask",F64), Var("tmask",F64), Mop(Cast nTy, Var("immr",FTy 6)), Mop(Cast nTy, Var("imms",FTy 6)), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8", bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3", bVar"b'2",bVar"b'1", bVar"b'0"])]))), (LO(PTy(F64,F64)), Const("Reserved",CTy"instruction"))]))))))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,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,bVar"b'22", Bop(And, Mop(Not,bVar"b'21"), Bop(And,bVar"b'11", Bop(And, Mop(Not, bVar"b'10"), Mop(Not, bVar"b'4"))))))))))))), Call ("Data",CTy"instruction", Call ("ConditionalCompareImmediate@32",CTy"Data", TP[LW(0,32),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])), Mop(Cast F32, Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"])), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12"]), TP[Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'3"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'2"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'1"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'0"]))], Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"])]))), (Bop(And,bVar"b'31", Bop(And,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,bVar"b'22", Bop(And, Mop(Not,bVar"b'21"), Bop(And,bVar"b'11", Bop(And, Mop(Not, bVar"b'10"), Mop(Not, bVar"b'4"))))))))))))), Call ("Data",CTy"instruction", Call ("ConditionalCompareImmediate@64",CTy"Data", TP[LW(1,64),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])), Mop(Cast F64, Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"])), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12"]), TP[Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'3"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'2"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'1"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'0"]))], Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"])]))), (Bop(And,Mop(Not,bVar"b'31"), Bop(And,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,bVar"b'22", Bop(And, Mop(Not,bVar"b'21"), Bop(And, Mop(Not, bVar"b'11"), Bop(And, Mop(Not, bVar"b'10"), Mop(Not, bVar"b'4"))))))))))))), Call ("Data",CTy"instruction", Call ("ConditionalCompareRegister@32",CTy"Data", TP[LW(0,32),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12"]), TP[Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'3"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'2"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'1"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'0"]))], Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"])]))), (Bop(And,bVar"b'31", Bop(And,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,bVar"b'22", Bop(And, Mop(Not,bVar"b'21"), Bop(And, Mop(Not, bVar"b'11"), Bop(And, Mop(Not, bVar"b'10"), Mop(Not, bVar"b'4"))))))))))))), Call ("Data",CTy"instruction", Call ("ConditionalCompareRegister@64",CTy"Data", TP[LW(1,64),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12"]), TP[Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'3"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'2"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'1"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'0"]))], Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"])]))), (Bop(And,Mop(Not,bVar"b'31"), 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,bVar"b'23", Bop(And,Mop(Not,bVar"b'22"), Bop(And, Mop(Not,bVar"b'21"), Mop(Not,bVar"b'11"))))))))))), Call ("Data",CTy"instruction", Call ("ConditionalSelect@32",CTy"Data", TP[LW(0,32),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'10"])), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12"]), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (Bop(And,bVar"b'31", 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,bVar"b'23", Bop(And,Mop(Not,bVar"b'22"), Bop(And, Mop(Not,bVar"b'21"), Mop(Not,bVar"b'11"))))))))))), Call ("Data",CTy"instruction", Call ("ConditionalSelect@64",CTy"Data", TP[LW(1,64),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'30"])), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'10"])), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12"]), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (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,bVar"b'23", Bop(And,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, bVar"b'12", Mop(Not, bVar"b'11"))))))))))))))))))))), Call ("Data",CTy"instruction", Call ("CountLeading@32",CTy"Data", TP[LW(0,32),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'10"])), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (Bop(And,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,bVar"b'23", Bop(And,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, bVar"b'12", Mop(Not, bVar"b'11"))))))))))))))))))))), Call ("Data",CTy"instruction", Call ("CountLeading@64",CTy"Data", TP[LW(1,64),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'10"])), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (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,bVar"b'24", Bop(And,bVar"b'23", Mop(Not,bVar"b'21")))))))))), Let(Var("imms",FTy 6), Mop(Cast(FTy 6), LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12", bVar"b'11",bVar"b'10"]), ITB([(Mop(Not,EQ(Mop(Cast F1,LL[bVar"b'22"]),LW(0,1))), Const("Unallocated",CTy"instruction")), (Bop(Bit,Var("imms",FTy 6),LN 5), Const("Reserved",CTy"instruction"))], Call ("Data",CTy"instruction", Call ("ExtractRegister@32",CTy"Data", TP[LW(0,32),Var("imms",FTy 6), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7", bVar"b'6",bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"])]))))), (Bop(And,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,bVar"b'24", Bop(And,bVar"b'23", Mop(Not,bVar"b'21")))))))))), ITE(Mop(Not,EQ(Mop(Cast F1,LL[bVar"b'22"]),LW(1,1))), Const("Unallocated",CTy"instruction"), Call ("Data",CTy"instruction", Call ("ExtractRegister@64",CTy"Data", TP[LW(1,64), Mop(Cast(FTy 6), LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12",bVar"b'11",bVar"b'10"]), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])])))), (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'24"), Bop(And,bVar"b'23", Bop(And,bVar"b'22", Bop(And, Mop(Not, bVar"b'21"), 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"), bVar"b'11"))))))))))))))), Call ("Data",CTy"instruction", Call ("Division@32",CTy"Data", TP[LW(0,32),EQ(Mop(Cast F1,LL[bVar"b'10"]),LW(0,1)), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (Bop(And,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'24"), Bop(And,bVar"b'23", Bop(And,bVar"b'22", Bop(And, Mop(Not, bVar"b'21"), 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"), bVar"b'11"))))))))))))))), Call ("Data",CTy"instruction", Call ("Division@64",CTy"Data", TP[LW(1,64),EQ(Mop(Cast F1,LL[bVar"b'10"]),LW(0,1)), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (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,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And, Mop(Not,bVar"b'22"), Mop(Not,bVar"b'21"))))))))))), Call ("Data",CTy"instruction", Call ("MultiplyAddSub@32",CTy"Data", TP[LW(0,32),EQ(Mop(Cast F1,LL[bVar"b'15"]),LW(1,1)), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'14",bVar"b'13",bVar"b'12",bVar"b'11", bVar"b'10"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (Bop(And,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,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And, Mop(Not,bVar"b'22"), Mop(Not,bVar"b'21"))))))))))), Call ("Data",CTy"instruction", Call ("MultiplyAddSub@64",CTy"Data", TP[LW(1,64),EQ(Mop(Cast F1,LL[bVar"b'15"]),LW(1,1)), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'14",bVar"b'13",bVar"b'12",bVar"b'11", bVar"b'10"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (Bop(And,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,bVar"b'24", Bop(And,Mop(Not,bVar"b'22"), bVar"b'21"))))))))), Call ("Data",CTy"instruction", Call ("MultiplyAddSubLong",CTy"Data", TP[Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'15"])), EQ(Mop(Cast F1,LL[bVar"b'23"]),LW(0,1)), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'14",bVar"b'13",bVar"b'12",bVar"b'11", bVar"b'10"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (Bop(And,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,bVar"b'24", Bop(And,bVar"b'22", Bop(And, Mop(Not,bVar"b'21"), Mop(Not,bVar"b'15"))))))))))), Call ("Data",CTy"instruction", Call ("MultiplyHigh",CTy"Data", TP[EQ(Mop(Cast F1,LL[bVar"b'23"]),LW(0,1)), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (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,bVar"b'23", Bop(And,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, bVar"b'11", bVar"b'10"))))))))))))))))))))), Const("Unallocated",CTy"instruction")), (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,bVar"b'23", Bop(And,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"), Mop(Not, bVar"b'12")))))))))))))))))))), Call ("Data",CTy"instruction", Call ("Reverse@32",CTy"Data", TP[LW(0,32), Mop(Cast(CTy"RevOp"), Mop(Cast(FTy 2),LL[bVar"b'11",bVar"b'10"])), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (Bop(And,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,bVar"b'23", Bop(And,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"), Mop(Not, bVar"b'12")))))))))))))))))))), Call ("Data",CTy"instruction", Call ("Reverse@64",CTy"Data", TP[LW(1,64), Mop(Cast(CTy"RevOp"), Mop(Cast(FTy 2),LL[bVar"b'11",bVar"b'10"])), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (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'24"), Bop(And,bVar"b'23", Bop(And,bVar"b'22", Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'15"), Bop(And, bVar"b'14", Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'11"), Mop(Not, bVar"b'10")))))))))))))))), Call ("CRCExt",CTy"instruction", Call ("CRC@8",CTy"CRCExt", TP[LW(0,8),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'12"])), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (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'24"), Bop(And,bVar"b'23", Bop(And,bVar"b'22", Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'15"), Bop(And, bVar"b'14", Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'11"), bVar"b'10"))))))))))))))), Call ("CRCExt",CTy"instruction", Call ("CRC@16",CTy"CRCExt", TP[LW(1,16),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'12"])), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (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'24"), Bop(And,bVar"b'23", Bop(And,bVar"b'22", Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'15"), Bop(And, bVar"b'14", Bop(And, Mop(Not, bVar"b'13"), Bop(And, bVar"b'11", Mop(Not, bVar"b'10")))))))))))))))), Call ("CRCExt",CTy"instruction", Call ("CRC@32",CTy"CRCExt", TP[LW(2,32),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'12"])), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (Bop(And,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'24"), Bop(And,bVar"b'23", Bop(And,bVar"b'22", Bop(And, Mop(Not, bVar"b'21"), Bop(And, Mop(Not, bVar"b'15"), Bop(And, bVar"b'14", Bop(And, Mop(Not, bVar"b'13"), Bop(And, bVar"b'11", bVar"b'10"))))))))))))))), Call ("CRCExt",CTy"instruction", Call ("CRC@64",CTy"CRCExt", TP[LW(3,64),Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'12"])), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (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,Mop(Not,bVar"b'27"), Bop(And,bVar"b'26", Bop(And,Mop(Not,bVar"b'25"), Bop(And,Mop(Not,bVar"b'24"), Mop(Not,bVar"b'4"))))))))), Call ("Branch",CTy"instruction", Call ("BranchConditional",CTy"Branch", TP[Mop(SE F64, CC[Mop(Cast(FTy 19), LL[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"]),LW(0,2)]), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"])]))), (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"),bVar"b'26")))), Call ("Branch",CTy"instruction", Call ("BranchImmediate",CTy"Branch", TP[Mop(SE F64, CC[Mop(Cast(FTy 26), LL[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"]),LW(0,2)]), ITE(EQ(Mop(Cast F1,LL[bVar"b'31"]),LW(1,1)), LC("BranchType_CALL",CTy"BranchType"), LC("BranchType_JMP",CTy"BranchType"))]))), (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,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, bVar"b'19", Bop(And, bVar"b'18", Bop(And, bVar"b'17", Bop(And, 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'4"), Bop(And, Mop(Not, bVar"b'3"), Bop(And, Mop(Not, bVar"b'2"), Bop(And, Mop(Not, bVar"b'1"), Mop(Not, bVar"b'0"))))))))))))))))))))))))))), Call ("Branch",CTy"instruction", Call ("BranchRegister",CTy"Branch", TP[Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), LC("BranchType_JMP",CTy"BranchType")]))), (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,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, bVar"b'19", Bop(And, bVar"b'18", Bop(And, bVar"b'17", Bop(And, 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'4"), Bop(And, Mop(Not, bVar"b'3"), Bop(And, Mop(Not, bVar"b'2"), Bop(And, Mop(Not, bVar"b'1"), Mop(Not, bVar"b'0"))))))))))))))))))))))))))), Call ("Branch",CTy"instruction", Call ("BranchRegister",CTy"Branch", TP[Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), LC("BranchType_CALL",CTy"BranchType")]))), (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,bVar"b'26", Bop(And,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, bVar"b'19", Bop(And, bVar"b'18", Bop(And, bVar"b'17", Bop(And, 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'4"), Bop(And, Mop(Not, bVar"b'3"), Bop(And, Mop(Not, bVar"b'2"), Bop(And, Mop(Not, bVar"b'1"), Mop(Not, bVar"b'0"))))))))))))))))))))))))))), Call ("Branch",CTy"instruction", Call ("BranchRegister",CTy"Branch", TP[Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), LC("BranchType_RET",CTy"BranchType")]))), (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,bVar"b'26", Bop(And,bVar"b'25", Bop(And,Mop(Not,bVar"b'24"), Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'20", Bop(And,bVar"b'19", Bop(And, bVar"b'18", Bop(And, bVar"b'17", Bop(And, 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'4"), Bop(And, Mop(Not, bVar"b'3"), Bop(And, Mop(Not, bVar"b'2"), Bop(And, Mop(Not, bVar"b'1"), Mop(Not, bVar"b'0"))))))))))))))))))))))))), Const("Unallocated",CTy"instruction")), (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,bVar"b'26",Mop(Not,bVar"b'25")))))), Let(Var("Rt",FTy 5), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"]), Let(bVar"iszero",EQ(Mop(Cast F1,LL[bVar"b'24"]),LW(0,1)), Let(Var("offset",F64), Mop(SE F64, CC[Mop(Cast(FTy 19), LL[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"]),LW(0,2)]), ITE(EQ(Mop(Cast F1,LL[bVar"b'31"]),LW(1,1)), Call ("Branch",CTy"instruction", Call ("CompareAndBranch@64",CTy"Branch", TP[LW(1,64),bVar"iszero", Var("offset",F64),Var("Rt",FTy 5)])), Call ("Branch",CTy"instruction", Call ("CompareAndBranch@32",CTy"Branch", TP[LW(0,32),bVar"iszero", Var("offset",F64),Var("Rt",FTy 5)]))))))), (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,bVar"b'26",bVar"b'25"))))), Let(Var("Rt",FTy 5), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"]), Let(Var("sf",F1),Mop(Cast F1,LL[bVar"b'31"]), Let(Var("bit_pos",FTy 6), CC[Var("sf",F1), Mop(Cast(FTy 5), LL[bVar"b'23",bVar"b'22",bVar"b'21", bVar"b'20",bVar"b'19"])], Let(bVar"bit_val", Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'24"])), Let(Var("offset",F64), Mop(SE F64, CC[Mop(Cast(FTy 14), LL[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"]), LW(0,2)]), ITE(EQ(Var("sf",F1),LW(1,1)), Call ("Branch",CTy"instruction", Call ("TestBitAndBranch@64", CTy"Branch", TP[LW(1,64), Var("bit_pos",FTy 6), bVar"bit_val", Var("offset",F64), Var("Rt",FTy 5)])), Call ("Branch",CTy"instruction", Call ("TestBitAndBranch@32", CTy"Branch", TP[LW(0,32), Var("bit_pos",FTy 6), bVar"bit_val", Var("offset",F64), Var("Rt",FTy 5)]))))))))), (Bop(And,bVar"b'31", Bop(And,Mop(Not,bVar"b'30"), Bop(And,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,bVar"b'23", Bop(And,bVar"b'22", Mop(Not,bVar"b'21"))))))))))), Const("Unallocated",CTy"instruction")), (Bop(And,bVar"b'31", Bop(And,Mop(Not,bVar"b'30"), Bop(And,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,bVar"b'24", Bop(And,bVar"b'23",bVar"b'22"))))))))), Const("Unallocated",CTy"instruction")), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,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,bVar"b'23", Bop(And,bVar"b'22", Mop(Not,bVar"b'21"))))))))))), Const("Unallocated",CTy"instruction")), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,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,bVar"b'23", Bop(And, Mop(Not,bVar"b'21"), Bop(And,bVar"b'11", Mop(Not, bVar"b'10")))))))))))), Const("Unallocated",CTy"instruction")), (Bop(And,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'21"), bVar"b'10"))))))), Call ("LoadStoreImmediate",CTy"instruction", TP[Mop(Cast(FTy 2),LL[bVar"b'31",bVar"b'30"]), Mop(Cast(FTy 2),LL[bVar"b'23",bVar"b'22"]), LC("AccType_NORMAL",CTy"AccType"),LT, EQ(Mop(Cast F1,LL[bVar"b'11"]),LW(0,1)),LF, Mop(SE F64, Mop(Cast(FTy 9), LL[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"])), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])])), (Bop(And,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'21"), Mop(Not,bVar"b'10")))))))), Call ("LoadStoreImmediate",CTy"instruction", TP[Mop(Cast(FTy 2),LL[bVar"b'31",bVar"b'30"]), Mop(Cast(FTy 2),LL[bVar"b'23",bVar"b'22"]), ITE(EQ(Mop(Cast F1,LL[bVar"b'11"]),LW(1,1)), LC("AccType_UNPRIV",CTy"AccType"), LC("AccType_NORMAL",CTy"AccType")),LF,LF,LF, Mop(SE F64, Mop(Cast(FTy 9), LL[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"])), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])])), (Bop(And,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"),bVar"b'24"))))), Let(Var("size",FTy 2), Mop(Cast(FTy 2),LL[bVar"b'31",bVar"b'30"]), Call ("LoadStoreImmediate",CTy"instruction", TP[Var("size",FTy 2), Mop(Cast(FTy 2),LL[bVar"b'23",bVar"b'22"]), LC("AccType_NORMAL",CTy"AccType"),LF,LF,LT, Bop(Lsl, Mop(Cast F64, Mop(Cast(FTy 12), LL[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"])), Mop(Cast nTy,Var("size",FTy 2))), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (Bop(And,bVar"b'31", Bop(And,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,bVar"b'23", Bop(And,bVar"b'22", Bop(And,bVar"b'21", Bop(And,bVar"b'11", Mop(Not, bVar"b'10")))))))))))), Const("Unallocated",CTy"instruction")), (Bop(And,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,bVar"b'21", Bop(And,Mop(Not,bVar"b'15"), Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'11", Mop(Not,bVar"b'10"))))))))))), Const("Reserved",CTy"instruction")), (Bop(And,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,bVar"b'21", Bop(And,bVar"b'15", Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'11", Mop(Not,bVar"b'10"))))))))))), Const("Reserved",CTy"instruction")), (Bop(And,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,bVar"b'21", Bop(And,bVar"b'11", Mop(Not,bVar"b'10"))))))))), Let(Var("opc",FTy 2), Mop(Cast(FTy 2),LL[bVar"b'23",bVar"b'22"]), Let(Var("size",FTy 2), Mop(Cast(FTy 2),LL[bVar"b'31",bVar"b'30"]), Let(TP[Var("memop",CTy"MemOp"),bVar"regsize_word", bVar"signed"], ITB([(Mop(Not,Bop(Bit,Var("opc",FTy 2),LN 1)), TP[ITE(Bop(Bit,Var("opc",FTy 2),LN 0), LC("MemOp_LOAD",CTy"MemOp"), LC("MemOp_STORE",CTy"MemOp")), Mop(Not,EQ(Var("size",FTy 2),LW(3,2))), LF]), (EQ(Var("size",FTy 2),LW(3,2)), TP[LC("MemOp_PREFETCH",CTy"MemOp"),LX bTy, LX bTy])], TP[LC("MemOp_LOAD",CTy"MemOp"), Bop(Bit,Var("opc",FTy 2),LN 0),LT]), Call ("LoadStoreRegister",CTy"instruction", TP[Var("size",FTy 2),bVar"regsize_word", Var("memop",CTy"MemOp"),bVar"signed", Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Call ("DecodeRegExtend",CTy"ExtendType", Mop(Cast(FTy 3), LL[bVar"b'15",bVar"b'14",bVar"b'13"])), ITE(EQ(Mop(Cast F1,LL[bVar"b'12"]),LW(1,1)), Mop(Cast nTy,Var("size",FTy 2)),LN 0), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7", bVar"b'6",bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"])]))))), (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"), Mop(Not,bVar"b'24")))))), Let(Var("Rt",FTy 5), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"]), Let(Var("offset",F64), Mop(SE F64, CC[Mop(Cast(FTy 19), LL[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"]), LW(0,2)]), CS(Mop(Cast(FTy 2),LL[bVar"b'31",bVar"b'30"]), [(LW(0,2), Call ("LoadStore",CTy"instruction", Call ("LoadLiteral@32",CTy"LoadStore", TP[LW(0,32),LC("MemOp_LOAD",CTy"MemOp"), LF,Var("offset",F64),Var("Rt",FTy 5)]))), (LW(1,2), Call ("LoadStore",CTy"instruction", Call ("LoadLiteral@64",CTy"LoadStore", TP[LW(1,64),LC("MemOp_LOAD",CTy"MemOp"), LF,Var("offset",F64),Var("Rt",FTy 5)]))), (LW(2,2), Call ("LoadStore",CTy"instruction", Call ("LoadLiteral@32",CTy"LoadStore", TP[LW(2,32),LC("MemOp_LOAD",CTy"MemOp"), LT,Var("offset",F64),Var("Rt",FTy 5)]))), (LW(3,2), Call ("LoadStore",CTy"instruction", Call ("LoadLiteral@32",CTy"LoadStore", TP[LW(3,32), LC("MemOp_PREFETCH",CTy"MemOp"),LF, Var("offset",F64),Var("Rt",FTy 5)])))])))), (Bop(And,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"), Mop(Not,bVar"b'22"))))))), Const("Unallocated",CTy"instruction")), (Bop(And,bVar"b'31", Bop(And,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"), Mop(Not,bVar"b'25"))))))), Const("Unallocated",CTy"instruction")), (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'24"), Mop(Not,bVar"b'23"))))))), Const("Unallocated",CTy"instruction")), (Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'28"), Bop(And,bVar"b'27", Bop(And,Mop(Not,bVar"b'26"),Mop(Not,bVar"b'25"))))), Let(Var("sf",F1),Mop(Cast F1,LL[bVar"b'31"]), Let(bVar"wback",EQ(Mop(Cast F1,LL[bVar"b'23"]),LW(1,1)), Let(bVar"signed", EQ(Mop(Cast F1,LL[bVar"b'30"]),LW(1,1)), Let(bVar"postindex", EQ(Mop(Cast F1,LL[bVar"b'24"]),LW(0,1)), Let(bVar"nontemporal", Bop(And, Mop(Not, Bop(Or,bVar"wback",bVar"signed")), bVar"postindex"), Call ("LoadStorePair",CTy"instruction", TP[Var("sf",F1), ITE(EQ(Mop(Cast F1,LL[bVar"b'22"]), LW(1,1)), LC("MemOp_LOAD",CTy"MemOp"), LC("MemOp_STORE",CTy"MemOp")), ITE(bVar"nontemporal", LC("AccType_STREAM", CTy"AccType"), LC("AccType_NORMAL", CTy"AccType")),bVar"signed", bVar"wback", Bop(And,Mop(Not,bVar"nontemporal"), bVar"postindex"), Bop(Lsl, Mop(SE F64, Mop(Cast(FTy 7), LL[bVar"b'21", bVar"b'20", bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16", bVar"b'15"])), Bop(Add,LN 2, Mop(Cast nTy,Var("sf",F1)))), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8", bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3", bVar"b'2",bVar"b'1", bVar"b'0"]), Mop(Cast(FTy 5), LL[bVar"b'14",bVar"b'13", bVar"b'12",bVar"b'11", bVar"b'10"])]))))))), (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'24"), Bop(And,bVar"b'23", Bop(And,Mop(Not,bVar"b'21"), Mop(Not,bVar"b'15"))))))))), Const("Unallocated",CTy"instruction")), (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'24"), Bop(And,bVar"b'23",bVar"b'21"))))))), Const("Unallocated",CTy"instruction")), (Bop(And,Mop(Not,bVar"b'31"), 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'24"), bVar"b'21"))))))), Const("Unallocated",CTy"instruction")), (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"), Mop(Not,bVar"b'24")))))), Call ("LoadStoreAcquire",CTy"instruction", TP[Mop(Cast(FTy 2),LL[bVar"b'31",bVar"b'30"]), ITE(EQ(Mop(Cast F1,LL[bVar"b'22"]),LW(1,1)), LC("MemOp_LOAD",CTy"MemOp"), LC("MemOp_STORE",CTy"MemOp")), ITE(EQ(Mop(Cast F1,LL[bVar"b'15"]),LW(1,1)), LC("AccType_ORDERED",CTy"AccType"), LC("AccType_ATOMIC",CTy"AccType")), EQ(Mop(Cast F1,LL[bVar"b'23"]),LW(0,1)), EQ(Mop(Cast F1,LL[bVar"b'21"]),LW(1,1)), Mop(Cast(FTy 5), LL[bVar"b'20",bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 5), LL[bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6", bVar"b'5"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Mop(Cast(FTy 5), LL[bVar"b'14",bVar"b'13",bVar"b'12",bVar"b'11", bVar"b'10"])])), (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,bVar"b'26", Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And, Mop(Not,bVar"b'22"), bVar"b'20")))))))))), Call ("System",CTy"instruction", Call ("MoveSystemRegister",CTy"System", TP[Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'21"])), Bop(Add,LW(2,3), Mop(Cast(FTy 3),Mop(Cast F1,LL[bVar"b'19"]))), Mop(Cast(FTy 3),LL[bVar"b'18",bVar"b'17",bVar"b'16"]), Mop(Cast(FTy 3),LL[bVar"b'7",bVar"b'6",bVar"b'5"]), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12"]), Mop(Cast F4, LL[bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8"]), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])]))), (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,bVar"b'26", Bop(And,Mop(Not,bVar"b'25"), Bop(And,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, bVar"b'14", Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, bVar"b'7", Bop(And, Mop(Not, bVar"b'6"), Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, bVar"b'3", Bop(And, bVar"b'2", Bop(And, bVar"b'1", bVar"b'0"))))))))))))))))))))))))))), Call ("System",CTy"instruction", Call ("MoveImmediateProcState",CTy"System", TP[LC("PSTATEField_SP",CTy"PSTATEField"), Mop(Cast F4, LL[bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8"])]))), (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,bVar"b'26", Bop(And,Mop(Not,bVar"b'25"), Bop(And,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, bVar"b'17", Bop(And, bVar"b'16", Bop(And, Mop(Not, bVar"b'15"), Bop(And, bVar"b'14", Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, bVar"b'7", Bop(And, bVar"b'6", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, bVar"b'3", Bop(And, bVar"b'2", Bop(And, bVar"b'1", bVar"b'0"))))))))))))))))))))))))))), Call ("System",CTy"instruction", Call ("MoveImmediateProcState",CTy"System", TP[LC("PSTATEField_DAIFSet",CTy"PSTATEField"), Mop(Cast F4, LL[bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8"])]))), (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,bVar"b'26", Bop(And,Mop(Not,bVar"b'25"), Bop(And,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, bVar"b'17", Bop(And, bVar"b'16", Bop(And, Mop(Not, bVar"b'15"), Bop(And, bVar"b'14", Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, bVar"b'7", Bop(And, bVar"b'6", Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, bVar"b'3", Bop(And, bVar"b'2", Bop(And, bVar"b'1", bVar"b'0"))))))))))))))))))))))))))), Call ("System",CTy"instruction", Call ("MoveImmediateProcState",CTy"System", TP[LC("PSTATEField_DAIFClr",CTy"PSTATEField"), Mop(Cast F4, LL[bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8"])]))), (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,bVar"b'26", Bop(And,Mop(Not,bVar"b'25"), Bop(And,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, bVar"b'17", Bop(And, bVar"b'16", Bop(And, Mop(Not, bVar"b'15"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, bVar"b'13", Bop(And, bVar"b'12", Bop(And, bVar"b'7", Bop(And, bVar"b'6", Bop(And, bVar"b'5", Bop(And, bVar"b'4", Bop(And, bVar"b'3", Bop(And, bVar"b'2", Bop(And, bVar"b'1", bVar"b'0"))))))))))))))))))))))))))), Const("Unallocated",CTy"instruction")), (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,bVar"b'26", Bop(And,Mop(Not,bVar"b'25"), Bop(And,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, bVar"b'17", Bop(And, bVar"b'16", Bop(And, Mop(Not, bVar"b'15"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, bVar"b'13", Bop(And, bVar"b'12", Bop(And, bVar"b'7", Bop(And, bVar"b'4", Bop(And, bVar"b'3", Bop(And, bVar"b'2", Bop(And, bVar"b'1", bVar"b'0"))))))))))))))))))))))))), Call ("MemoryBarrier",CTy"instruction", TP[Mop(Cast(CTy"MemBarrierOp"), Mop(Cast(FTy 2),LL[bVar"b'6",bVar"b'5"])), Mop(Cast F4, LL[bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8"])])), (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,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'4"), Bop(And, Mop(Not, bVar"b'3"), Bop(And, Mop(Not, bVar"b'2"), Bop(And, Mop(Not, bVar"b'1"), Mop(Not, bVar"b'0")))))))))))))))), Call ("Debug",CTy"instruction", Call ("Breakpoint",CTy"Debug", Mop(Cast F16, LL[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"])))), (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,bVar"b'26", Bop(And,Mop(Not,bVar"b'25"), Bop(And,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, bVar"b'17", Bop(And, bVar"b'16", Bop(And, Mop(Not, bVar"b'15"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, bVar"b'13", Bop(And, Mop(Not, bVar"b'12"), Bop(And, bVar"b'4", Bop(And, bVar"b'3", Bop(And, bVar"b'2", Bop(And, bVar"b'1", bVar"b'0")))))))))))))))))))))))), Let(Var("op2",FTy 3), Mop(Cast(FTy 3),LL[bVar"b'7",bVar"b'6",bVar"b'5"]), Call ("Hint",CTy"instruction", ITE(Bop(And, EQ(Mop(Cast F4, LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8"]),LW(0,4)), Bop(Ult,Var("op2",FTy 3),LW(6,3))), Mop(Cast(CTy"SystemHintOp"),Var("op2",FTy 3)), LC("SystemHintOp_NOP",CTy"SystemHintOp"))))), (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,bVar"b'26", Bop(And,Mop(Not,bVar"b'25"), Bop(And,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, bVar"b'17", Bop(And, bVar"b'16", Bop(And, Mop(Not, bVar"b'15"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, bVar"b'13", Bop(And, bVar"b'12", Bop(And, Mop(Not, bVar"b'7"), Bop(And, bVar"b'6", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'4", Bop(And, bVar"b'3", Bop(And, bVar"b'2", Bop(And, bVar"b'1", bVar"b'0"))))))))))))))))))))))))))), Call ("ClearExclusive",CTy"instruction", Mop(Cast F4,LL[bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8"]))), (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,bVar"b'26", Bop(And,bVar"b'25", Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'23", Bop(And, Mop(Not,bVar"b'22"), Bop(And,bVar"b'21", Bop(And, bVar"b'20", Bop(And, bVar"b'19", Bop(And, bVar"b'18", Bop(And, bVar"b'17", Bop(And, 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, bVar"b'9", Bop(And, bVar"b'8", Bop(And, bVar"b'7", Bop(And, bVar"b'6", Bop(And, bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, Mop(Not, bVar"b'3"), Bop(And, Mop(Not, bVar"b'2"), Bop(And, Mop(Not, bVar"b'1"), Mop(Not, bVar"b'0")))))))))))))))))))))))))))))))), Call ("Debug",CTy"instruction",Const("DebugRestore",CTy"Debug"))), (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,bVar"b'26", Bop(And,Mop(Not,bVar"b'25"), Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'23", Bop(And, Mop(Not,bVar"b'22"), Bop(And,bVar"b'21", Bop(And, Mop(Not, bVar"b'4"), Bop(And, Mop(Not, bVar"b'3"), Mop(Not, bVar"b'2")))))))))))))), Call ("Debug",CTy"instruction", Call ("DebugSwitch",CTy"Debug", Mop(Cast(FTy 2),LL[bVar"b'1",bVar"b'0"])))), (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,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, Mop(Not, bVar"b'4"), Bop(And, Mop(Not, bVar"b'3"), Bop(And, Mop(Not, bVar"b'2"), Bop(And, Mop(Not, bVar"b'1"), Mop(Not, bVar"b'0")))))))))))))))), Call ("Debug",CTy"instruction", Call ("Halt",CTy"Debug", Mop(Cast F16, LL[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"])))), (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,bVar"b'26", Bop(And,bVar"b'25", Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'23", Bop(And, Mop(Not,bVar"b'22"), Bop(And, Mop(Not, bVar"b'21"), Bop(And, bVar"b'20", Bop(And, bVar"b'19", Bop(And, bVar"b'18", Bop(And, bVar"b'17", Bop(And, 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, bVar"b'9", Bop(And, bVar"b'8", Bop(And, bVar"b'7", Bop(And, bVar"b'6", Bop(And, bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, Mop(Not, bVar"b'3"), Bop(And, Mop(Not, bVar"b'2"), Bop(And, Mop(Not, bVar"b'1"), Mop(Not, bVar"b'0")))))))))))))))))))))))))))))))), Call ("System",CTy"instruction", Const("ExceptionReturn",CTy"System"))), (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,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'4"), Bop(And, Mop(Not, bVar"b'3"), Bop(And, Mop(Not, bVar"b'2"), Bop(And, Mop(Not, bVar"b'1"), bVar"b'0"))))))))))))))), Call ("System",CTy"instruction", Call ("SupervisorCall",CTy"System", Mop(Cast F16, LL[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"])))), (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,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'4"), Bop(And, Mop(Not, bVar"b'3"), Bop(And, Mop(Not, bVar"b'2"), Bop(And, bVar"b'1", Mop(Not, bVar"b'0")))))))))))))))), Call ("System",CTy"instruction", Call ("HypervisorCall",CTy"System", Mop(Cast F16, LL[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"])))), (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,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'4"), Bop(And, Mop(Not, bVar"b'3"), Bop(And, Mop(Not, bVar"b'2"), Bop(And, bVar"b'1", bVar"b'0"))))))))))))))), Call ("System",CTy"instruction", Call ("SecureMonitorCall",CTy"System", Mop(Cast F16, LL[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"])))), (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,bVar"b'26", Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And, Mop(Not,bVar"b'22"), Bop(And, Mop(Not, bVar"b'20"), bVar"b'19"))))))))))), Call ("System",CTy"instruction", Call ("SystemInstruction",CTy"System", TP[Mop(Cast(FTy 3),LL[bVar"b'18",bVar"b'17",bVar"b'16"]), Mop(Cast(FTy 3),LL[bVar"b'7",bVar"b'6",bVar"b'5"]), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12"]), Mop(Cast F4, LL[bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8"]), Mop(Cast bTy,Mop(Cast F1,LL[bVar"b'21"])), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"])])))], Const("Unallocated",CTy"instruction")))) ; val Fetch_def = Def ("Fetch",qVar"state", Apply (Call ("Mem",ATy(qTy,PTy(F32,qTy)), TP[Dest("PC",F64,qVar"state"),LN 4, LC("AccType_IFETCH",CTy"AccType")]),qVar"state")) ; val Next_def = Def ("Next",qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply (Const("Fetch",ATy(qTy,PTy(F32,qTy))), Rupd("branch_hint",TP[qVar"state",LO(CTy"BranchType")])), Let(qVar"s", Apply (Call ("Run",ATy(qTy,qTy), Call("Decode",CTy"instruction",Var("v",F32))),qVar"s"), ITE(Mop(Not, Mop(IsSome, Dest("branch_hint",OTy(CTy"BranchType"),qVar"s"))), Rupd ("PC", TP[qVar"s",Bop(Add,Dest("PC",F64,qVar"s"),LW(4,64))]), qVar"s")))) ; val CountTrailing_def = tDef ("CountTrailing",TP[bVar"b",Var("w",BTy"N")], ITE(Bop(Or,EQ(Bop(Bit,Var("w",BTy"N"),LN 0),bVar"b"), ITE(bVar"b",EQ(Var("w",BTy"N"),LY(0,"N")), EQ(Var("w",BTy"N"),Mop(Neg,LY(1,"N"))))),LN 0, Bop(Add,LN 1, Call ("CountTrailing",nTy, TP[bVar"b",Bop(Lsr,Var("w",BTy"N"),LN 1)]))), Close(TP[bVar"b",Var("w",BTy"N")],Mop(Cast nTy,Var("w",BTy"N"))), SRW_TAC [] [wordsTheory.LSR_LESS] THEN Cases_on `w = 0w` THEN FULL_SIMP_TAC (srw_ss()) [wordsTheory.word_0, wordsTheory.LSR_LESS] ) ; val EncodeBitMaskAux_def = Def ("EncodeBitMaskAux",Var("imm",BTy"N"), Let(nVar"pref0",Call("CountTrailing",nTy,TP[LT,Var("imm",BTy"N")]), ITE(EQ(nVar"pref0",LN 0), Let(nVar"pref1", Call("CountTrailing",nTy,TP[LF,Var("imm",BTy"N")]), Let(nVar"run0", Call ("CountTrailing",nTy, TP[LT,Bop(Ror,Var("imm",BTy"N"),nVar"pref1")]), Let(nVar"run1", Call ("CountTrailing",nTy, TP[LF, Bop(Ror,Var("imm",BTy"N"), Bop(Add,nVar"pref1",nVar"run0"))]), TP[Bop(Add,nVar"run0",nVar"run1"),nVar"run1", Bop(Sub,nVar"run1",nVar"pref1")]))), Let(nVar"run1", Call ("CountTrailing",nTy, TP[LF,Bop(Ror,Var("imm",BTy"N"),nVar"pref0")]), Let(nVar"run0", Call ("CountTrailing",nTy, TP[LT, Bop(Ror,Var("imm",BTy"N"), Bop(Add,nVar"pref0",nVar"run1"))]), TP[Bop(Add,nVar"run0",nVar"run1"),nVar"run1", Bop(Sub,Bop(Add,nVar"run0",nVar"run1"),nVar"pref0")]))))) ; val EncodeBitMask_def = Def ("EncodeBitMask",Var("imm",BTy"N"), Let(TP[nVar"e",nVar"S",nVar"R"], Call("EncodeBitMaskAux",PTy(nTy,PTy(nTy,nTy)),Var("imm",BTy"N")), Let(TP[Var("immN",F1),Var("imms",FTy 6),Var("immr",FTy 6)], ITE(EQ(nVar"e",LN 64), TP[LW(1,1),Mop(Cast(FTy 6),Bop(Sub,nVar"S",LN 1)), Mop(Cast(FTy 6),nVar"R")], TP[LW(0,1), Bop(BOr, Mop(BNot, Mop(Cast(FTy 6), Bop(Sub,Bop(Mul,nVar"e",LN 2),LN 1))), Mop(Cast(FTy 6),Bop(Sub,nVar"S",LN 1))), Mop(Cast(FTy 6),nVar"R")]), CS(Call ("DecodeBitMasks",OTy(PTy(BTy"N",BTy"N")), TP[Var("immN",F1),Var("imms",FTy 6),Var("immr",FTy 6),LT]), [(Mop(Some,TP[Var("imm2",BTy"N"),AVar(BTy"N")]), ITE(EQ(Var("imm",BTy"N"),Var("imm2",BTy"N")), Mop(Some, TP[Var("immN",F1),Var("imms",FTy 6), Var("immr",FTy 6)]), LO(PTy(F1,PTy(FTy 6,FTy 6))))), (LO(PTy(BTy"N",BTy"N")),LO(PTy(F1,PTy(FTy 6,FTy 6))))])))) ; val e_sf_def = Def ("e_sf",Var("sf",BTy"N"),Mop(Cast F1,EQ(Mop(Size,LY(0,"N")),LN 64))) ; val EncodeLogicalOp_def = Def ("EncodeLogicalOp",TP[Var("opc",CTy"LogicalOp"),bVar"setflags"], CS(TP[Var("opc",CTy"LogicalOp"),bVar"setflags"], [(TP[LC("LogicalOp_AND",CTy"LogicalOp"),LF],Mop(Some,LW(0,2))), (TP[LC("LogicalOp_ORR",CTy"LogicalOp"),LF],Mop(Some,LW(1,2))), (TP[LC("LogicalOp_EOR",CTy"LogicalOp"),LF],Mop(Some,LW(2,2))), (TP[LC("LogicalOp_AND",CTy"LogicalOp"),LT],Mop(Some,LW(3,2))), (AVar(PTy(CTy"LogicalOp",bTy)),LO(FTy 2))])) ; val e_data_def = Def ("e_data",Var("i",CTy"Data"), CS(Var("i",CTy"Data"), [(Call ("AddSubShiftedRegister@32",CTy"Data", TP[AVar F32,bVar"opc",bVar"s",Var("sh",CTy"ShiftType"), Var("rm",FTy 5),Var("imm6",FTy 6),Var("rn",FTy 5), Var("rd",FTy 5)]), ITE(Bop(Bit,Var("imm6",FTy 6),LN 5), Call("BadCode",CTy"MachineCode",LS"AddSubShiftedRegister32"), Call ("ARM8",CTy"MachineCode", CC[LW(0,1),Mop(Cast F1,bVar"opc"),Mop(Cast F1,bVar"s"), LW(11,5),Mop(Cast(FTy 2),Var("sh",CTy"ShiftType")), LW(0,1),Var("rm",FTy 5),Var("imm6",FTy 6), Var("rn",FTy 5),Var("rd",FTy 5)]))), (Call ("AddSubShiftedRegister@64",CTy"Data", TP[AVar F64,bVar"opc",bVar"s",Var("sh",CTy"ShiftType"), Var("rm",FTy 5),Var("imm6",FTy 6),Var("rn",FTy 5), Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[LW(1,1),Mop(Cast F1,bVar"opc"),Mop(Cast F1,bVar"s"), LW(11,5),Mop(Cast(FTy 2),Var("sh",CTy"ShiftType")),LW(0,1), Var("rm",FTy 5),Var("imm6",FTy 6),Var("rn",FTy 5), Var("rd",FTy 5)])), (Call ("AddSubExtendRegister@32",CTy"Data", TP[Var("sf",F32),bVar"opc",bVar"s",Var("rm",FTy 5), Var("sty",CTy"ExtendType"),Var("imm3",FTy 3), Var("rn",FTy 5),Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[Call("e_sf",F1,Var("sf",F32)),Mop(Cast F1,bVar"opc"), Mop(Cast F1,bVar"s"),LW(89,8),Var("rm",FTy 5), Mop(Cast(FTy 3),Var("sty",CTy"ExtendType")), Var("imm3",FTy 3),Var("rn",FTy 5),Var("rd",FTy 5)])), (Call ("AddSubExtendRegister@64",CTy"Data", TP[Var("sf",F64),bVar"opc",bVar"s",Var("rm",FTy 5), Var("sty",CTy"ExtendType"),Var("imm3",FTy 3), Var("rn",FTy 5),Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[Call("e_sf",F1,Var("sf",F64)),Mop(Cast F1,bVar"opc"), Mop(Cast F1,bVar"s"),LW(89,8),Var("rm",FTy 5), Mop(Cast(FTy 3),Var("sty",CTy"ExtendType")), Var("imm3",FTy 3),Var("rn",FTy 5),Var("rd",FTy 5)])), (Call ("AddSubImmediate@32",CTy"Data", TP[Var("sf",F32),bVar"opc",bVar"s",Var("imm",F32), Var("rn",FTy 5),Var("rd",FTy 5)]), ITB([(EQ(Bop(BAnd,Var("imm",F32),Mop(BNot,LW(4095,32))),LW(0,32)), Call ("ARM8",CTy"MachineCode", CC[Call("e_sf",F1,Var("sf",F32)),Mop(Cast F1,bVar"opc"), Mop(Cast F1,bVar"s"),LW(68,7), EX(Var("imm",F32),LN 11,LN 0,FTy 12),Var("rn",FTy 5), Var("rd",FTy 5)])), (EQ(Bop(BAnd,Var("imm",F32),Mop(BNot,LW(16773120,32))), LW(0,32)), Call ("ARM8",CTy"MachineCode", CC[Call("e_sf",F1,Var("sf",F32)),Mop(Cast F1,bVar"opc"), Mop(Cast F1,bVar"s"),LW(69,7), EX(Var("imm",F32),LN 23,LN 12,FTy 12),Var("rn",FTy 5), Var("rd",FTy 5)]))], Call("BadCode",CTy"MachineCode",LS"AddSubImmediate"))), (Call ("AddSubImmediate@64",CTy"Data", TP[Var("sf",F64),bVar"opc",bVar"s",Var("imm",F64), Var("rn",FTy 5),Var("rd",FTy 5)]), ITB([(EQ(Bop(BAnd,Var("imm",F64),Mop(BNot,LW(4095,64))),LW(0,64)), Call ("ARM8",CTy"MachineCode", CC[Call("e_sf",F1,Var("sf",F64)),Mop(Cast F1,bVar"opc"), Mop(Cast F1,bVar"s"),LW(68,7), EX(Var("imm",F64),LN 11,LN 0,FTy 12),Var("rn",FTy 5), Var("rd",FTy 5)])), (EQ(Bop(BAnd,Var("imm",F64),Mop(BNot,LW(16773120,64))), LW(0,64)), Call ("ARM8",CTy"MachineCode", CC[Call("e_sf",F1,Var("sf",F64)),Mop(Cast F1,bVar"opc"), Mop(Cast F1,bVar"s"),LW(69,7), EX(Var("imm",F64),LN 23,LN 12,FTy 12),Var("rn",FTy 5), Var("rd",FTy 5)]))], Call("BadCode",CTy"MachineCode",LS"AddSubImmediate"))), (Call ("AddSubCarry@32",CTy"Data", TP[AVar F32,bVar"opc",bVar"s",Var("rm",FTy 5),Var("rn",FTy 5), Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[LW(0,1),Mop(Cast F1,bVar"opc"),Mop(Cast F1,bVar"s"), LW(208,8),Var("rm",FTy 5),LW(0,6),Var("rn",FTy 5), Var("rd",FTy 5)])), (Call ("AddSubCarry@64",CTy"Data", TP[AVar F64,bVar"opc",bVar"s",Var("rm",FTy 5),Var("rn",FTy 5), Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[LW(1,1),Mop(Cast F1,bVar"opc"),Mop(Cast F1,bVar"s"), LW(208,8),Var("rm",FTy 5),LW(0,6),Var("rn",FTy 5), Var("rd",FTy 5)])), (Call ("LogicalShiftedRegister@32",CTy"Data", TP[Var("sf",F32),Var("opc",CTy"LogicalOp"),bVar"invert", bVar"s",Var("sh",CTy"ShiftType"),nVar"imm",Var("rm",FTy 5), Var("rn",FTy 5),Var("rd",FTy 5)]), CS(Call ("EncodeLogicalOp",OTy(FTy 2), TP[Var("opc",CTy"LogicalOp"),bVar"s"]), [(Mop(Some,Var("opc",FTy 2)), Let(Var("imm6",FTy 6),Mop(Cast(FTy 6),nVar"imm"), ITE(EQ(nVar"imm",Mop(Cast nTy,Var("imm6",FTy 6))), Call ("ARM8",CTy"MachineCode", CC[Call("e_sf",F1,Var("sf",F32)),Var("opc",FTy 2), LW(10,5), Mop(Cast(FTy 2),Var("sh",CTy"ShiftType")), Mop(Cast F1,bVar"invert"),Var("rm",FTy 5), Var("imm6",FTy 6),Var("rn",FTy 5), Var("rd",FTy 5)]), Call ("BadCode",CTy"MachineCode", LS"LogicalShiftedRegister")))), (LO(FTy 2), Call("BadCode",CTy"MachineCode",LS"LogicalShiftedRegister"))])), (Call ("LogicalShiftedRegister@64",CTy"Data", TP[Var("sf",F64),Var("opc",CTy"LogicalOp"),bVar"invert", bVar"s",Var("sh",CTy"ShiftType"),nVar"imm",Var("rm",FTy 5), Var("rn",FTy 5),Var("rd",FTy 5)]), CS(Call ("EncodeLogicalOp",OTy(FTy 2), TP[Var("opc",CTy"LogicalOp"),bVar"s"]), [(Mop(Some,Var("opc",FTy 2)), Let(Var("imm6",FTy 6),Mop(Cast(FTy 6),nVar"imm"), ITE(EQ(nVar"imm",Mop(Cast nTy,Var("imm6",FTy 6))), Call ("ARM8",CTy"MachineCode", CC[Call("e_sf",F1,Var("sf",F64)),Var("opc",FTy 2), LW(10,5), Mop(Cast(FTy 2),Var("sh",CTy"ShiftType")), Mop(Cast F1,bVar"invert"),Var("rm",FTy 5), Var("imm6",FTy 6),Var("rn",FTy 5), Var("rd",FTy 5)]), Call ("BadCode",CTy"MachineCode", LS"LogicalShiftedRegister")))), (LO(FTy 2), Call("BadCode",CTy"MachineCode",LS"LogicalShiftedRegister"))])), (Call ("LogicalImmediate@32",CTy"Data", TP[AVar F32,Var("opc",CTy"LogicalOp"),bVar"s",Var("imm",F32), Var("rn",FTy 5),Var("rd",FTy 5)]), CS(TP[Call ("EncodeBitMask",OTy(PTy(F1,PTy(FTy 6,FTy 6))), Var("imm",F32)), Call ("EncodeLogicalOp",OTy(FTy 2), TP[Var("opc",CTy"LogicalOp"),bVar"s"])], [(TP[Mop(Some,TP[AVar F1,Var("imms",FTy 6),Var("immr",FTy 6)]), Mop(Some,Var("opc",FTy 2))], Call ("ARM8",CTy"MachineCode", CC[LW(0,1),Var("opc",FTy 2),LW(72,7),Var("immr",FTy 6), Var("imms",FTy 6),Var("rn",FTy 5),Var("rd",FTy 5)])), (AVar(PTy(OTy(PTy(F1,PTy(FTy 6,FTy 6))),OTy(FTy 2))), Call("BadCode",CTy"MachineCode",LS"LogicalImmediate32"))])), (Call ("LogicalImmediate@64",CTy"Data", TP[AVar F64,Var("opc",CTy"LogicalOp"),bVar"s",Var("imm",F64), Var("rn",FTy 5),Var("rd",FTy 5)]), CS(TP[Call ("EncodeBitMask",OTy(PTy(F1,PTy(FTy 6,FTy 6))), Var("imm",F64)), Call ("EncodeLogicalOp",OTy(FTy 2), TP[Var("opc",CTy"LogicalOp"),bVar"s"])], [(TP[Mop(Some, TP[Var("N",F1),Var("imms",FTy 6),Var("immr",FTy 6)]), Mop(Some,Var("opc",FTy 2))], Call ("ARM8",CTy"MachineCode", CC[LW(1,1),Var("opc",FTy 2),LW(36,6),Var("N",F1), Var("immr",FTy 6),Var("imms",FTy 6),Var("rn",FTy 5), Var("rd",FTy 5)])), (AVar(PTy(OTy(PTy(F1,PTy(FTy 6,FTy 6))),OTy(FTy 2))), Call("BadCode",CTy"MachineCode",LS"LogicalImmediate64"))])), (Call ("Shift@32",CTy"Data", TP[AVar F32,Var("sh",CTy"ShiftType"),Var("rm",FTy 5), Var("rn",FTy 5),Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[LW(214,11),Var("rm",FTy 5),LW(2,4), Mop(Cast(FTy 2),Var("sh",CTy"ShiftType")),Var("rn",FTy 5), Var("rd",FTy 5)])), (Call ("Shift@64",CTy"Data", TP[AVar F64,Var("sh",CTy"ShiftType"),Var("rm",FTy 5), Var("rn",FTy 5),Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[LW(1238,11),Var("rm",FTy 5),LW(2,4), Mop(Cast(FTy 2),Var("sh",CTy"ShiftType")),Var("rn",FTy 5), Var("rd",FTy 5)])), (Call ("MoveWide@32",CTy"Data", TP[AVar F32,Var("opc",CTy"MoveWideOp"),Var("hw",FTy 2), Var("imm16",F16),Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[LW(0,1), CS(Var("opc",CTy"MoveWideOp"), [(LC("MoveWideOp_N",CTy"MoveWideOp"),LW(0,2)), (LC("MoveWideOp_Z",CTy"MoveWideOp"),LW(2,2)), (LC("MoveWideOp_K",CTy"MoveWideOp"),LW(3,2))]),LW(37,6), Var("hw",FTy 2),Var("imm16",F16),Var("rd",FTy 5)])), (Call ("MoveWide@64",CTy"Data", TP[AVar F64,Var("opc",CTy"MoveWideOp"),Var("hw",FTy 2), Var("imm16",F16),Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[LW(1,1), CS(Var("opc",CTy"MoveWideOp"), [(LC("MoveWideOp_N",CTy"MoveWideOp"),LW(0,2)), (LC("MoveWideOp_Z",CTy"MoveWideOp"),LW(2,2)), (LC("MoveWideOp_K",CTy"MoveWideOp"),LW(3,2))]),LW(37,6), Var("hw",FTy 2),Var("imm16",F16),Var("rd",FTy 5)])), (Call ("BitfieldMove@32",CTy"Data", TP[Var("sf",F32),bVar"inzero",bVar"extend",Var("wmask",F32), Var("tmask",F32),nVar"immr",nVar"imms",Var("rn",FTy 5), Var("rd",FTy 5)]), Let(Var("sz",F1),Call("e_sf",F1,Var("sf",F32)), CS(CS(TP[bVar"inzero",bVar"extend"], [(TP[LT,LT],Mop(Some,LW(0,2))), (TP[LF,LF],Mop(Some,LW(1,2))), (TP[LT,LF],Mop(Some,LW(2,2))), (AVar(PTy(bTy,bTy)),LO(FTy 2))]), [(Mop(Some,Var("opc",FTy 2)), Let(Var("r",FTy 6),Mop(Cast(FTy 6),nVar"immr"), Let(Var("s",FTy 6),Mop(Cast(FTy 6),nVar"imms"), ITE(Bop(And, EQ(nVar"immr", Mop(Cast nTy,Var("r",FTy 6))), Bop(And, EQ(nVar"imms", Mop(Cast nTy,Var("s",FTy 6))), EQ(Call ("DecodeBitMasks", OTy(PTy(F32,F32)), TP[Var("sz",F1),Var("s",FTy 6), Var("r",FTy 6),LF]), Mop(Some, TP[Var("wmask",F32), Var("tmask",F32)])))), Call ("ARM8",CTy"MachineCode", CC[Var("sz",F1),Var("opc",FTy 2),LW(38,6), Var("sz",F1),Var("r",FTy 6), Var("s",FTy 6),Var("rn",FTy 5), Var("rd",FTy 5)]), Call ("BadCode",CTy"MachineCode", LS"BitfieldMove"))))), (LO(FTy 2), Call("BadCode",CTy"MachineCode",LS"BitfieldMove"))]))), (Call ("BitfieldMove@64",CTy"Data", TP[Var("sf",F64),bVar"inzero",bVar"extend",Var("wmask",F64), Var("tmask",F64),nVar"immr",nVar"imms",Var("rn",FTy 5), Var("rd",FTy 5)]), Let(Var("sz",F1),Call("e_sf",F1,Var("sf",F64)), CS(CS(TP[bVar"inzero",bVar"extend"], [(TP[LT,LT],Mop(Some,LW(0,2))), (TP[LF,LF],Mop(Some,LW(1,2))), (TP[LT,LF],Mop(Some,LW(2,2))), (AVar(PTy(bTy,bTy)),LO(FTy 2))]), [(Mop(Some,Var("opc",FTy 2)), Let(Var("r",FTy 6),Mop(Cast(FTy 6),nVar"immr"), Let(Var("s",FTy 6),Mop(Cast(FTy 6),nVar"imms"), ITE(Bop(And, EQ(nVar"immr", Mop(Cast nTy,Var("r",FTy 6))), Bop(And, EQ(nVar"imms", Mop(Cast nTy,Var("s",FTy 6))), EQ(Call ("DecodeBitMasks", OTy(PTy(F64,F64)), TP[Var("sz",F1),Var("s",FTy 6), Var("r",FTy 6),LF]), Mop(Some, TP[Var("wmask",F64), Var("tmask",F64)])))), Call ("ARM8",CTy"MachineCode", CC[Var("sz",F1),Var("opc",FTy 2),LW(38,6), Var("sz",F1),Var("r",FTy 6), Var("s",FTy 6),Var("rn",FTy 5), Var("rd",FTy 5)]), Call ("BadCode",CTy"MachineCode", LS"BitfieldMove"))))), (LO(FTy 2), Call("BadCode",CTy"MachineCode",LS"BitfieldMove"))]))), (Call ("ConditionalCompareImmediate@32",CTy"Data", TP[Var("sf",F32),bVar"opc",Var("imm",F32),Var("cd",F4), TP[bVar"n",bVar"z",bVar"c",bVar"v"],Var("rn",FTy 5)]), Let(Var("imm5",FTy 5),Mop(Cast(FTy 5),Var("imm",F32)), ITE(EQ(Var("imm",F32),Mop(Cast F32,Var("imm5",FTy 5))), Call ("ARM8",CTy"MachineCode", CC[Call("e_sf",F1,Var("sf",F32)), Mop(Cast F1,bVar"opc"),LW(466,9),Var("imm5",FTy 5), Var("cd",F4),LW(2,2),Var("rn",FTy 5),LW(0,1), Mop(Cast F1,bVar"n"),Mop(Cast F1,bVar"z"), Mop(Cast F1,bVar"c"),Mop(Cast F1,bVar"v")]), Call ("BadCode",CTy"MachineCode", LS"ConditionalCompareImmediate")))), (Call ("ConditionalCompareImmediate@64",CTy"Data", TP[Var("sf",F64),bVar"opc",Var("imm",F64),Var("cd",F4), TP[bVar"n",bVar"z",bVar"c",bVar"v"],Var("rn",FTy 5)]), Let(Var("imm5",FTy 5),Mop(Cast(FTy 5),Var("imm",F64)), ITE(EQ(Var("imm",F64),Mop(Cast F64,Var("imm5",FTy 5))), Call ("ARM8",CTy"MachineCode", CC[Call("e_sf",F1,Var("sf",F64)), Mop(Cast F1,bVar"opc"),LW(466,9),Var("imm5",FTy 5), Var("cd",F4),LW(2,2),Var("rn",FTy 5),LW(0,1), Mop(Cast F1,bVar"n"),Mop(Cast F1,bVar"z"), Mop(Cast F1,bVar"c"),Mop(Cast F1,bVar"v")]), Call ("BadCode",CTy"MachineCode", LS"ConditionalCompareImmediate")))), (Call ("ConditionalCompareRegister@32",CTy"Data", TP[Var("sf",F32),bVar"opc",Var("cd",F4), TP[bVar"n",bVar"z",bVar"c",bVar"v"],Var("rm",FTy 5), Var("rn",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[Call("e_sf",F1,Var("sf",F32)),Mop(Cast F1,bVar"opc"), LW(466,9),Var("rm",FTy 5),Var("cd",F4),LW(0,2), Var("rn",FTy 5),LW(0,1),Mop(Cast F1,bVar"n"), Mop(Cast F1,bVar"z"),Mop(Cast F1,bVar"c"), Mop(Cast F1,bVar"v")])), (Call ("ConditionalCompareRegister@64",CTy"Data", TP[Var("sf",F64),bVar"opc",Var("cd",F4), TP[bVar"n",bVar"z",bVar"c",bVar"v"],Var("rm",FTy 5), Var("rn",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[Call("e_sf",F1,Var("sf",F64)),Mop(Cast F1,bVar"opc"), LW(466,9),Var("rm",FTy 5),Var("cd",F4),LW(0,2), Var("rn",FTy 5),LW(0,1),Mop(Cast F1,bVar"n"), Mop(Cast F1,bVar"z"),Mop(Cast F1,bVar"c"), Mop(Cast F1,bVar"v")])), (Call ("ConditionalSelect@32",CTy"Data", TP[AVar F32,bVar"op",bVar"o2",Var("cd",F4),Var("rm",FTy 5), Var("rn",FTy 5),Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[LW(0,1),Mop(Cast F1,bVar"op"),LW(212,9),Var("rm",FTy 5), Var("cd",F4),LW(0,1),Mop(Cast F1,bVar"o2"),Var("rn",FTy 5), Var("rd",FTy 5)])), (Call ("ConditionalSelect@64",CTy"Data", TP[AVar F64,bVar"op",bVar"o2",Var("cd",F4),Var("rm",FTy 5), Var("rn",FTy 5),Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[LW(1,1),Mop(Cast F1,bVar"op"),LW(212,9),Var("rm",FTy 5), Var("cd",F4),LW(0,1),Mop(Cast F1,bVar"o2"),Var("rn",FTy 5), Var("rd",FTy 5)])), (Call ("CountLeading@32",CTy"Data", TP[AVar F32,bVar"op",Var("rn",FTy 5),Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[LW(743426,21),Mop(Cast F1,bVar"op"),Var("rn",FTy 5), Var("rd",FTy 5)])), (Call ("CountLeading@64",CTy"Data", TP[AVar F64,bVar"op",Var("rn",FTy 5),Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[LW(1792002,21),Mop(Cast F1,bVar"op"),Var("rn",FTy 5), Var("rd",FTy 5)])), (Call ("ExtractRegister@32",CTy"Data", TP[AVar F32,Var("imms",FTy 6),Var("rm",FTy 5),Var("rn",FTy 5), Var("rd",FTy 5)]), ITE(Bop(Bit,Var("imms",FTy 6),LN 5), Call("BadCode",CTy"MachineCode",LS"ExtractRegister32"), Call ("ARM8",CTy"MachineCode", CC[LW(156,11),Var("rm",FTy 5),Var("imms",FTy 6), Var("rn",FTy 5),Var("rd",FTy 5)]))), (Call ("ExtractRegister@64",CTy"Data", TP[AVar F64,Var("imms",FTy 6),Var("rm",FTy 5),Var("rn",FTy 5), Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[LW(1182,11),Var("rm",FTy 5),Var("imms",FTy 6), Var("rn",FTy 5),Var("rd",FTy 5)])), (Call ("Division@32",CTy"Data", TP[AVar F32,bVar"o1",Var("rm",FTy 5),Var("rn",FTy 5), Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[LW(214,11),Var("rm",FTy 5),LW(1,5), Mop(Cast F1,Mop(Not,bVar"o1")),Var("rn",FTy 5), Var("rd",FTy 5)])), (Call ("Division@64",CTy"Data", TP[AVar F64,bVar"o1",Var("rm",FTy 5),Var("rn",FTy 5), Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[LW(1238,11),Var("rm",FTy 5),LW(1,5), Mop(Cast F1,Mop(Not,bVar"o1")),Var("rn",FTy 5), Var("rd",FTy 5)])), (Call ("MultiplyAddSub@32",CTy"Data", TP[AVar F32,bVar"o0",Var("rm",FTy 5),Var("ra",FTy 5), Var("rn",FTy 5),Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[LW(216,11),Var("rm",FTy 5),Mop(Cast F1,bVar"o0"), Var("ra",FTy 5),Var("rn",FTy 5),Var("rd",FTy 5)])), (Call ("MultiplyAddSub@64",CTy"Data", TP[AVar F64,bVar"o0",Var("rm",FTy 5),Var("ra",FTy 5), Var("rn",FTy 5),Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[LW(1240,11),Var("rm",FTy 5),Mop(Cast F1,bVar"o0"), Var("ra",FTy 5),Var("rn",FTy 5),Var("rd",FTy 5)])), (Call ("MultiplyAddSubLong",CTy"Data", TP[bVar"o0",bVar"u",Var("rm",FTy 5),Var("ra",FTy 5), Var("rn",FTy 5),Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[LW(155,8),Mop(Cast F1,Mop(Not,bVar"u")),LW(1,2), Var("rm",FTy 5),Mop(Cast F1,bVar"o0"),Var("ra",FTy 5), Var("rn",FTy 5),Var("rd",FTy 5)])), (Call ("MultiplyHigh",CTy"Data", TP[bVar"u",Var("rm",FTy 5),Var("rn",FTy 5),Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[LW(155,8),Mop(Cast F1,Mop(Not,bVar"u")),LW(2,2), Var("rm",FTy 5),LW(31,6),Var("rn",FTy 5),Var("rd",FTy 5)])), (Call ("Reverse@32",CTy"Data", TP[AVar F32,Var("opc",CTy"RevOp"),Var("rn",FTy 5), Var("rd",FTy 5)]), ITE(EQ(Var("opc",CTy"RevOp"),LC("RevOp_REV64",CTy"RevOp")), Call("BadCode",CTy"MachineCode",LS"Reverse32"), Call ("ARM8",CTy"MachineCode", CC[LW(371712,20),Mop(Cast(FTy 2),Var("opc",CTy"RevOp")), Var("rn",FTy 5),Var("rd",FTy 5)]))), (Call ("Reverse@64",CTy"Data", TP[AVar F64,Var("opc",CTy"RevOp"),Var("rn",FTy 5), Var("rd",FTy 5)]), Call ("ARM8",CTy"MachineCode", CC[LW(896000,20),Mop(Cast(FTy 2),Var("opc",CTy"RevOp")), Var("rn",FTy 5),Var("rd",FTy 5)]))])) ; val e_debug_def = Def ("e_debug",Var("i",CTy"Debug"), CS(Var("i",CTy"Debug"), [(Call("Breakpoint",CTy"Debug",Var("imm16",F16)), CC[LW(1697,11),Var("imm16",F16),LW(0,5)]), (Const("DebugRestore",CTy"Debug"),LW(3602842592,32)), (Call("DebugSwitch",CTy"Debug",Var("LL",FTy 2)), CC[LW(1701,11),LW(0,16),LW(0,3),Var("LL",FTy 2)]), (Call("Halt",CTy"Debug",Var("imm16",F16)), CC[LW(1698,11),Var("imm16",F16),LW(0,5)])])) ; val e_crc_def = Def ("e_crc",Var("i",CTy"CRCExt"), CS(Var("i",CTy"CRCExt"), [(Call ("CRC@8",CTy"CRCExt", TP[AVar F8,bVar"c",Var("rm",FTy 5),Var("rn",FTy 5), Var("rd",FTy 5)]), CC[LW(214,11),Var("rm",FTy 5),LW(2,3),Mop(Cast F1,bVar"c"), LW(0,2),Var("rn",FTy 5),Var("rd",FTy 5)]), (Call ("CRC@16",CTy"CRCExt", TP[AVar F16,bVar"c",Var("rm",FTy 5),Var("rn",FTy 5), Var("rd",FTy 5)]), CC[LW(214,11),Var("rm",FTy 5),LW(2,3),Mop(Cast F1,bVar"c"), LW(1,2),Var("rn",FTy 5),Var("rd",FTy 5)]), (Call ("CRC@32",CTy"CRCExt", TP[AVar F32,bVar"c",Var("rm",FTy 5),Var("rn",FTy 5), Var("rd",FTy 5)]), CC[LW(214,11),Var("rm",FTy 5),LW(2,3),Mop(Cast F1,bVar"c"), LW(2,2),Var("rn",FTy 5),Var("rd",FTy 5)]), (Call ("CRC@64",CTy"CRCExt", TP[AVar F64,bVar"c",Var("rm",FTy 5),Var("rn",FTy 5), Var("rd",FTy 5)]), CC[LW(1238,11),Var("rm",FTy 5),LW(2,3),Mop(Cast F1,bVar"c"), LW(3,2),Var("rn",FTy 5),Var("rd",FTy 5)])])) ; val e_branch_def = Def ("e_branch",Var("i",CTy"Branch"), CS(Var("i",CTy"Branch"), [(Call ("BranchConditional",CTy"Branch",TP[Var("imm",F64),Var("cd",F4)]), Let(Var("imm19",FTy 19),EX(Var("imm",F64),LN 20,LN 2,FTy 19), ITE(EQ(Var("imm",F64), Mop(SE F64,CC[Var("imm19",FTy 19),LW(0,2)])), Call ("ARM8",CTy"MachineCode", CC[LW(84,8),Var("imm19",FTy 19),LW(0,1),Var("cd",F4)]), Call("BadCode",CTy"MachineCode",LS"BranchConditional")))), (Call ("BranchImmediate",CTy"Branch", TP[Var("imm",F64),Var("btype",CTy"BranchType")]), Let(Var("imm26",FTy 26),EX(Var("imm",F64),LN 27,LN 2,FTy 26), ITE(Bop(And, EQ(Var("imm",F64), Mop(SE F64,CC[Var("imm26",FTy 26),LW(0,2)])), Bop(In,Var("btype",CTy"BranchType"), SL[LC("BranchType_CALL",CTy"BranchType"), LC("BranchType_JMP",CTy"BranchType")])), Call ("ARM8",CTy"MachineCode", CC[Mop(Cast F1, EQ(Var("btype",CTy"BranchType"), LC("BranchType_CALL",CTy"BranchType"))), LW(5,5),Var("imm26",FTy 26)]), Call("BadCode",CTy"MachineCode",LS"BranchImmediate")))), (Call ("BranchRegister",CTy"Branch", TP[Var("rn",FTy 5),Var("btype",CTy"BranchType")]), Let(Var("opc",FTy 2), CS(Var("btype",CTy"BranchType"), [(LC("BranchType_JMP",CTy"BranchType"),LW(0,2)), (LC("BranchType_CALL",CTy"BranchType"),LW(1,2)), (LC("BranchType_RET",CTy"BranchType"),LW(2,2)), (AVar(CTy"BranchType"),LW(3,2))]), ITE(EQ(Var("opc",FTy 2),LW(3,2)), Call("BadCode",CTy"MachineCode",LS"BranchRegister"), Call ("ARM8",CTy"MachineCode", CC[LW(428,9),Var("opc",FTy 2),LW(1984,11), Var("rn",FTy 5),LW(0,5)])))), (Call ("CompareAndBranch@32",CTy"Branch", TP[AVar F32,bVar"iszero",Var("offset",F64),Var("rt",FTy 5)]), Let(Var("imm19",FTy 19),EX(Var("offset",F64),LN 20,LN 2,FTy 19), ITE(EQ(Var("offset",F64), Mop(SE F64,CC[Var("imm19",FTy 19),LW(0,2)])), Call ("ARM8",CTy"MachineCode", CC[LW(26,7),Mop(Cast F1,Mop(Not,bVar"iszero")), Var("imm19",FTy 19),Var("rt",FTy 5)]), Call("BadCode",CTy"MachineCode",LS"CompareAndBranch32")))), (Call ("CompareAndBranch@64",CTy"Branch", TP[AVar F64,bVar"iszero",Var("offset",F64),Var("rt",FTy 5)]), Let(Var("imm19",FTy 19),EX(Var("offset",F64),LN 20,LN 2,FTy 19), ITE(EQ(Var("offset",F64), Mop(SE F64,CC[Var("imm19",FTy 19),LW(0,2)])), Call ("ARM8",CTy"MachineCode", CC[LW(90,7),Mop(Cast F1,Mop(Not,bVar"iszero")), Var("imm19",FTy 19),Var("rt",FTy 5)]), Call("BadCode",CTy"MachineCode",LS"CompareAndBranch64")))), (Call ("TestBitAndBranch@32",CTy"Branch", TP[AVar F32,Var("bit_pos",FTy 6),bVar"bit_val", Var("offset",F64),Var("rt",FTy 5)]), Let(Var("imm14",FTy 14),EX(Var("offset",F64),LN 15,LN 2,FTy 14), ITE(Bop(And, EQ(Var("offset",F64), Mop(SE F64,CC[Var("imm14",FTy 14),LW(0,2)])), Mop(Not,Bop(Bit,Var("bit_pos",FTy 6),LN 5))), Call ("ARM8",CTy"MachineCode", CC[LW(27,7),Mop(Cast F1,bVar"bit_val"), EX(Var("bit_pos",FTy 6),LN 4,LN 0,FTy 5), Var("imm14",FTy 14),Var("rt",FTy 5)]), Call("BadCode",CTy"MachineCode",LS"TestBitAndBranch32")))), (Call ("TestBitAndBranch@64",CTy"Branch", TP[AVar F64,Var("bit_pos",FTy 6),bVar"bit_val", Var("offset",F64),Var("rt",FTy 5)]), Let(Var("imm14",FTy 14),EX(Var("offset",F64),LN 15,LN 2,FTy 14), ITE(Bop(And, EQ(Var("offset",F64), Mop(SE F64,CC[Var("imm14",FTy 14),LW(0,2)])), Bop(Bit,Var("bit_pos",FTy 6),LN 5)), Call ("ARM8",CTy"MachineCode", CC[LW(91,7),Mop(Cast F1,bVar"bit_val"), EX(Var("bit_pos",FTy 6),LN 4,LN 0,FTy 5), Var("imm14",FTy 14),Var("rt",FTy 5)]), Call("BadCode",CTy"MachineCode",LS"TestBitAndBranch64"))))])) ; val e_system_def = Def ("e_system",Var("i",CTy"System"), CS(Var("i",CTy"System"), [(Call ("MoveSystemRegister",CTy"System", TP[bVar"l",Var("op0",FTy 3),Var("op1",FTy 3),Var("op2",FTy 3), Var("crn",F4),Var("crm",F4),Var("rt",FTy 5)]), CC[LW(852,10),Mop(Cast F1,bVar"l"),LW(1,1), Mop(Cast F1,Bop(Sub,Var("op0",FTy 3),LW(2,3))), Var("op1",FTy 3),Var("crn",F4),Var("crm",F4),Var("op2",FTy 3), Var("rt",FTy 5)]), (Call ("MoveImmediateProcState",CTy"System", TP[LC("PSTATEField_SP",CTy"PSTATEField"),Var("crm",F4)]), CC[LW(872452,20),Var("crm",F4),LW(191,8)]), (Call ("MoveImmediateProcState",CTy"System", TP[LC("PSTATEField_DAIFSet",CTy"PSTATEField"),Var("crm",F4)]), CC[LW(872500,20),Var("crm",F4),LW(223,8)]), (Call ("MoveImmediateProcState",CTy"System", TP[LC("PSTATEField_DAIFClr",CTy"PSTATEField"),Var("crm",F4)]), CC[LW(872500,20),Var("crm",F4),LW(255,8)]), (Const("ExceptionReturn",CTy"System"),LW(3600745440,32)), (Call("SupervisorCall",CTy"System",Var("imm16",F16)), CC[LW(1696,11),Var("imm16",F16),LW(1,5)]), (Call("HypervisorCall",CTy"System",Var("imm16",F16)), CC[LW(1696,11),Var("imm16",F16),LW(2,5)]), (Call("SecureMonitorCall",CTy"System",Var("imm16",F16)), CC[LW(1696,11),Var("imm16",F16),LW(3,5)]), (Call ("SystemInstruction",CTy"System", TP[Var("op1",FTy 3),Var("op2",FTy 3),Var("crn",F4), Var("crm",F4),bVar"l",Var("rt",FTy 5)]), CC[LW(852,10),Mop(Cast F1,bVar"l"),LW(1,2),Var("op1",FTy 3), Var("crn",F4),Var("crm",F4),Var("op2",FTy 3),Var("rt",FTy 5)])])) ; val e_LoadStoreImmediate_def = Def ("e_LoadStoreImmediate", TP[Var("size",FTy 2),bVar"regsize_word",Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",bVar"wback", bVar"postindex",bVar"unsigned_offset",Var("offset",F64), Var("rn",FTy 5),Var("rt",FTy 5)], Let(Var("sz",FTy 2), ITE(EQ(Var("memop",CTy"MemOp"),LC("MemOp_PREFETCH",CTy"MemOp")), LW(3,2),Var("size",FTy 2)), Let(Var("imm9",FTy 9),EX(Var("offset",F64),LN 8,LN 0,FTy 9), Let(Var("imm12",FTy 12), EX(Bop(Lsr,Var("offset",F64),Mop(Cast nTy,Var("sz",FTy 2))), LN 11,LN 0,FTy 12), Let(Var("opc",FTy 2), ITB([(EQ(Var("memop",CTy"MemOp"), LC("MemOp_STORE",CTy"MemOp")),LW(0,2)), (Bop(And, EQ(Var("memop",CTy"MemOp"), LC("MemOp_LOAD",CTy"MemOp")), Mop(Not,bVar"signed")),LW(1,2))], CC[LW(1,1),Mop(Cast F1,bVar"regsize_word")]), ITB([(bVar"wback", ITE(Bop(And, EQ(Var("offset",F64), Mop(SE F64,Var("imm9",FTy 9))), EQ(Var("acctype",CTy"AccType"), LC("AccType_NORMAL",CTy"AccType"))), Call ("ARM8",CTy"MachineCode", CC[Var("sz",FTy 2),LW(56,6), Var("opc",FTy 2),LW(0,1), Var("imm9",FTy 9), Mop(Cast F1,Mop(Not,bVar"postindex")), LW(1,1),Var("rn",FTy 5),Var("rt",FTy 5)]), Call ("BadCode",CTy"MachineCode", LS"LoadStoreImmediate"))), (bVar"postindex", Call ("BadCode",CTy"MachineCode", LS"LoadStoreImmediate")), (Bop(And,bVar"unsigned_offset", Bop(And, EQ(Var("offset",F64), Bop(Lsl, Mop(Cast F64,Var("imm12",FTy 12)), Mop(Cast nTy,Var("sz",FTy 2)))), EQ(Var("acctype",CTy"AccType"), LC("AccType_NORMAL",CTy"AccType")))), Call ("ARM8",CTy"MachineCode", CC[Var("sz",FTy 2),LW(57,6),Var("opc",FTy 2), Var("imm12",FTy 12),Var("rn",FTy 5), Var("rt",FTy 5)])), (EQ(Var("offset",F64), Mop(SE F64,Var("imm9",FTy 9))), Call ("ARM8",CTy"MachineCode", CC[Var("sz",FTy 2),LW(56,6),Var("opc",FTy 2), LW(0,1),Var("imm9",FTy 9), Mop(Cast F1, EQ(Var("acctype",CTy"AccType"), LC("AccType_UNPRIV",CTy"AccType"))), LW(0,1),Var("rn",FTy 5),Var("rt",FTy 5)]))], Call ("BadCode",CTy"MachineCode", LS"LoadStoreImmediate"))))))) ; val e_LoadStoreRegister_def = Def ("e_LoadStoreRegister", TP[Var("size",FTy 2),bVar"regsize_word",Var("memop",CTy"MemOp"), bVar"signed",Var("rm",FTy 5),Var("extend_type",CTy"ExtendType"), nVar"shift",Var("rn",FTy 5),Var("rt",FTy 5)], Call ("ARM8",CTy"MachineCode", CC[ITE(EQ(Var("memop",CTy"MemOp"),LC("MemOp_PREFETCH",CTy"MemOp")), LW(3,2),Var("size",FTy 2)),LW(56,6), ITB([(EQ(Var("memop",CTy"MemOp"),LC("MemOp_STORE",CTy"MemOp")), LW(0,2)), (Bop(And, EQ(Var("memop",CTy"MemOp"),LC("MemOp_LOAD",CTy"MemOp")), Mop(Not,bVar"signed")),LW(1,2))], CC[LW(1,1),Mop(Cast F1,bVar"regsize_word")]),LW(1,1), Var("rm",FTy 5), Mop(Cast(FTy 3),Var("extend_type",CTy"ExtendType")), Mop(Cast F1,Mop(Not,EQ(nVar"shift",LN 0))),LW(2,2), Var("rn",FTy 5),Var("rt",FTy 5)])) ; val e_load_store_def = Def ("e_load_store",Var("i",CTy"LoadStore"), CS(Var("i",CTy"LoadStore"), [(Call ("LoadStoreImmediate@8",CTy"LoadStore", TP[Var("size",F8),bVar"regsize_word",Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown", bVar"rt_unknown",bVar"wback",bVar"postindex", bVar"unsigned_offset",Var("offset",F64),Var("rn",FTy 5), Var("rt",FTy 5)]), Call ("e_LoadStoreImmediate",CTy"MachineCode", TP[Mop(Cast(FTy 2),Var("size",F8)),bVar"regsize_word", Var("memop",CTy"MemOp"),Var("acctype",CTy"AccType"), bVar"signed",bVar"wback",bVar"postindex", bVar"unsigned_offset",Var("offset",F64),Var("rn",FTy 5), Var("rt",FTy 5)])), (Call ("LoadStoreImmediate@16",CTy"LoadStore", TP[Var("size",F16),bVar"regsize_word",Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown", bVar"rt_unknown",bVar"wback",bVar"postindex", bVar"unsigned_offset",Var("offset",F64),Var("rn",FTy 5), Var("rt",FTy 5)]), Call ("e_LoadStoreImmediate",CTy"MachineCode", TP[Mop(Cast(FTy 2),Var("size",F16)),bVar"regsize_word", Var("memop",CTy"MemOp"),Var("acctype",CTy"AccType"), bVar"signed",bVar"wback",bVar"postindex", bVar"unsigned_offset",Var("offset",F64),Var("rn",FTy 5), Var("rt",FTy 5)])), (Call ("LoadStoreImmediate@32",CTy"LoadStore", TP[Var("size",F32),bVar"regsize_word",Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown", bVar"rt_unknown",bVar"wback",bVar"postindex", bVar"unsigned_offset",Var("offset",F64),Var("rn",FTy 5), Var("rt",FTy 5)]), Call ("e_LoadStoreImmediate",CTy"MachineCode", TP[Mop(Cast(FTy 2),Var("size",F32)),bVar"regsize_word", Var("memop",CTy"MemOp"),Var("acctype",CTy"AccType"), bVar"signed",bVar"wback",bVar"postindex", bVar"unsigned_offset",Var("offset",F64),Var("rn",FTy 5), Var("rt",FTy 5)])), (Call ("LoadStoreImmediate@64",CTy"LoadStore", TP[Var("size",F64),bVar"regsize_word",Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown", bVar"rt_unknown",bVar"wback",bVar"postindex", bVar"unsigned_offset",Var("offset",F64),Var("rn",FTy 5), Var("rt",FTy 5)]), Call ("e_LoadStoreImmediate",CTy"MachineCode", TP[Mop(Cast(FTy 2),Var("size",F64)),bVar"regsize_word", Var("memop",CTy"MemOp"),Var("acctype",CTy"AccType"), bVar"signed",bVar"wback",bVar"postindex", bVar"unsigned_offset",Var("offset",F64),Var("rn",FTy 5), Var("rt",FTy 5)])), (Call ("LoadStoreRegister@8",CTy"LoadStore", TP[Var("size",F8),bVar"regsize_word",Var("memop",CTy"MemOp"), bVar"signed",Var("rm",FTy 5), Var("extend_type",CTy"ExtendType"),nVar"shift", Var("rn",FTy 5),Var("rt",FTy 5)]), Call ("e_LoadStoreRegister",CTy"MachineCode", TP[Mop(Cast(FTy 2),Var("size",F8)),bVar"regsize_word", Var("memop",CTy"MemOp"),bVar"signed",Var("rm",FTy 5), Var("extend_type",CTy"ExtendType"),nVar"shift", Var("rn",FTy 5),Var("rt",FTy 5)])), (Call ("LoadStoreRegister@16",CTy"LoadStore", TP[Var("size",F16),bVar"regsize_word",Var("memop",CTy"MemOp"), bVar"signed",Var("rm",FTy 5), Var("extend_type",CTy"ExtendType"),nVar"shift", Var("rn",FTy 5),Var("rt",FTy 5)]), Call ("e_LoadStoreRegister",CTy"MachineCode", TP[Mop(Cast(FTy 2),Var("size",F16)),bVar"regsize_word", Var("memop",CTy"MemOp"),bVar"signed",Var("rm",FTy 5), Var("extend_type",CTy"ExtendType"),nVar"shift", Var("rn",FTy 5),Var("rt",FTy 5)])), (Call ("LoadStoreRegister@32",CTy"LoadStore", TP[Var("size",F32),bVar"regsize_word",Var("memop",CTy"MemOp"), bVar"signed",Var("rm",FTy 5), Var("extend_type",CTy"ExtendType"),nVar"shift", Var("rn",FTy 5),Var("rt",FTy 5)]), Call ("e_LoadStoreRegister",CTy"MachineCode", TP[Mop(Cast(FTy 2),Var("size",F32)),bVar"regsize_word", Var("memop",CTy"MemOp"),bVar"signed",Var("rm",FTy 5), Var("extend_type",CTy"ExtendType"),nVar"shift", Var("rn",FTy 5),Var("rt",FTy 5)])), (Call ("LoadStoreRegister@64",CTy"LoadStore", TP[Var("size",F64),bVar"regsize_word",Var("memop",CTy"MemOp"), bVar"signed",Var("rm",FTy 5), Var("extend_type",CTy"ExtendType"),nVar"shift", Var("rn",FTy 5),Var("rt",FTy 5)]), Call ("e_LoadStoreRegister",CTy"MachineCode", TP[Mop(Cast(FTy 2),Var("size",F64)),bVar"regsize_word", Var("memop",CTy"MemOp"),bVar"signed",Var("rm",FTy 5), Var("extend_type",CTy"ExtendType"),nVar"shift", Var("rn",FTy 5),Var("rt",FTy 5)])), (Call ("LoadLiteral@32",CTy"LoadStore", TP[AVar F32,Var("memop",CTy"MemOp"),bVar"signed", Var("offset",F64),Var("rt",FTy 5)]), Let(Var("imm19",FTy 19),EX(Var("offset",F64),LN 20,LN 2,FTy 19), Let(Var("opc",OTy(FTy 2)), CS(TP[Var("memop",CTy"MemOp"),bVar"signed"], [(TP[LC("MemOp_LOAD",CTy"MemOp"),LF],Mop(Some,LW(0,2))), (TP[LC("MemOp_LOAD",CTy"MemOp"),LT],Mop(Some,LW(2,2))), (TP[LC("MemOp_PREFETCH",CTy"MemOp"),LF], Mop(Some,LW(3,2))), (AVar(PTy(CTy"MemOp",bTy)),LO(FTy 2))]), ITE(Bop(And,Mop(IsSome,Var("opc",OTy(FTy 2))), EQ(Var("offset",F64), Mop(SE F64,CC[Var("imm19",FTy 19),LW(0,2)]))), Call ("ARM8",CTy"MachineCode", CC[Mop(ValOf,Var("opc",OTy(FTy 2))),LW(24,6), Var("imm19",FTy 19),Var("rt",FTy 5)]), Call("BadCode",CTy"MachineCode",LS"LoadLiteral32"))))), (Call ("LoadLiteral@64",CTy"LoadStore", TP[AVar F64,LC("MemOp_LOAD",CTy"MemOp"),LF,Var("offset",F64), Var("rt",FTy 5)]), Let(Var("imm19",FTy 19),EX(Var("offset",F64),LN 20,LN 2,FTy 19), ITE(EQ(Var("offset",F64), Mop(SE F64,CC[Var("imm19",FTy 19),LW(0,2)])), Call ("ARM8",CTy"MachineCode", CC[LW(88,8),Var("imm19",FTy 19),Var("rt",FTy 5)]), Call("BadCode",CTy"MachineCode",LS"LoadLiteral64")))), (Call ("LoadLiteral@64",CTy"LoadStore", AVar(PTy(F64,PTy(CTy"MemOp",PTy(bTy,PTy(F64,FTy 5)))))), Call("BadCode",CTy"MachineCode",LS"LoadLiteral64")), (Call ("LoadStorePair@32",CTy"LoadStore", TP[Var("size",F32),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown", bVar"rt_unknown",bVar"wback",bVar"postindex", Var("offset",F64),Var("rn",FTy 5),Var("rt",FTy 5), Var("rt2",FTy 5)]), Let(Var("sf",F1),Mop(Cast F1,Var("size",F32)), Let(nVar"scale",Bop(Add,LN 2,Mop(Cast nTy,Var("sf",F1))), Let(Var("imm7",FTy 7), EX(Bop(Lsr,Var("offset",F64),nVar"scale"),LN 6,LN 0, FTy 7), ITE(Bop(And, EQ(EQ(Var("sf",F1),LW(1,1)), EQ(Mop(Size,Var("size",F32)),LN 64)), Bop(And, Bop(In,Var("memop",CTy"MemOp"), SL[LC("MemOp_LOAD",CTy"MemOp"), LC("MemOp_STORE",CTy"MemOp")]), Bop(And, Bop(In,Var("acctype",CTy"AccType"), SL[LC("AccType_STREAM", CTy"AccType"), LC("AccType_NORMAL", CTy"AccType")]), EQ(Var("offset",F64), Bop(Lsl, Mop(SE F64,Var("imm7",FTy 7)), nVar"scale"))))), Call ("ARM8",CTy"MachineCode", CC[Var("sf",F1),Mop(Cast F1,bVar"signed"), LW(20,5), Mop(Cast F1,Mop(Not,bVar"postindex")), Mop(Cast F1,bVar"wback"), Mop(Cast F1, EQ(Var("memop",CTy"MemOp"), LC("MemOp_LOAD",CTy"MemOp"))), Var("imm7",FTy 7),Var("rt2",FTy 5), Var("rn",FTy 5),Var("rt",FTy 5)]), Call("BadCode",CTy"MachineCode",LS"LoadStorePair")))))), (Call ("LoadStorePair@64",CTy"LoadStore", TP[Var("size",F64),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"signed",bVar"wb_unknown", bVar"rt_unknown",bVar"wback",bVar"postindex", Var("offset",F64),Var("rn",FTy 5),Var("rt",FTy 5), Var("rt2",FTy 5)]), Let(Var("sf",F1),Mop(Cast F1,Var("size",F64)), Let(nVar"scale",Bop(Add,LN 2,Mop(Cast nTy,Var("sf",F1))), Let(Var("imm7",FTy 7), EX(Bop(Lsr,Var("offset",F64),nVar"scale"),LN 6,LN 0, FTy 7), ITE(Bop(And, EQ(EQ(Var("sf",F1),LW(1,1)), EQ(Mop(Size,Var("size",F64)),LN 64)), Bop(And, Bop(In,Var("memop",CTy"MemOp"), SL[LC("MemOp_LOAD",CTy"MemOp"), LC("MemOp_STORE",CTy"MemOp")]), Bop(And, Bop(In,Var("acctype",CTy"AccType"), SL[LC("AccType_STREAM", CTy"AccType"), LC("AccType_NORMAL", CTy"AccType")]), EQ(Var("offset",F64), Bop(Lsl, Mop(SE F64,Var("imm7",FTy 7)), nVar"scale"))))), Call ("ARM8",CTy"MachineCode", CC[Var("sf",F1),Mop(Cast F1,bVar"signed"), LW(20,5), Mop(Cast F1,Mop(Not,bVar"postindex")), Mop(Cast F1,bVar"wback"), Mop(Cast F1, EQ(Var("memop",CTy"MemOp"), LC("MemOp_LOAD",CTy"MemOp"))), Var("imm7",FTy 7),Var("rt2",FTy 5), Var("rn",FTy 5),Var("rt",FTy 5)]), Call("BadCode",CTy"MachineCode",LS"LoadStorePair")))))), (Call ("LoadStoreAcquire@8",CTy"LoadStore", TP[Var("size",F8),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"excl",bVar"rn_unknown", bVar"rt_unknown",Var("rs",FTy 5),Var("rn",FTy 5), Var("rt",FTy 5)]), ITE(Bop(And, CS(Mop(Size,Var("size",F8)), [(LN 8,EQ(Var("size",F8),LW(0,8))), (LN 16,EQ(Var("size",F8),LW(1,8))), (LN 32,EQ(Var("size",F8),LW(2,8))), (AVar nTy,EQ(Var("size",F8),LW(3,8)))]), Bop(And, Bop(In,Var("memop",CTy"MemOp"), SL[LC("MemOp_LOAD",CTy"MemOp"), LC("MemOp_STORE",CTy"MemOp")]), Bop(In,Var("acctype",CTy"AccType"), SL[LC("AccType_ORDERED",CTy"AccType"), LC("AccType_ATOMIC",CTy"AccType")]))), Call ("ARM8",CTy"MachineCode", CC[Mop(Cast(FTy 2),Var("size",F8)),LW(8,6), Mop(Cast F1,Mop(Not,bVar"excl")), Mop(Cast F1, EQ(Var("memop",CTy"MemOp"), LC("MemOp_LOAD",CTy"MemOp"))),LW(0,1), Var("rs",FTy 5), Mop(Cast F1, EQ(Var("acctype",CTy"AccType"), LC("AccType_ORDERED",CTy"AccType"))),LW(31,5), Var("rn",FTy 5),Var("rt",FTy 5)]), Call("BadCode",CTy"MachineCode",LS"LoadStoreAcquire"))), (Call ("LoadStoreAcquire@16",CTy"LoadStore", TP[Var("size",F16),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"excl",bVar"rn_unknown", bVar"rt_unknown",Var("rs",FTy 5),Var("rn",FTy 5), Var("rt",FTy 5)]), ITE(Bop(And, CS(Mop(Size,Var("size",F16)), [(LN 8,EQ(Var("size",F16),LW(0,16))), (LN 16,EQ(Var("size",F16),LW(1,16))), (LN 32,EQ(Var("size",F16),LW(2,16))), (AVar nTy,EQ(Var("size",F16),LW(3,16)))]), Bop(And, Bop(In,Var("memop",CTy"MemOp"), SL[LC("MemOp_LOAD",CTy"MemOp"), LC("MemOp_STORE",CTy"MemOp")]), Bop(In,Var("acctype",CTy"AccType"), SL[LC("AccType_ORDERED",CTy"AccType"), LC("AccType_ATOMIC",CTy"AccType")]))), Call ("ARM8",CTy"MachineCode", CC[Mop(Cast(FTy 2),Var("size",F16)),LW(8,6), Mop(Cast F1,Mop(Not,bVar"excl")), Mop(Cast F1, EQ(Var("memop",CTy"MemOp"), LC("MemOp_LOAD",CTy"MemOp"))),LW(0,1), Var("rs",FTy 5), Mop(Cast F1, EQ(Var("acctype",CTy"AccType"), LC("AccType_ORDERED",CTy"AccType"))),LW(31,5), Var("rn",FTy 5),Var("rt",FTy 5)]), Call("BadCode",CTy"MachineCode",LS"LoadStoreAcquire"))), (Call ("LoadStoreAcquire@32",CTy"LoadStore", TP[Var("size",F32),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"excl",bVar"rn_unknown", bVar"rt_unknown",Var("rs",FTy 5),Var("rn",FTy 5), Var("rt",FTy 5)]), ITE(Bop(And, CS(Mop(Size,Var("size",F32)), [(LN 8,EQ(Var("size",F32),LW(0,32))), (LN 16,EQ(Var("size",F32),LW(1,32))), (LN 32,EQ(Var("size",F32),LW(2,32))), (AVar nTy,EQ(Var("size",F32),LW(3,32)))]), Bop(And, Bop(In,Var("memop",CTy"MemOp"), SL[LC("MemOp_LOAD",CTy"MemOp"), LC("MemOp_STORE",CTy"MemOp")]), Bop(In,Var("acctype",CTy"AccType"), SL[LC("AccType_ORDERED",CTy"AccType"), LC("AccType_ATOMIC",CTy"AccType")]))), Call ("ARM8",CTy"MachineCode", CC[Mop(Cast(FTy 2),Var("size",F32)),LW(8,6), Mop(Cast F1,Mop(Not,bVar"excl")), Mop(Cast F1, EQ(Var("memop",CTy"MemOp"), LC("MemOp_LOAD",CTy"MemOp"))),LW(0,1), Var("rs",FTy 5), Mop(Cast F1, EQ(Var("acctype",CTy"AccType"), LC("AccType_ORDERED",CTy"AccType"))),LW(31,5), Var("rn",FTy 5),Var("rt",FTy 5)]), Call("BadCode",CTy"MachineCode",LS"LoadStoreAcquire"))), (Call ("LoadStoreAcquire@64",CTy"LoadStore", TP[Var("size",F64),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"excl",bVar"rn_unknown", bVar"rt_unknown",Var("rs",FTy 5),Var("rn",FTy 5), Var("rt",FTy 5)]), ITE(Bop(And, CS(Mop(Size,Var("size",F64)), [(LN 8,EQ(Var("size",F64),LW(0,64))), (LN 16,EQ(Var("size",F64),LW(1,64))), (LN 32,EQ(Var("size",F64),LW(2,64))), (AVar nTy,EQ(Var("size",F64),LW(3,64)))]), Bop(And, Bop(In,Var("memop",CTy"MemOp"), SL[LC("MemOp_LOAD",CTy"MemOp"), LC("MemOp_STORE",CTy"MemOp")]), Bop(In,Var("acctype",CTy"AccType"), SL[LC("AccType_ORDERED",CTy"AccType"), LC("AccType_ATOMIC",CTy"AccType")]))), Call ("ARM8",CTy"MachineCode", CC[Mop(Cast(FTy 2),Var("size",F64)),LW(8,6), Mop(Cast F1,Mop(Not,bVar"excl")), Mop(Cast F1, EQ(Var("memop",CTy"MemOp"), LC("MemOp_LOAD",CTy"MemOp"))),LW(0,1), Var("rs",FTy 5), Mop(Cast F1, EQ(Var("acctype",CTy"AccType"), LC("AccType_ORDERED",CTy"AccType"))),LW(31,5), Var("rn",FTy 5),Var("rt",FTy 5)]), Call("BadCode",CTy"MachineCode",LS"LoadStoreAcquire"))), (Call ("LoadStoreAcquirePair@64",CTy"LoadStore", TP[Var("size",F64),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"rn_unknown", bVar"rt_unknown",Var("rs",FTy 5),Var("rn",FTy 5), Var("rt",FTy 5),Var("rt2",FTy 5)]), ITE(Bop(And, EQ(Var("size",F64), ITE(EQ(Mop(Size,Var("size",F64)),LN 64),LW(2,64), LW(3,64))), Bop(And, Bop(In,Var("memop",CTy"MemOp"), SL[LC("MemOp_LOAD",CTy"MemOp"), LC("MemOp_STORE",CTy"MemOp")]), Bop(In,Var("acctype",CTy"AccType"), SL[LC("AccType_ORDERED",CTy"AccType"), LC("AccType_ATOMIC",CTy"AccType")]))), Call ("ARM8",CTy"MachineCode", CC[Mop(Cast(FTy 2),Var("size",F64)),LW(16,7), Mop(Cast F1, EQ(Var("memop",CTy"MemOp"), LC("MemOp_LOAD",CTy"MemOp"))),LW(1,1), Var("rs",FTy 5), Mop(Cast F1, EQ(Var("acctype",CTy"AccType"), LC("AccType_ORDERED",CTy"AccType"))), Var("rt2",FTy 5),Var("rn",FTy 5),Var("rt",FTy 5)]), Call("BadCode",CTy"MachineCode",LS"LoadStoreAcquirePair"))), (Call ("LoadStoreAcquirePair@128",CTy"LoadStore", TP[Var("size",FTy 128),Var("memop",CTy"MemOp"), Var("acctype",CTy"AccType"),bVar"rn_unknown", bVar"rt_unknown",Var("rs",FTy 5),Var("rn",FTy 5), Var("rt",FTy 5),Var("rt2",FTy 5)]), ITE(Bop(And, EQ(Var("size",FTy 128), ITE(EQ(Mop(Size,Var("size",FTy 128)),LN 64),LW(2,128), LW(3,128))), Bop(And, Bop(In,Var("memop",CTy"MemOp"), SL[LC("MemOp_LOAD",CTy"MemOp"), LC("MemOp_STORE",CTy"MemOp")]), Bop(In,Var("acctype",CTy"AccType"), SL[LC("AccType_ORDERED",CTy"AccType"), LC("AccType_ATOMIC",CTy"AccType")]))), Call ("ARM8",CTy"MachineCode", CC[Mop(Cast(FTy 2),Var("size",FTy 128)),LW(16,7), Mop(Cast F1, EQ(Var("memop",CTy"MemOp"), LC("MemOp_LOAD",CTy"MemOp"))),LW(1,1), Var("rs",FTy 5), Mop(Cast F1, EQ(Var("acctype",CTy"AccType"), LC("AccType_ORDERED",CTy"AccType"))), Var("rt2",FTy 5),Var("rn",FTy 5),Var("rt",FTy 5)]), Call("BadCode",CTy"MachineCode",LS"LoadStoreAcquirePair")))])) ; val Encode_def = Def ("Encode",Var("i",CTy"instruction"), CS(Var("i",CTy"instruction"), [(Call ("Address",CTy"instruction", TP[bVar"page",Var("imm",F64),Var("rd",FTy 5)]), ITE(bVar"page", Let(Var("immlo",FTy 2),EX(Var("imm",F64),LN 13,LN 12,FTy 2), Let(Var("immhi",FTy 19), EX(Var("imm",F64),LN 32,LN 14,FTy 19), ITE(EQ(Mop(SE F64, CC[Var("immhi",FTy 19),Var("immlo",FTy 2), LW(0,12)]),Var("imm",F64)), Call ("ARM8",CTy"MachineCode", CC[LW(1,1),Var("immlo",FTy 2),LW(16,5), Var("immhi",FTy 19),Var("rd",FTy 5)]), Call("BadCode",CTy"MachineCode",LS"Address")))), Let(Var("immlo",FTy 2),EX(Var("imm",F64),LN 1,LN 0,FTy 2), Let(Var("immhi",FTy 19), EX(Var("imm",F64),LN 20,LN 2,FTy 19), ITE(EQ(Mop(SE F64, CC[Var("immhi",FTy 19),Var("immlo",FTy 2)]), Var("imm",F64)), Call ("ARM8",CTy"MachineCode", CC[LW(0,1),Var("immlo",FTy 2),LW(16,5), Var("immhi",FTy 19),Var("rd",FTy 5)]), Call("BadCode",CTy"MachineCode",LS"Address")))))), (Call("Data",CTy"instruction",Var("x",CTy"Data")), Call("e_data",CTy"MachineCode",Var("x",CTy"Data"))), (Call("Branch",CTy"instruction",Var("x",CTy"Branch")), Call("e_branch",CTy"MachineCode",Var("x",CTy"Branch"))), (Call("LoadStore",CTy"instruction",Var("x",CTy"LoadStore")), Call("e_load_store",CTy"MachineCode",Var("x",CTy"LoadStore"))), (Call("CRCExt",CTy"instruction",Var("x",CTy"CRCExt")), Call ("ARM8",CTy"MachineCode",Call("e_crc",F32,Var("x",CTy"CRCExt")))), (Call("Debug",CTy"instruction",Var("x",CTy"Debug")), Call ("ARM8",CTy"MachineCode",Call("e_debug",F32,Var("x",CTy"Debug")))), (Call("System",CTy"instruction",Var("x",CTy"System")), Call ("ARM8",CTy"MachineCode", Call("e_system",F32,Var("x",CTy"System")))), (Call ("MemoryBarrier",CTy"instruction", TP[Var("opc",CTy"MemBarrierOp"),Var("crm",F4)]), Call ("ARM8",CTy"MachineCode", CC[LW(872499,20),Var("crm",F4),LW(1,1), Mop(Cast(FTy 2),Var("opc",CTy"MemBarrierOp")),LW(31,5)])), (Call("ClearExclusive",CTy"instruction",Var("crm",F4)), Call ("ARM8",CTy"MachineCode", CC[LW(872499,20),Var("crm",F4),LW(95,8)])), (Call("Hint",CTy"instruction",Var("opc",CTy"SystemHintOp")), Call ("ARM8",CTy"MachineCode", CC[LW(13959968,24), Mop(Cast(FTy 3),Var("opc",CTy"SystemHintOp")),LW(31,5)])), (Const("Unallocated",CTy"instruction"), Call("BadCode",CTy"MachineCode",LS"Unallocated")), (Const("Reserved",CTy"instruction"), Call("BadCode",CTy"MachineCode",LS"Reserved"))])) val () = Import.finish 0