(* armScript.sml - generated by L3 - Wed Jan 31 16:14:43 2018 *) open HolKernel boolLib bossLib Import val () = Import.start "arm" val () = ieee_underflow_before := true val _ = Construct [("Architecture", [("ARMv4",[]),("ARMv4T",[]),("ARMv5T",[]),("ARMv5TE",[]),("ARMv6",[]), ("ARMv6K",[]),("ARMv6T2",[]),("ARMv7_A",[]),("ARMv7_R",[])])] ; val _ = Construct [("Extensions", [("Extension_ThumbEE",[]),("Extension_Security",[]), ("Extension_Multiprocessing",[]),("Extension_Virtualization",[]), ("Extension_AdvanvedSIMD",[])])] ; val _ = Record ("PSR", [("A",bTy),("C",bTy),("E",bTy),("F",bTy),("GE",F4),("I",bTy),("IT",F8), ("J",bTy),("M",FTy 5),("N",bTy),("Q",bTy),("T",bTy),("V",bTy), ("Z",bTy),("psr'rst",F4)]) ; val _ = Record ("CP14",[("TEEHBR",F32)]) ; val _ = Record ("SCTLR", [("A",bTy),("B",bTy),("BR",bTy),("C",bTy),("DZ",bTy),("EE",bTy), ("FI",bTy),("I",bTy),("IE",bTy),("M",bTy),("NMFI",bTy),("RR",bTy), ("SW",bTy),("TE",bTy),("U",bTy),("V",bTy),("VE",bTy),("Z",bTy), ("sctlr'rst",FTy 14)]) ; val _ = Record ("HSCTLR", [("A",bTy),("C",bTy),("CP15BEN",bTy),("EE",bTy),("FI",bTy),("I",bTy), ("M",bTy),("TE",bTy),("WXN",bTy),("hsctlr'rst",FTy 23)]) ; val _ = Record ("HSR",[("EC",FTy 6),("IL",bTy),("ISS",FTy 25)]) ; val _ = Record ("SCR", [("AW",bTy),("EA",bTy),("FIQ",bTy),("FW",bTy),("HCE",bTy),("IRQ",bTy), ("NS",bTy),("SCD",bTy),("SIF",bTy),("nET",bTy),("scr'rst",FTy 22)]) ; val _ = Record ("NSACR", [("NSASEDIS",bTy),("NSD32DIS",bTy),("NSTRCDIS",bTy),("RFR",bTy), ("cp",FTy 14),("nsacr'rst",FTy 14)]) ; val _ = Record ("HCR", [("AMO",bTy),("BSU",FTy 2),("DC",bTy),("FB",bTy),("FMO",bTy), ("IMO",bTy),("PTW",bTy),("SWIO",bTy),("TAC",bTy),("TGE",bTy), ("TID",F4),("TIDCP",bTy),("TPC",bTy),("TPU",bTy),("TSC",bTy), ("TSW",bTy),("TTLB",bTy),("TVM",bTy),("TWE",bTy),("TWI",bTy), ("VA",bTy),("VF",bTy),("VI",bTy),("VM",bTy),("hcr'rst",F4)]) ; val _ = Record ("CP15", [("HCR",CTy"HCR"),("HSCTLR",CTy"HSCTLR"),("HSR",CTy"HSR"), ("MVBAR",F32),("NSACR",CTy"NSACR"),("SCR",CTy"SCR"), ("SCTLR",CTy"SCTLR"),("VBAR",F32)]) ; val _ = Construct [("InstrSet", [("InstrSet_ARM",[]),("InstrSet_Thumb",[]),("InstrSet_Jazelle",[]), ("InstrSet_ThumbEE",[])])] ; val _ = Construct [("Encoding", [("Encoding_Thumb",[]),("Encoding_Thumb2",[]),("Encoding_ARM",[])])] ; val _ = Construct [("RName", [("RName_0usr",[]),("RName_1usr",[]),("RName_2usr",[]), ("RName_3usr",[]),("RName_4usr",[]),("RName_5usr",[]), ("RName_6usr",[]),("RName_7usr",[]),("RName_8usr",[]), ("RName_8fiq",[]),("RName_9usr",[]),("RName_9fiq",[]), ("RName_10usr",[]),("RName_10fiq",[]),("RName_11usr",[]), ("RName_11fiq",[]),("RName_12usr",[]),("RName_12fiq",[]), ("RName_SPusr",[]),("RName_SPfiq",[]),("RName_SPirq",[]), ("RName_SPsvc",[]),("RName_SPabt",[]),("RName_SPund",[]), ("RName_SPmon",[]),("RName_SPhyp",[]),("RName_LRusr",[]), ("RName_LRfiq",[]),("RName_LRirq",[]),("RName_LRsvc",[]), ("RName_LRabt",[]),("RName_LRund",[]),("RName_LRmon",[]), ("RName_PC",[])])] ; val _ = Construct [("SRType", [("SRType_LSL",[]),("SRType_LSR",[]),("SRType_ASR",[]), ("SRType_ROR",[]),("SRType_RRX",[])])] ; val _ = Construct [("VFPExtension",[("NoVFP",[]),("VFPv2",[]),("VFPv3",[]),("VFPv4",[])])] ; val _ = Record ("FPSCR", [("AHP",bTy),("C",bTy),("DN",bTy),("DZC",bTy),("DZE",bTy),("FZ",bTy), ("IDC",bTy),("IDE",bTy),("IOC",bTy),("IOE",bTy),("IXC",bTy), ("IXE",bTy),("N",bTy),("OFC",bTy),("OFE",bTy),("QC",bTy), ("RMode",FTy 2),("UFC",bTy),("UFE",bTy),("V",bTy),("Z",bTy), ("fpscr'rst",FTy 10)]) ; val _ = Record ("FP",[("FPSCR",CTy"FPSCR"),("REG",ATy(FTy 5,F64))]) ; val _ = Construct [("VFPNegMul", [("VFPNegMul_VNMLA",[]),("VFPNegMul_VNMLS",[]),("VFPNegMul_VNMUL",[])])] ; val _ = Construct [("offset1", [("immediate_form1",[F32]), ("register_form1",[PTy(F4,PTy(CTy"SRType",nTy))])])] ; val _ = Construct [("offset2",[("immediate_form2",[F32]),("register_form2",[F4])])] ; val _ = Construct [("Hint", [("Breakpoint",[F32]),("DataMemoryBarrier",[F4]), ("DataSynchronizationBarrier",[F4]),("Debug",[F4]), ("InstructionSynchronizationBarrier",[F4]), ("PreloadData",[PTy(bTy,PTy(bTy,PTy(F4,CTy"offset1")))]), ("PreloadDataLiteral",[PTy(bTy,F32)]), ("PreloadInstruction",[PTy(bTy,PTy(F4,CTy"offset1"))]), ("SendEvent",[]),("WaitForEvent",[]),("WaitForInterrupt",[]), ("Yield",[])])] ; val _ = Construct [("System", [("ChangeProcessorState", [PTy(bTy,PTy(bTy,PTy(bTy,PTy(bTy,PTy(bTy,OTy(FTy 5))))))]), ("EnterxLeavex",[bTy]),("ExceptionReturn",[]), ("HypervisorCall",[F16]), ("MoveToBankedOrSpecialRegister",[PTy(bTy,PTy(FTy 5,F4))]), ("MoveToRegisterFromBankedOrSpecial",[PTy(bTy,PTy(FTy 5,F4))]), ("MoveToRegisterFromSpecial",[PTy(bTy,F4)]), ("MoveToSpecialFromImmediate",[PTy(bTy,PTy(F32,F4))]), ("MoveToSpecialFromRegister",[PTy(bTy,PTy(F4,F4))]), ("ReturnFromException",[PTy(bTy,PTy(bTy,PTy(bTy,F4)))]), ("SecureMonitorCall",[F4]),("Setend",[bTy]), ("StoreReturnState",[PTy(bTy,PTy(bTy,PTy(bTy,FTy 5)))]), ("SupervisorCall",[F32])])] ; val _ = Construct [("Store", [("StoreByte", [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))]), ("StoreByteUnprivileged", [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))]), ("StoreDual", [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,CTy"offset2"))))))]), ("StoreExclusive",[PTy(F4,PTy(F4,PTy(F4,F32)))]), ("StoreExclusiveByte",[PTy(F4,PTy(F4,F4))]), ("StoreExclusiveDoubleword",[PTy(F4,PTy(F4,PTy(F4,F4)))]), ("StoreExclusiveHalf",[PTy(F4,PTy(F4,F4))]), ("StoreHalf", [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))]), ("StoreHalfUnprivileged", [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2"))))]), ("StoreMultiple",[PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,F16))))]), ("StoreMultipleUserRegisters",[PTy(bTy,PTy(bTy,PTy(F4,F16)))]), ("StoreUnprivileged",[PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))]), ("StoreWord", [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))])])] ; val _ = Construct [("Load", [("LoadByte", [PTy(bTy,PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))]), ("LoadByteLiteral",[PTy(bTy,PTy(bTy,PTy(F4,F32)))]), ("LoadByteUnprivileged", [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))]), ("LoadDual", [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,CTy"offset2"))))))]), ("LoadDualLiteral",[PTy(bTy,PTy(F4,PTy(F4,F32)))]), ("LoadExclusive",[PTy(F4,PTy(F4,F32))]), ("LoadExclusiveByte",[PTy(F4,F4)]), ("LoadExclusiveDoubleword",[PTy(F4,PTy(F4,F4))]), ("LoadExclusiveHalf",[PTy(F4,F4)]), ("LoadHalf", [PTy(bTy,PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))]), ("LoadHalfLiteral",[PTy(bTy,PTy(bTy,PTy(F4,F32)))]), ("LoadHalfUnprivileged", [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2")))))]), ("LoadLiteral",[PTy(bTy,PTy(F4,F32))]), ("LoadMultiple",[PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,F16))))]), ("LoadMultipleExceptionReturn", [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,FTy 15))))]), ("LoadMultipleUserRegisters",[PTy(bTy,PTy(bTy,PTy(F4,FTy 15)))]), ("LoadSignedByteUnprivileged", [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2"))))]), ("LoadUnprivileged",[PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))]), ("LoadWord",[PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))])])] ; val _ = Construct [("Media", [("BitFieldClearOrInsert",[PTy(F4,PTy(F4,PTy(nTy,nTy)))]), ("BitFieldExtract",[PTy(bTy,PTy(F4,PTy(F4,PTy(nTy,nTy))))]), ("ByteReverse",[PTy(F4,F4)]), ("ByteReversePackedHalfword",[PTy(F4,F4)]), ("ByteReverseSignedHalfword",[PTy(F4,F4)]), ("ExtendByte",[PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy))))]), ("ExtendByte16",[PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy))))]), ("ExtendHalfword",[PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy))))]), ("PackHalfword", [PTy(CTy"SRType",PTy(nTy,PTy(bTy,PTy(F4,PTy(F4,F4)))))]), ("ReverseBits",[PTy(F4,F4)]), ("Saturate",[PTy(CTy"SRType",PTy(nTy,PTy(nTy,PTy(bTy,PTy(F4,F4)))))]), ("Saturate16",[PTy(nTy,PTy(bTy,PTy(F4,F4)))]), ("SaturatingAddSubtract",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]), ("SelectBytes",[PTy(F4,PTy(F4,F4))])])] ; val _ = Construct [("SIMD", [("SignedAddSub16",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]), ("SignedAddSub8",[PTy(bTy,PTy(F4,PTy(F4,F4)))]), ("SignedHalvingAddSub16",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]), ("SignedHalvingAddSub8",[PTy(bTy,PTy(F4,PTy(F4,F4)))]), ("SignedSaturatingAddSub16",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]), ("SignedSaturatingAddSub8",[PTy(bTy,PTy(F4,PTy(F4,F4)))]), ("UnsignedAddSub16",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]), ("UnsignedAddSub8",[PTy(bTy,PTy(F4,PTy(F4,F4)))]), ("UnsignedHalvingAddSub16",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]), ("UnsignedHalvingAddSub8",[PTy(bTy,PTy(F4,PTy(F4,F4)))]), ("UnsignedSaturatingAddSub16",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]), ("UnsignedSaturatingAddSub8",[PTy(bTy,PTy(F4,PTy(F4,F4)))]), ("UnsignedSumAbsoluteDifferences",[PTy(F4,PTy(F4,PTy(F4,F4)))])])] ; val _ = Construct [("Multiply", [("Multiply32",[PTy(bTy,PTy(F4,PTy(F4,F4)))]), ("MultiplyAccumulate",[PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))]), ("MultiplyAccumulateAccumulate",[PTy(F4,PTy(F4,PTy(F4,F4)))]), ("MultiplyLong", [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))]), ("MultiplySubtract",[PTy(F4,PTy(F4,PTy(F4,F4)))]), ("Signed16Multiply32Accumulate", [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))]), ("Signed16Multiply32Result",[PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,F4))))]), ("Signed16Multiply64Accumulate", [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))]), ("Signed16x32Multiply32Accumulate", [PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))]), ("Signed16x32Multiply32Result",[PTy(bTy,PTy(F4,PTy(F4,F4)))]), ("SignedMostSignificantMultiply", [PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))]), ("SignedMostSignificantMultiplySubtract", [PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))]), ("SignedMultiplyDual",[PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))]), ("SignedMultiplyLongDual", [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))])])] ; val _ = Construct [("Data", [("AddSub",[PTy(bTy,PTy(F4,PTy(F4,FTy 12)))]), ("ArithLogicImmediate",[PTy(F4,PTy(bTy,PTy(F4,PTy(F4,FTy 12))))]), ("CountLeadingZeroes",[PTy(F4,F4)]), ("Move",[PTy(bTy,PTy(bTy,PTy(F4,FTy 12)))]), ("MoveHalfword",[PTy(bTy,PTy(F4,F16))]), ("Register", [PTy(F4,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy))))))]), ("RegisterShiftedRegister", [PTy(F4,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,PTy(CTy"SRType",F4))))))]), ("ShiftImmediate", [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy)))))]), ("ShiftRegister", [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(CTy"SRType",F4)))))]), ("TestCompareImmediate",[PTy(FTy 2,PTy(F4,FTy 12))]), ("TestCompareRegister", [PTy(FTy 2,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy))))])])] ; val _ = Construct [("Branch", [("BranchExchange",[F4]), ("BranchLinkExchangeImmediate",[PTy(CTy"InstrSet",F32)]), ("BranchLinkExchangeRegister",[F4]),("BranchTarget",[F32]), ("CheckArray",[PTy(F4,F4)]),("CompareBranch",[PTy(bTy,PTy(F4,F32))]), ("HandlerBranchLink",[PTy(bTy,F32)]), ("HandlerBranchLinkParameter",[PTy(F32,F32)]), ("HandlerBranchParameter",[PTy(F32,F32)]), ("TableBranchByte",[PTy(bTy,PTy(F4,F4))])])] ; val _ = Construct [("VFP", [("vabs",[PTy(bTy,PTy(FTy 5,FTy 5))]), ("vadd",[PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))]), ("vcmp",[PTy(bTy,PTy(FTy 5,OTy(FTy 5)))]), ("vcvt_float",[PTy(bTy,PTy(FTy 5,FTy 5))]), ("vcvt_from_integer",[PTy(bTy,PTy(bTy,PTy(FTy 5,FTy 5)))]), ("vcvt_to_integer",[PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,FTy 5))))]), ("vdiv",[PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))]), ("vfma_vfms",[PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("vfnma_vfnms",[PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("vldm",[PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F8)))))]), ("vldr",[PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F32))))]), ("vmla_vmls",[PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("vmov",[PTy(bTy,PTy(FTy 5,FTy 5))]), ("vmov_double",[PTy(bTy,PTy(F4,PTy(F4,FTy 5)))]), ("vmov_imm",[PTy(bTy,PTy(FTy 5,F64))]), ("vmov_single",[PTy(bTy,PTy(F4,FTy 5))]), ("vmov_two_singles",[PTy(bTy,PTy(F4,PTy(F4,FTy 5)))]),("vmrs",[F4]), ("vmsr",[F4]),("vmul",[PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))]), ("vneg",[PTy(bTy,PTy(FTy 5,FTy 5))]), ("vneg_mul", [PTy(bTy,PTy(CTy"VFPNegMul",PTy(FTy 5,PTy(FTy 5,FTy 5))))]), ("vsqrt",[PTy(bTy,PTy(FTy 5,FTy 5))]), ("vstm",[PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F8)))))]), ("vstr",[PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F32))))]), ("vsub",[PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))])])] ; val _ = Construct [("instruction", [("Branch",[CTy"Branch"]),("ClearExclusive",[]),("Data",[CTy"Data"]), ("Divide",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),("Hint",[CTy"Hint"]), ("IfThen",[PTy(F4,F4)]),("Load",[CTy"Load"]),("Media",[CTy"Media"]), ("Multiply",[CTy"Multiply"]),("NoOperation",[]),("SIMD",[CTy"SIMD"]), ("Store",[CTy"Store"]),("Swap",[PTy(bTy,PTy(F4,PTy(F4,F4)))]), ("System",[CTy"System"]),("Undefined",[F32]),("VFP",[CTy"VFP"])])] ; val _ = Construct [("MachineCode", [("ARM",[F32]),("BadCode",[sTy]),("Thumb",[F16]), ("Thumb2",[PTy(F16,F16)]),("ThumbEE",[F16])])] ; val _ = Construct [("exception", [("ASSERT",[sTy]),("AlignmentFault",[F32]), ("IMPLEMENTATION_DEFINED",[sTy]),("NoException",[]), ("UNPREDICTABLE",[sTy]),("VFP_EXCEPTION",[sTy])])] ; val _ = Record ("arm_state", [("Architecture",CTy"Architecture"),("CP14",CTy"CP14"), ("CP15",CTy"CP15"),("CPSR",CTy"PSR"),("CurrentCondition",F4), ("ELR_hyp",F32),("Encoding",CTy"Encoding"), ("Extensions",STy(CTy"Extensions")),("FP",CTy"FP"), ("MEM",ATy(F32,F8)),("REG",ATy(CTy"RName",F32)),("SPSR_abt",CTy"PSR"), ("SPSR_fiq",CTy"PSR"),("SPSR_hyp",CTy"PSR"),("SPSR_irq",CTy"PSR"), ("SPSR_mon",CTy"PSR"),("SPSR_svc",CTy"PSR"),("SPSR_und",CTy"PSR"), ("VFPExtension",CTy"VFPExtension"),("exception",CTy"exception"), ("undefined",bTy)]) ; val qTy = CTy "arm_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 ArchVersion_def = Def ("ArchVersion",AVar uTy, Close (qVar"state", CS(Dest("Architecture",CTy"Architecture",qVar"state"), [(LC("ARMv4",CTy"Architecture"),LN 4), (LC("ARMv4T",CTy"Architecture"),LN 4), (LC("ARMv5T",CTy"Architecture"),LN 5), (LC("ARMv5TE",CTy"Architecture"),LN 5), (LC("ARMv6",CTy"Architecture"),LN 6), (LC("ARMv6K",CTy"Architecture"),LN 6), (LC("ARMv6T2",CTy"Architecture"),LN 6), (LC("ARMv7_A",CTy"Architecture"),LN 7), (LC("ARMv7_R",CTy"Architecture"),LN 7)]))) ; val HaveDSPSupport_def = Def ("HaveDSPSupport",AVar uTy, Close (qVar"state", Mop(Not, Bop(In,Dest("Architecture",CTy"Architecture",qVar"state"), SL[LC("ARMv4",CTy"Architecture"), LC("ARMv4T",CTy"Architecture"), LC("ARMv5T",CTy"Architecture")])))) ; val HaveThumb2_def = Def ("HaveThumb2",AVar uTy, Close (qVar"state", Bop(In,Dest("Architecture",CTy"Architecture",qVar"state"), SL[LC("ARMv6T2",CTy"Architecture"), LC("ARMv7_A",CTy"Architecture"), LC("ARMv7_R",CTy"Architecture")]))) ; val HaveThumbEE_def = Def ("HaveThumbEE",AVar uTy, Close (qVar"state", Bop(Or, EQ(Dest("Architecture",CTy"Architecture",qVar"state"), LC("ARMv7_A",CTy"Architecture")), Bop(And, EQ(Dest("Architecture",CTy"Architecture",qVar"state"), LC("ARMv7_R",CTy"Architecture")), Bop(In,LC("Extension_ThumbEE",CTy"Extensions"), Dest("Extensions",STy(CTy"Extensions"),qVar"state")))))) ; val HaveMPExt_def = Def ("HaveMPExt",AVar uTy, Close (qVar"state", Bop(And, Bop(Ge,Apply(Call("ArchVersion",ATy(qTy,nTy),LU),qVar"state"), LN 7), Bop(In,LC("Extension_Multiprocessing",CTy"Extensions"), Dest("Extensions",STy(CTy"Extensions"),qVar"state"))))) ; val HaveSecurityExt_def = Def ("HaveSecurityExt",AVar uTy, Close (qVar"state", Bop(And, Bop(In,Dest("Architecture",CTy"Architecture",qVar"state"), SL[LC("ARMv6K",CTy"Architecture"), LC("ARMv7_A",CTy"Architecture")]), Bop(In,LC("Extension_Security",CTy"Extensions"), Dest("Extensions",STy(CTy"Extensions"),qVar"state"))))) ; val HaveVirtExt_def = Def ("HaveVirtExt",AVar uTy, Close (qVar"state", Bop(And, Bop(Ge,Apply(Call("ArchVersion",ATy(qTy,nTy),LU),qVar"state"), LN 7), Bop(In,LC("Extension_Virtualization",CTy"Extensions"), Dest("Extensions",STy(CTy"Extensions"),qVar"state"))))) ; val rec'PSR_def = Def ("rec'PSR",Var("x",F32), Rec(CTy"PSR", [Bop(Bit,Var("x",F32),LN 8),Bop(Bit,Var("x",F32),LN 29), Bop(Bit,Var("x",F32),LN 9),Bop(Bit,Var("x",F32),LN 6), EX(Var("x",F32),LN 19,LN 16,F4),Bop(Bit,Var("x",F32),LN 7), CC[EX(Var("x",F32),LN 15,LN 10,FTy 6), EX(Var("x",F32),LN 26,LN 25,FTy 2)], Bop(Bit,Var("x",F32),LN 24),EX(Var("x",F32),LN 4,LN 0,FTy 5), Bop(Bit,Var("x",F32),LN 31),Bop(Bit,Var("x",F32),LN 27), Bop(Bit,Var("x",F32),LN 5),Bop(Bit,Var("x",F32),LN 28), Bop(Bit,Var("x",F32),LN 30),EX(Var("x",F32),LN 23,LN 20,F4)])) ; val reg'PSR_def = Def ("reg'PSR",Var("x",CTy"PSR"), CS(Var("x",CTy"PSR"), [(Rec(CTy"PSR", [bVar"A",bVar"C",bVar"E",bVar"F",Var("GE",F4),bVar"I", Var("IT",F8),bVar"J",Var("M",FTy 5),bVar"N",bVar"Q",bVar"T", bVar"V",bVar"Z",Var("psr'rst",F4)]), CC[Mop(Cast F1,bVar"N"),Mop(Cast F1,bVar"Z"),Mop(Cast F1,bVar"C"), Mop(Cast F1,bVar"V"),Mop(Cast F1,bVar"Q"), EX(Var("IT",F8),LN 1,LN 0,FTy 2),Mop(Cast F1,bVar"J"), Var("psr'rst",F4),Var("GE",F4), EX(Var("IT",F8),LN 7,LN 2,FTy 6),Mop(Cast F1,bVar"E"), Mop(Cast F1,bVar"A"),Mop(Cast F1,bVar"I"),Mop(Cast F1,bVar"F"), Mop(Cast F1,bVar"T"),Var("M",FTy 5)])])) ; val write'rec'PSR_def = Def ("write'rec'PSR",TP[AVar F32,Var("x",CTy"PSR")], Call("reg'PSR",F32,Var("x",CTy"PSR"))) ; val write'reg'PSR_def = Def ("write'reg'PSR",TP[AVar(CTy"PSR"),Var("x",F32)], Call("rec'PSR",CTy"PSR",Var("x",F32))) ; val rec'SCTLR_def = Def ("rec'SCTLR",Var("x",F32), Rec(CTy"SCTLR", [Bop(Bit,Var("x",F32),LN 1),Bop(Bit,Var("x",F32),LN 7), Bop(Bit,Var("x",F32),LN 17),Bop(Bit,Var("x",F32),LN 2), Bop(Bit,Var("x",F32),LN 19),Bop(Bit,Var("x",F32),LN 25), Bop(Bit,Var("x",F32),LN 21),Bop(Bit,Var("x",F32),LN 12), Bop(Bit,Var("x",F32),LN 31),Bop(Bit,Var("x",F32),LN 0), Bop(Bit,Var("x",F32),LN 27),Bop(Bit,Var("x",F32),LN 14), Bop(Bit,Var("x",F32),LN 10),Bop(Bit,Var("x",F32),LN 30), Bop(Bit,Var("x",F32),LN 22),Bop(Bit,Var("x",F32),LN 13), Bop(Bit,Var("x",F32),LN 24),Bop(Bit,Var("x",F32),LN 11), CC[EX(Var("x",F32),LN 6,LN 3,F4),EX(Var("x",F32),LN 9,LN 8,FTy 2), EX(Var("x",F32),LN 16,LN 15,FTy 2), EX(Var("x",F32),LN 18,LN 18,F1), EX(Var("x",F32),LN 20,LN 20,F1), EX(Var("x",F32),LN 23,LN 23,F1), EX(Var("x",F32),LN 26,LN 26,F1), EX(Var("x",F32),LN 29,LN 28,FTy 2)]])) ; val reg'SCTLR_def = Def ("reg'SCTLR",Var("x",CTy"SCTLR"), CS(Var("x",CTy"SCTLR"), [(Rec(CTy"SCTLR", [bVar"A",bVar"B",bVar"BR",bVar"C",bVar"DZ",bVar"EE",bVar"FI", bVar"I",bVar"IE",bVar"M",bVar"NMFI",bVar"RR",bVar"SW", bVar"TE",bVar"U",bVar"V",bVar"VE",bVar"Z", Var("sctlr'rst",FTy 14)]), CC[Mop(Cast F1,bVar"IE"),Mop(Cast F1,bVar"TE"), EX(Var("sctlr'rst",FTy 14),LN 1,LN 0,FTy 2), Mop(Cast F1,bVar"NMFI"), EX(Var("sctlr'rst",FTy 14),LN 2,LN 2,F1),Mop(Cast F1,bVar"EE"), Mop(Cast F1,bVar"VE"),EX(Var("sctlr'rst",FTy 14),LN 3,LN 3,F1), Mop(Cast F1,bVar"U"),Mop(Cast F1,bVar"FI"), EX(Var("sctlr'rst",FTy 14),LN 4,LN 4,F1),Mop(Cast F1,bVar"DZ"), EX(Var("sctlr'rst",FTy 14),LN 5,LN 5,F1),Mop(Cast F1,bVar"BR"), EX(Var("sctlr'rst",FTy 14),LN 7,LN 6,FTy 2), Mop(Cast F1,bVar"RR"),Mop(Cast F1,bVar"V"), Mop(Cast F1,bVar"I"),Mop(Cast F1,bVar"Z"), Mop(Cast F1,bVar"SW"), EX(Var("sctlr'rst",FTy 14),LN 9,LN 8,FTy 2), Mop(Cast F1,bVar"B"), EX(Var("sctlr'rst",FTy 14),LN 13,LN 10,F4), Mop(Cast F1,bVar"C"),Mop(Cast F1,bVar"A"),Mop(Cast F1,bVar"M")])])) ; val write'rec'SCTLR_def = Def ("write'rec'SCTLR",TP[AVar F32,Var("x",CTy"SCTLR")], Call("reg'SCTLR",F32,Var("x",CTy"SCTLR"))) ; val write'reg'SCTLR_def = Def ("write'reg'SCTLR",TP[AVar(CTy"SCTLR"),Var("x",F32)], Call("rec'SCTLR",CTy"SCTLR",Var("x",F32))) ; val rec'HSCTLR_def = Def ("rec'HSCTLR",Var("x",F32), Rec(CTy"HSCTLR", [Bop(Bit,Var("x",F32),LN 1),Bop(Bit,Var("x",F32),LN 2), Bop(Bit,Var("x",F32),LN 5),Bop(Bit,Var("x",F32),LN 25), Bop(Bit,Var("x",F32),LN 21),Bop(Bit,Var("x",F32),LN 12), Bop(Bit,Var("x",F32),LN 0),Bop(Bit,Var("x",F32),LN 30), Bop(Bit,Var("x",F32),LN 19), CC[EX(Var("x",F32),LN 4,LN 3,FTy 2), EX(Var("x",F32),LN 11,LN 6,FTy 6), EX(Var("x",F32),LN 18,LN 13,FTy 6), EX(Var("x",F32),LN 20,LN 20,F1), EX(Var("x",F32),LN 24,LN 22,FTy 3), EX(Var("x",F32),LN 29,LN 26,F4),EX(Var("x",F32),LN 31,LN 31,F1)]])) ; val reg'HSCTLR_def = Def ("reg'HSCTLR",Var("x",CTy"HSCTLR"), CS(Var("x",CTy"HSCTLR"), [(Rec(CTy"HSCTLR", [bVar"A",bVar"C",bVar"CP15BEN",bVar"EE",bVar"FI",bVar"I", bVar"M",bVar"TE",bVar"WXN",Var("hsctlr'rst",FTy 23)]), CC[EX(Var("hsctlr'rst",FTy 23),LN 0,LN 0,F1), Mop(Cast F1,bVar"TE"), EX(Var("hsctlr'rst",FTy 23),LN 4,LN 1,F4), Mop(Cast F1,bVar"EE"), EX(Var("hsctlr'rst",FTy 23),LN 7,LN 5,FTy 3), Mop(Cast F1,bVar"FI"), EX(Var("hsctlr'rst",FTy 23),LN 8,LN 8,F1), Mop(Cast F1,bVar"WXN"), EX(Var("hsctlr'rst",FTy 23),LN 14,LN 9,FTy 6), Mop(Cast F1,bVar"I"), EX(Var("hsctlr'rst",FTy 23),LN 20,LN 15,FTy 6), Mop(Cast F1,bVar"CP15BEN"), EX(Var("hsctlr'rst",FTy 23),LN 22,LN 21,FTy 2), Mop(Cast F1,bVar"C"),Mop(Cast F1,bVar"A"),Mop(Cast F1,bVar"M")])])) ; val write'rec'HSCTLR_def = Def ("write'rec'HSCTLR",TP[AVar F32,Var("x",CTy"HSCTLR")], Call("reg'HSCTLR",F32,Var("x",CTy"HSCTLR"))) ; val write'reg'HSCTLR_def = Def ("write'reg'HSCTLR",TP[AVar(CTy"HSCTLR"),Var("x",F32)], Call("rec'HSCTLR",CTy"HSCTLR",Var("x",F32))) ; val rec'HSR_def = Def ("rec'HSR",Var("x",F32), Rec(CTy"HSR", [EX(Var("x",F32),LN 31,LN 26,FTy 6),Bop(Bit,Var("x",F32),LN 25), EX(Var("x",F32),LN 24,LN 0,FTy 25)])) ; val reg'HSR_def = Def ("reg'HSR",Var("x",CTy"HSR"), CS(Var("x",CTy"HSR"), [(Rec(CTy"HSR",[Var("EC",FTy 6),bVar"IL",Var("ISS",FTy 25)]), CC[Var("EC",FTy 6),Mop(Cast F1,bVar"IL"),Var("ISS",FTy 25)])])) ; val write'rec'HSR_def = Def ("write'rec'HSR",TP[AVar F32,Var("x",CTy"HSR")], Call("reg'HSR",F32,Var("x",CTy"HSR"))) ; val write'reg'HSR_def = Def ("write'reg'HSR",TP[AVar(CTy"HSR"),Var("x",F32)], Call("rec'HSR",CTy"HSR",Var("x",F32))) ; val rec'SCR_def = Def ("rec'SCR",Var("x",F32), Rec(CTy"SCR", [Bop(Bit,Var("x",F32),LN 5),Bop(Bit,Var("x",F32),LN 3), Bop(Bit,Var("x",F32),LN 2),Bop(Bit,Var("x",F32),LN 4), Bop(Bit,Var("x",F32),LN 8),Bop(Bit,Var("x",F32),LN 1), Bop(Bit,Var("x",F32),LN 0),Bop(Bit,Var("x",F32),LN 7), Bop(Bit,Var("x",F32),LN 9),Bop(Bit,Var("x",F32),LN 6), EX(Var("x",F32),LN 31,LN 10,FTy 22)])) ; val reg'SCR_def = Def ("reg'SCR",Var("x",CTy"SCR"), CS(Var("x",CTy"SCR"), [(Rec(CTy"SCR", [bVar"AW",bVar"EA",bVar"FIQ",bVar"FW",bVar"HCE",bVar"IRQ", bVar"NS",bVar"SCD",bVar"SIF",bVar"nET",Var("scr'rst",FTy 22)]), CC[Var("scr'rst",FTy 22),Mop(Cast F1,bVar"SIF"), Mop(Cast F1,bVar"HCE"),Mop(Cast F1,bVar"SCD"), Mop(Cast F1,bVar"nET"),Mop(Cast F1,bVar"AW"), Mop(Cast F1,bVar"FW"),Mop(Cast F1,bVar"EA"), Mop(Cast F1,bVar"FIQ"),Mop(Cast F1,bVar"IRQ"), Mop(Cast F1,bVar"NS")])])) ; val write'rec'SCR_def = Def ("write'rec'SCR",TP[AVar F32,Var("x",CTy"SCR")], Call("reg'SCR",F32,Var("x",CTy"SCR"))) ; val write'reg'SCR_def = Def ("write'reg'SCR",TP[AVar(CTy"SCR"),Var("x",F32)], Call("rec'SCR",CTy"SCR",Var("x",F32))) ; val rec'NSACR_def = Def ("rec'NSACR",Var("x",F32), Rec(CTy"NSACR", [Bop(Bit,Var("x",F32),LN 15),Bop(Bit,Var("x",F32),LN 14), Bop(Bit,Var("x",F32),LN 20),Bop(Bit,Var("x",F32),LN 19), EX(Var("x",F32),LN 13,LN 0,FTy 14), CC[EX(Var("x",F32),LN 18,LN 16,FTy 3), EX(Var("x",F32),LN 31,LN 21,FTy 11)]])) ; val reg'NSACR_def = Def ("reg'NSACR",Var("x",CTy"NSACR"), CS(Var("x",CTy"NSACR"), [(Rec(CTy"NSACR", [bVar"NSASEDIS",bVar"NSD32DIS",bVar"NSTRCDIS",bVar"RFR", Var("cp",FTy 14),Var("nsacr'rst",FTy 14)]), CC[EX(Var("nsacr'rst",FTy 14),LN 10,LN 0,FTy 11), Mop(Cast F1,bVar"NSTRCDIS"),Mop(Cast F1,bVar"RFR"), EX(Var("nsacr'rst",FTy 14),LN 13,LN 11,FTy 3), Mop(Cast F1,bVar"NSASEDIS"),Mop(Cast F1,bVar"NSD32DIS"), Var("cp",FTy 14)])])) ; val write'rec'NSACR_def = Def ("write'rec'NSACR",TP[AVar F32,Var("x",CTy"NSACR")], Call("reg'NSACR",F32,Var("x",CTy"NSACR"))) ; val write'reg'NSACR_def = Def ("write'reg'NSACR",TP[AVar(CTy"NSACR"),Var("x",F32)], Call("rec'NSACR",CTy"NSACR",Var("x",F32))) ; val rec'HCR_def = Def ("rec'HCR",Var("x",F32), Rec(CTy"HCR", [Bop(Bit,Var("x",F32),LN 5),EX(Var("x",F32),LN 11,LN 10,FTy 2), Bop(Bit,Var("x",F32),LN 12),Bop(Bit,Var("x",F32),LN 9), Bop(Bit,Var("x",F32),LN 3),Bop(Bit,Var("x",F32),LN 4), Bop(Bit,Var("x",F32),LN 2),Bop(Bit,Var("x",F32),LN 1), Bop(Bit,Var("x",F32),LN 21),Bop(Bit,Var("x",F32),LN 27), EX(Var("x",F32),LN 18,LN 15,F4),Bop(Bit,Var("x",F32),LN 20), Bop(Bit,Var("x",F32),LN 23),Bop(Bit,Var("x",F32),LN 24), Bop(Bit,Var("x",F32),LN 19),Bop(Bit,Var("x",F32),LN 22), Bop(Bit,Var("x",F32),LN 25),Bop(Bit,Var("x",F32),LN 26), Bop(Bit,Var("x",F32),LN 14),Bop(Bit,Var("x",F32),LN 13), Bop(Bit,Var("x",F32),LN 8),Bop(Bit,Var("x",F32),LN 6), Bop(Bit,Var("x",F32),LN 7),Bop(Bit,Var("x",F32),LN 0), EX(Var("x",F32),LN 31,LN 28,F4)])) ; val reg'HCR_def = Def ("reg'HCR",Var("x",CTy"HCR"), CS(Var("x",CTy"HCR"), [(Rec(CTy"HCR", [bVar"AMO",Var("BSU",FTy 2),bVar"DC",bVar"FB",bVar"FMO", bVar"IMO",bVar"PTW",bVar"SWIO",bVar"TAC",bVar"TGE", Var("TID",F4),bVar"TIDCP",bVar"TPC",bVar"TPU",bVar"TSC", bVar"TSW",bVar"TTLB",bVar"TVM",bVar"TWE",bVar"TWI",bVar"VA", bVar"VF",bVar"VI",bVar"VM",Var("hcr'rst",F4)]), CC[Var("hcr'rst",F4),Mop(Cast F1,bVar"TGE"), Mop(Cast F1,bVar"TVM"),Mop(Cast F1,bVar"TTLB"), Mop(Cast F1,bVar"TPU"),Mop(Cast F1,bVar"TPC"), Mop(Cast F1,bVar"TSW"),Mop(Cast F1,bVar"TAC"), Mop(Cast F1,bVar"TIDCP"),Mop(Cast F1,bVar"TSC"),Var("TID",F4), Mop(Cast F1,bVar"TWE"),Mop(Cast F1,bVar"TWI"), Mop(Cast F1,bVar"DC"),Var("BSU",FTy 2),Mop(Cast F1,bVar"FB"), Mop(Cast F1,bVar"VA"),Mop(Cast F1,bVar"VI"), Mop(Cast F1,bVar"VF"),Mop(Cast F1,bVar"AMO"), Mop(Cast F1,bVar"IMO"),Mop(Cast F1,bVar"FMO"), Mop(Cast F1,bVar"PTW"),Mop(Cast F1,bVar"SWIO"), Mop(Cast F1,bVar"VM")])])) ; val write'rec'HCR_def = Def ("write'rec'HCR",TP[AVar F32,Var("x",CTy"HCR")], Call("reg'HCR",F32,Var("x",CTy"HCR"))) ; val write'reg'HCR_def = Def ("write'reg'HCR",TP[AVar(CTy"HCR"),Var("x",F32)], Call("rec'HCR",CTy"HCR",Var("x",F32))) ; val ProcessorID_def = Def ("ProcessorID",AVar uTy,LI 0) ; val IsExternalAbort_def = Def ("IsExternalAbort",AVar uTy,LX bTy) ; val IsSecure_def = Def ("IsSecure",AVar uTy, Close (qVar"state", Bop(Or, Mop(Not, Apply(Call("HaveSecurityExt",ATy(qTy,bTy),LU),qVar"state")), Bop(Or, Mop(Not, Dest ("NS",bTy, Dest ("SCR",CTy"SCR",Dest("CP15",CTy"CP15",qVar"state")))), EQ(Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state")), LW(22,5)))))) ; val UnalignedSupport_def = Def ("UnalignedSupport",AVar uTy, Close (qVar"state", Let(nVar"v",Apply(Call("ArchVersion",ATy(qTy,nTy),LU),qVar"state"), Bop(Or,Bop(Ge,nVar"v",LN 7), Bop(And,EQ(nVar"v",LN 6), Dest ("U",bTy, Dest ("SCTLR",CTy"SCTLR", Dest("CP15",CTy"CP15",qVar"state")))))))) ; val BadMode_def = Def ("BadMode",Var("mode",FTy 5), Close (qVar"state", CS(Var("mode",FTy 5), [(LW(16,5),LF),(LW(17,5),LF),(LW(18,5),LF),(LW(19,5),LF), (LW(22,5), Mop(Not, Apply(Call("HaveSecurityExt",ATy(qTy,bTy),LU),qVar"state"))), (LW(23,5),LF), (LW(26,5), Mop(Not,Apply(Call("HaveVirtExt",ATy(qTy,bTy),LU),qVar"state"))), (LW(27,5),LF),(LW(31,5),LF),(AVar(FTy 5),LT)]))) ; val CurrentModeIsNotUser_def = Def ("CurrentModeIsNotUser",AVar uTy, Close (qVar"state", Let(qVar"s", ITE(Apply (Call ("BadMode",ATy(qTy,bTy), Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state"))), qVar"state"), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", CC[LS"BadMode: ", Mop(Cast sTy, Dest ("M",FTy 5, Dest("CPSR",CTy"PSR",qVar"state")))])), qVar"state")),qVar"state"), TP[Mop(Not, EQ(Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")),LW(16,5))), qVar"s"]))) ; val CurrentModeIsUserOrSystem_def = Def ("CurrentModeIsUserOrSystem",AVar uTy, Close (qVar"state", Let(qVar"s", ITE(Apply (Call ("BadMode",ATy(qTy,bTy), Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state"))), qVar"state"), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", CC[LS"BadMode: ", Mop(Cast sTy, Dest ("M",FTy 5, Dest("CPSR",CTy"PSR",qVar"state")))])), qVar"state")),qVar"state"), TP[Bop(In,Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")), SL[LW(16,5),LW(31,5)]),qVar"s"]))) ; val CurrentModeIsHyp_def = Def ("CurrentModeIsHyp",AVar uTy, Close (qVar"state", Let(qVar"s", ITE(Apply (Call ("BadMode",ATy(qTy,bTy), Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state"))), qVar"state"), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", CC[LS"BadMode: ", Mop(Cast sTy, Dest ("M",FTy 5, Dest("CPSR",CTy"PSR",qVar"state")))])), qVar"state")),qVar"state"), TP[EQ(Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")),LW(26,5)), qVar"s"]))) ; val IntegerZeroDivideTrappingEnabled_def = Def ("IntegerZeroDivideTrappingEnabled",AVar uTy, Close (qVar"state", Dest ("DZ",bTy, Dest("SCTLR",CTy"SCTLR",Dest("CP15",CTy"CP15",qVar"state"))))) ; val ISETSTATE_def = Def ("ISETSTATE",qVar"state", CC[Mop(Cast F1,Dest("J",bTy,Dest("CPSR",CTy"PSR",qVar"state"))), Mop(Cast F1,Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"state")))]) ; val write'ISETSTATE_def = Def ("write'ISETSTATE",Var("value",FTy 2), Close (qVar"state", Let(qVar"s", Rupd ("CPSR", TP[qVar"state", Rupd ("J", TP[Dest("CPSR",CTy"PSR",qVar"state"), Bop(Bit,Var("value",FTy 2),LN 1)])]), Rupd ("CPSR", TP[qVar"s", Rupd ("T", TP[Dest("CPSR",CTy"PSR",qVar"s"), Bop(Bit,Var("value",FTy 2),LN 0)])])))) ; val CurrentInstrSet_def = Def ("CurrentInstrSet",AVar uTy, Close (qVar"state", CS(Apply(Const("ISETSTATE",ATy(qTy,FTy 2)),qVar"state"), [(LW(0,2),LC("InstrSet_ARM",CTy"InstrSet")), (LW(1,2),LC("InstrSet_Thumb",CTy"InstrSet")), (LW(2,2),LC("InstrSet_Jazelle",CTy"InstrSet")), (LW(3,2),LC("InstrSet_ThumbEE",CTy"InstrSet"))]))) ; val SelectInstrSet_def = Def ("SelectInstrSet",Var("iset",CTy"InstrSet"), Close (qVar"state", CS(Var("iset",CTy"InstrSet"), [(LC("InstrSet_ARM",CTy"InstrSet"), ITE(EQ(Apply (Call("CurrentInstrSet",ATy(qTy,CTy"InstrSet"),LU), qVar"state"),LC("InstrSet_ThumbEE",CTy"InstrSet")), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"SelectInstrSet")),qVar"state")), Apply (Call("write'ISETSTATE",ATy(qTy,qTy),LW(0,2)),qVar"state"))), (LC("InstrSet_Thumb",CTy"InstrSet"), Apply(Call("write'ISETSTATE",ATy(qTy,qTy),LW(1,2)),qVar"state")), (LC("InstrSet_Jazelle",CTy"InstrSet"), Apply(Call("write'ISETSTATE",ATy(qTy,qTy),LW(2,2)),qVar"state")), (LC("InstrSet_ThumbEE",CTy"InstrSet"), Apply(Call("write'ISETSTATE",ATy(qTy,qTy),LW(3,2)),qVar"state"))]))) ; val ITSTATE_def = Def ("ITSTATE",qVar"state", ITE(Apply(Call("HaveThumb2",ATy(qTy,bTy),LU),qVar"state"), Dest("IT",F8,Dest("CPSR",CTy"PSR",qVar"state")),LW(0,8))) ; val write'ITSTATE_def = Def ("write'ITSTATE",Var("value",F8), Close (qVar"state", Rupd ("CPSR", TP[qVar"state", Rupd ("IT",TP[Dest("CPSR",CTy"PSR",qVar"state"),Var("value",F8)])]))) ; val ITAdvance_def = Def ("ITAdvance",AVar uTy, Close (qVar"state", ITE(Bop(And,Apply(Call("HaveThumb2",ATy(qTy,bTy),LU),qVar"state"), Mop(Not, EQ(Dest("Encoding",CTy"Encoding",qVar"state"), LC("Encoding_ARM",CTy"Encoding")))), ITE(EQ(EX(Apply(Const("ITSTATE",ATy(qTy,F8)),qVar"state"),LN 2, LN 0,FTy 3),LW(0,3)), Apply (Call("write'ITSTATE",ATy(qTy,qTy),LW(0,8)),qVar"state"), Apply (Call ("write'ITSTATE",ATy(qTy,qTy), BFI(LN 4,LN 0, Bop(Lsl, EX(Apply (Const("ITSTATE",ATy(qTy,F8)),qVar"state"), LN 4,LN 0,FTy 5),LN 1), Apply(Const("ITSTATE",ATy(qTy,F8)),qVar"state"))), qVar"state")),qVar"state"))) ; val InITBlock_def = Def ("InITBlock",AVar uTy, Close (qVar"state", Mop(Not, EQ(EX(Apply(Const("ITSTATE",ATy(qTy,F8)),qVar"state"),LN 3,LN 0, F4),LW(0,4))))) ; val LastInITBlock_def = Def ("LastInITBlock",AVar uTy, Close (qVar"state", EQ(EX(Apply(Const("ITSTATE",ATy(qTy,F8)),qVar"state"),LN 3,LN 0,F4), LW(8,4)))) ; val ThumbCondition_def = Def ("ThumbCondition",AVar uTy, Close (qVar"state", ITB([(EQ(Apply(Const("ITSTATE",ATy(qTy,F8)),qVar"state"),LW(0,8)), TP[LW(14,4),qVar"state"]), (Mop(Not, EQ(EX(Dest("IT",F8,Dest("CPSR",CTy"PSR",qVar"state")), LN 3,LN 0,F4),LW(0,4))), TP[EX(Dest("IT",F8,Dest("CPSR",CTy"PSR",qVar"state")),LN 7, LN 4,F4),qVar"state"])], Apply (Call ("raise'exception",ATy(qTy,PTy(F4,qTy)), Call("UNPREDICTABLE",CTy"exception",LS"ThumbCondition")), qVar"state")))) ; val BigEndian_def = Def ("BigEndian",AVar uTy, Close(qVar"state",Dest("E",bTy,Dest("CPSR",CTy"PSR",qVar"state")))) ; val SetExclusiveMonitors_def = Def ("SetExclusiveMonitors",TP[Var("address",F32),nVar"n"],LU) ; val ExclusiveMonitorsPass_def = Def ("ExclusiveMonitorsPass",TP[Var("address",F32),nVar"n"],LX bTy) ; val ClearExclusiveLocal_def = Def ("ClearExclusiveLocal",iVar"id",LU) ; val CurrentCond_def = Def ("CurrentCond",AVar uTy, Close(qVar"state",Dest("CurrentCondition",F4,qVar"state"))) ; val ConditionPassed_def = Def ("ConditionPassed",AVar uTy, Close (qVar"state", Let(Var("v",F4), Apply(Call("CurrentCond",ATy(qTy,F4),LU),qVar"state"), Let(TP[bVar"v0",qVar"s"], CS(EX(Var("v",F4),LN 3,LN 1,FTy 3), [(LW(0,3), TP[Dest("Z",bTy,Dest("CPSR",CTy"PSR",qVar"state")), qVar"state"]), (LW(1,3), TP[Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"state")), qVar"state"]), (LW(2,3), TP[Dest("N",bTy,Dest("CPSR",CTy"PSR",qVar"state")), qVar"state"]), (LW(3,3), TP[Dest("V",bTy,Dest("CPSR",CTy"PSR",qVar"state")), qVar"state"]), (LW(4,3), TP[Bop(And, Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"state")), Mop(Not, Dest ("Z",bTy,Dest("CPSR",CTy"PSR",qVar"state")))), qVar"state"]), (LW(5,3), TP[EQ(Dest("N",bTy,Dest("CPSR",CTy"PSR",qVar"state")), Dest("V",bTy,Dest("CPSR",CTy"PSR",qVar"state"))), qVar"state"]), (LW(6,3), TP[Bop(And, EQ(Dest ("N",bTy,Dest("CPSR",CTy"PSR",qVar"state")), Dest ("V",bTy,Dest("CPSR",CTy"PSR",qVar"state"))), Mop(Not, Dest ("Z",bTy,Dest("CPSR",CTy"PSR",qVar"state")))), qVar"state"]),(LW(7,3),TP[LT,qVar"state"])]), ITE(Bop(And,Bop(Bit,Var("v",F4),LN 0), Mop(Not,EQ(Var("v",F4),LW(15,4)))), Mop(Not,bVar"v0"),bVar"v0"))))) ; val SPSR_def = Def ("SPSR",qVar"state", ITE(Apply (Call ("BadMode",ATy(qTy,bTy), Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state"))), qVar"state"), Apply (Call ("raise'exception",ATy(qTy,PTy(CTy"PSR",qTy)), Call ("UNPREDICTABLE",CTy"exception", CC[LS"SPSR: BadMode: ", Mop(Cast sTy, Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state")))])), qVar"state"), CS(Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state")), [(LW(17,5),TP[Dest("SPSR_fiq",CTy"PSR",qVar"state"),qVar"state"]), (LW(18,5),TP[Dest("SPSR_irq",CTy"PSR",qVar"state"),qVar"state"]), (LW(19,5),TP[Dest("SPSR_svc",CTy"PSR",qVar"state"),qVar"state"]), (LW(22,5),TP[Dest("SPSR_mon",CTy"PSR",qVar"state"),qVar"state"]), (LW(23,5),TP[Dest("SPSR_abt",CTy"PSR",qVar"state"),qVar"state"]), (LW(26,5),TP[Dest("SPSR_hyp",CTy"PSR",qVar"state"),qVar"state"]), (LW(27,5),TP[Dest("SPSR_und",CTy"PSR",qVar"state"),qVar"state"]), (AVar(FTy 5), Apply (Call ("raise'exception",ATy(qTy,PTy(CTy"PSR",qTy)), Call("UNPREDICTABLE",CTy"exception",LS"SPSR")), qVar"state"))]))) ; val write'SPSR_def = Def ("write'SPSR",Var("value",CTy"PSR"), Close (qVar"state", ITE(Apply (Call ("BadMode",ATy(qTy,bTy), Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state"))), qVar"state"), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", CC[LS"SPSR: BadMode: ", Mop(Cast sTy, Dest ("M",FTy 5, Dest("CPSR",CTy"PSR",qVar"state")))])), qVar"state")), CS(Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state")), [(LW(17,5), Rupd("SPSR_fiq",TP[qVar"state",Var("value",CTy"PSR")])), (LW(18,5), Rupd("SPSR_irq",TP[qVar"state",Var("value",CTy"PSR")])), (LW(19,5), Rupd("SPSR_svc",TP[qVar"state",Var("value",CTy"PSR")])), (LW(22,5), Rupd("SPSR_mon",TP[qVar"state",Var("value",CTy"PSR")])), (LW(23,5), Rupd("SPSR_abt",TP[qVar"state",Var("value",CTy"PSR")])), (LW(26,5), Rupd("SPSR_hyp",TP[qVar"state",Var("value",CTy"PSR")])), (LW(27,5), Rupd("SPSR_und",TP[qVar"state",Var("value",CTy"PSR")])), (AVar(FTy 5), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("UNPREDICTABLE",CTy"exception",LS"SPSR")), qVar"state")))])))) ; val CPSRWriteByInstr_def = Def ("CPSRWriteByInstr", TP[Var("value",F32),Var("bytemask",F4),bVar"is_excpt_return"], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU), qVar"state"), Let(qVar"s0", ITE(Bop(Bit,Var("bytemask",F4),LN 3), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Call ("write'reg'PSR",CTy"PSR", TP[Dest("CPSR",CTy"PSR",qVar"s"), BFI(LN 31,LN 27, EX(Var("value",F32),LN 31,LN 27, FTy 5), Call ("reg'PSR",F32, Dest("CPSR",CTy"PSR",qVar"s")))])]), ITE(bVar"is_excpt_return", Rupd ("CPSR", TP[qVar"s", Call ("write'reg'PSR",CTy"PSR", TP[Dest("CPSR",CTy"PSR",qVar"s"), BFI(LN 26,LN 24, EX(Var("value",F32),LN 26,LN 24, FTy 3), Call ("reg'PSR",F32, Dest("CPSR",CTy"PSR",qVar"s")))])]), qVar"s")),qVar"s"), Let(qVar"s0", ITE(Bop(Bit,Var("bytemask",F4),LN 2), Rupd ("CPSR", TP[qVar"s0", Call ("write'reg'PSR",CTy"PSR", TP[Dest("CPSR",CTy"PSR",qVar"s0"), BFI(LN 19,LN 16, EX(Var("value",F32),LN 19,LN 16,F4), Call ("reg'PSR",F32, Dest("CPSR",CTy"PSR",qVar"s0")))])]), qVar"s0"), Let(qVar"s0", ITE(Bop(Bit,Var("bytemask",F4),LN 1), Let(qVar"s", ITE(bVar"is_excpt_return", Rupd ("CPSR", TP[qVar"s0", Call ("write'reg'PSR",CTy"PSR", TP[Dest ("CPSR",CTy"PSR",qVar"s0"), BFI(LN 15,LN 10, EX(Var("value",F32), LN 15,LN 10,FTy 6), Call ("reg'PSR",F32, Dest ("CPSR",CTy"PSR", qVar"s0")))])]), qVar"s0"), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Call ("write'reg'PSR",CTy"PSR", TP[Dest ("CPSR",CTy"PSR",qVar"s"), BFI(LN 9,LN 9, Mop(Cast F1, Bop(Bit, Var("value",F32), LN 9)), Call ("reg'PSR",F32, Dest ("CPSR",CTy"PSR", qVar"s")))])]), ITE(Bop(And,bVar"v", Bop(Or, Apply (Call ("IsSecure", ATy(qTy,bTy),LU), qVar"s"), Dest ("AW",bTy, Dest ("SCR",CTy"SCR", Dest ("CP15",CTy"CP15", qVar"s"))))), Rupd ("CPSR", TP[qVar"s", Call ("write'reg'PSR",CTy"PSR", TP[Dest ("CPSR",CTy"PSR", qVar"s"), BFI(LN 8,LN 8, Mop(Cast F1, Bop(Bit, Var("value", F32), LN 8)), Call ("reg'PSR",F32, Dest ("CPSR", CTy"PSR", qVar"s")))])]), qVar"s"))),qVar"s0"), ITE(Bop(Bit,Var("bytemask",F4),LN 0), Let(qVar"s0", ITE(bVar"v", Rupd ("CPSR", TP[qVar"s0", Call ("write'reg'PSR",CTy"PSR", TP[Dest ("CPSR",CTy"PSR",qVar"s0"), BFI(LN 7,LN 7, Mop(Cast F1, Bop(Bit, Var("value",F32), LN 7)), Call ("reg'PSR",F32, Dest ("CPSR",CTy"PSR", qVar"s0")))])]), qVar"s0"), Let(qVar"s", ITE(Bop(And,bVar"v", Bop(And, Bop(Or, Mop(Not, Dest ("NMFI",bTy, Dest ("SCTLR", CTy"SCTLR", Dest ("CP15", CTy"CP15", qVar"s")))), Mop(Not, Bop(Bit, Var("value",F32), LN 6))), Bop(Or, Apply (Call ("IsSecure", ATy(qTy,bTy),LU), qVar"s0"), Bop(Or, Dest ("FW",bTy, Dest ("SCR", CTy"SCR", Dest ("CP15", CTy"CP15", qVar"s0"))), Apply (Call ("HaveVirtExt", ATy(qTy,bTy), LU),qVar"s0"))))), Rupd ("CPSR", TP[qVar"s0", Call ("write'reg'PSR",CTy"PSR", TP[Dest ("CPSR",CTy"PSR", qVar"s0"), BFI(LN 6,LN 6, Mop(Cast F1, Bop(Bit, Var("value", F32), LN 6)), Call ("reg'PSR",F32, Dest ("CPSR", CTy"PSR", qVar"s0")))])]), qVar"s0"), Let(qVar"s", ITE(bVar"is_excpt_return", Rupd ("CPSR", TP[qVar"s", Call ("write'reg'PSR", CTy"PSR", TP[Dest ("CPSR",CTy"PSR", qVar"s"), BFI(LN 5,LN 5, Mop(Cast F1, Bop(Bit, Var("value", F32), LN 5)), Call ("reg'PSR", F32, Dest ("CPSR", CTy"PSR", qVar"s")))])]), qVar"s"), ITE(bVar"v", ITE(Apply (Call ("BadMode", ATy(qTy,bTy), EX(Var("value",F32), LN 4,LN 0,FTy 5)), qVar"s"), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy, PTy(uTy,qTy)), Call ("UNPREDICTABLE", CTy"exception", CC[LS "CPSRWriteByInstr: BadMode: ", Mop(Cast sTy, EX(Var("value", F32), LN 4, LN 0, FTy 5))])), qVar"s")), Let(TP[bVar"v",qVar"s"], Let(qVar"s0", ITE(Bop(And, Mop(Not, Apply (Call ("IsSecure", ATy(qTy, bTy), LU), qVar"s")), EQ(EX(Var("value", F32), LN 4, LN 0, FTy 5), LW(22,5))), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy, PTy(uTy, qTy)), Call ("UNPREDICTABLE", CTy"exception", LS "CPSRWriteByInstr")), qVar"s")), qVar"s"), TP[Apply (Call ("IsSecure", ATy(qTy,bTy), LU), qVar"s0"), qVar"s0"]), Let(qVar"s", ITE(Bop(And, Mop(Not, bVar"v"), Bop(And, EQ(EX(Var("value", F32), LN 4, LN 0, FTy 5), LW(17, 5)), Dest ("RFR", bTy, Dest ("NSACR", CTy"NSACR", Dest ("CP15", CTy"CP15", qVar"s"))))), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy, PTy(uTy, qTy)), Call ("UNPREDICTABLE", CTy"exception", LS "CPSRWriteByInstr")), qVar"s")), qVar"s"), Let(TP[bVar"v", qVar"s"], Let(qVar"s0", ITE(Bop(And, Mop(Not, Dest ("NS", bTy, Dest ("SCR", CTy"SCR", Dest ("CP15", CTy"CP15", qVar"s")))), EQ(EX(Var("value", F32), LN 4, LN 0, FTy 5), LW(26, 5))), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy, PTy(uTy, qTy)), Call ("UNPREDICTABLE", CTy"exception", LS "CPSRWriteByInstr")), qVar"s")), qVar"s"), TP[Apply (Call ("IsSecure", ATy(qTy, bTy), LU), qVar"s0"), qVar"s0"]), Let(qVar"s", ITE(Bop(And, Mop(Not, bVar"v"), Bop(And, Mop(Not, EQ(Dest ("M", FTy 5, Dest ("CPSR", CTy"PSR", qVar"s")), LW(26, 5))), EQ(EX(Var("value", F32), LN 4, LN 0, FTy 5), LW(26, 5)))), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy, PTy(uTy, qTy)), Call ("UNPREDICTABLE", CTy"exception", LS "CPSRWriteByInstr")), qVar"s")), qVar"s"), Let(qVar"s", ITE(Bop(And, EQ(Dest ("M", FTy 5, Dest ("CPSR", CTy"PSR", qVar"s")), LW(26, 5)), Bop(And, Mop(Not, EQ(EX(Var("value", F32), LN 4, LN 0, FTy 5), LW(26, 5))), Mop(Not, bVar"is_excpt_return"))), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy, PTy(uTy, qTy)), Call ("UNPREDICTABLE", CTy"exception", LS "CPSRWriteByInstr")), qVar"s")), qVar"s"), Rupd ("CPSR", TP[qVar"s", Call ("write'reg'PSR", CTy"PSR", TP[Dest ("CPSR", CTy"PSR", qVar"s"), BFI(LN 4, LN 0, EX(Var("value", F32), LN 4, LN 0, FTy 5), Call ("reg'PSR", F32, Dest ("CPSR", CTy"PSR", qVar"s")))])]))))))), qVar"s")))),qVar"s0"))))))) ; val SPSRWriteByInstr_def = Def ("SPSRWriteByInstr",TP[Var("value",F32),Var("bytemask",F4)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)),LU), qVar"state"), Let(qVar"s", ITE(bVar"v", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"SPSRWriteByInstr")),qVar"s")),qVar"s"), Let(qVar"s", ITE(Bop(Bit,Var("bytemask",F4),LN 3), Let(TP[Var("v",CTy"PSR"),qVar"s"], Apply (Const("SPSR",ATy(qTy,PTy(CTy"PSR",qTy))), qVar"s"), Apply (Call ("write'SPSR",ATy(qTy,qTy), Call ("write'reg'PSR",CTy"PSR", TP[Var("v",CTy"PSR"), BFI(LN 31,LN 24, EX(Var("value",F32),LN 31,LN 24, F8), Call ("reg'PSR",F32, Var("v",CTy"PSR")))])), qVar"s")),qVar"s"), Let(qVar"s", ITE(Bop(Bit,Var("bytemask",F4),LN 2), Let(TP[Var("v",CTy"PSR"),qVar"s"], Apply (Const("SPSR",ATy(qTy,PTy(CTy"PSR",qTy))), qVar"s"), Apply (Call ("write'SPSR",ATy(qTy,qTy), Call ("write'reg'PSR",CTy"PSR", TP[Var("v",CTy"PSR"), BFI(LN 19,LN 16, EX(Var("value",F32),LN 19, LN 16,F4), Call ("reg'PSR",F32, Var("v",CTy"PSR")))])), qVar"s")),qVar"s"), Let(qVar"s", ITE(Bop(Bit,Var("bytemask",F4),LN 1), Let(TP[Var("v",CTy"PSR"),qVar"s"], Apply (Const ("SPSR",ATy(qTy,PTy(CTy"PSR",qTy))), qVar"s"), Apply (Call ("write'SPSR",ATy(qTy,qTy), Call ("write'reg'PSR",CTy"PSR", TP[Var("v",CTy"PSR"), BFI(LN 15,LN 8, EX(Var("value",F32), LN 15,LN 8,F8), Call ("reg'PSR",F32, Var("v",CTy"PSR")))])), qVar"s")),qVar"s"), ITE(Bop(Bit,Var("bytemask",F4),LN 0), Let(TP[Var("v",CTy"PSR"),qVar"s"], Apply (Const ("SPSR",ATy(qTy,PTy(CTy"PSR",qTy))), qVar"s"), Let(TP[bVar"v",qVar"s"], Let(qVar"s0", Apply (Call ("write'SPSR",ATy(qTy,qTy), Call ("write'reg'PSR", CTy"PSR", TP[Var("v",CTy"PSR"), BFI(LN 7,LN 5, EX(Var("value", F32), LN 7,LN 5, FTy 3), Call ("reg'PSR", F32, Var("v", CTy"PSR")))])), qVar"s"), TP[Apply (Call ("BadMode",ATy(qTy,bTy), EX(Var("value",F32), LN 4,LN 0,FTy 5)), qVar"s0"),qVar"s0"]), ITE(bVar"v", Mop(Snd, Apply (Call ("raise'exception", ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE", CTy"exception", CC[LS "SPSRWriteByInstr: BadMode: ", Mop(Cast sTy, EX(Var("value", F32), LN 4, LN 0, FTy 5))])), qVar"s")), Let(TP[Var("v",CTy"PSR"),qVar"s"], Apply (Const ("SPSR", ATy(qTy, PTy(CTy"PSR",qTy))), qVar"s"), Apply (Call ("write'SPSR", ATy(qTy,qTy), Call ("write'reg'PSR", CTy"PSR", TP[Var("v",CTy"PSR"), BFI(LN 4,LN 0, EX(Var("value", F32), LN 4, LN 0, FTy 5), Call ("reg'PSR", F32, Var("v", CTy"PSR")))])), qVar"s"))))),qVar"s")))))))) ; val RBankSelect_def = Def ("RBankSelect", TP[Var("mode",FTy 5),Var("usr",CTy"RName"),Var("fiq",CTy"RName"), Var("irq",CTy"RName"),Var("svc",CTy"RName"),Var("abt",CTy"RName"), Var("und",CTy"RName"),Var("mon",CTy"RName"),Var("hyp",CTy"RName")], Close (qVar"state", ITE(Apply (Call("BadMode",ATy(qTy,bTy),Var("mode",FTy 5)),qVar"state"), Apply (Call ("raise'exception",ATy(qTy,PTy(CTy"RName",qTy)), Call ("UNPREDICTABLE",CTy"exception", CC[LS"RBankSelect: BadMode", Mop(Cast sTy,Var("mode",FTy 5))])),qVar"state"), TP[CS(Var("mode",FTy 5), [(LW(16,5),Var("usr",CTy"RName")), (LW(17,5),Var("fiq",CTy"RName")), (LW(18,5),Var("irq",CTy"RName")), (LW(19,5),Var("svc",CTy"RName")), (LW(22,5),Var("mon",CTy"RName")), (LW(23,5),Var("abt",CTy"RName")), (LW(26,5),Var("hyp",CTy"RName")), (LW(27,5),Var("und",CTy"RName")), (LW(31,5),Var("usr",CTy"RName"))]),qVar"state"]))) ; val RfiqBankSelect_def = Def ("RfiqBankSelect", TP[Var("mode",FTy 5),Var("usr",CTy"RName"),Var("fiq",CTy"RName")], Close (qVar"state", Apply (Call ("RBankSelect",ATy(qTy,PTy(CTy"RName",qTy)), TP[Var("mode",FTy 5),Var("usr",CTy"RName"), Var("fiq",CTy"RName"),Var("usr",CTy"RName"), Var("usr",CTy"RName"),Var("usr",CTy"RName"), Var("usr",CTy"RName"),Var("usr",CTy"RName"), Var("usr",CTy"RName")]),qVar"state"))) ; val LookUpRName_def = Def ("LookUpRName",TP[Var("n",F4),Var("mode",FTy 5)], Close (qVar"state", CS(Var("n",F4), [(LW(0,4),TP[LC("RName_0usr",CTy"RName"),qVar"state"]), (LW(1,4),TP[LC("RName_1usr",CTy"RName"),qVar"state"]), (LW(2,4),TP[LC("RName_2usr",CTy"RName"),qVar"state"]), (LW(3,4),TP[LC("RName_3usr",CTy"RName"),qVar"state"]), (LW(4,4),TP[LC("RName_4usr",CTy"RName"),qVar"state"]), (LW(5,4),TP[LC("RName_5usr",CTy"RName"),qVar"state"]), (LW(6,4),TP[LC("RName_6usr",CTy"RName"),qVar"state"]), (LW(7,4),TP[LC("RName_7usr",CTy"RName"),qVar"state"]), (LW(8,4), Apply (Call ("RfiqBankSelect",ATy(qTy,PTy(CTy"RName",qTy)), TP[Var("mode",FTy 5),LC("RName_8usr",CTy"RName"), LC("RName_8fiq",CTy"RName")]),qVar"state")), (LW(9,4), Apply (Call ("RfiqBankSelect",ATy(qTy,PTy(CTy"RName",qTy)), TP[Var("mode",FTy 5),LC("RName_9usr",CTy"RName"), LC("RName_9fiq",CTy"RName")]),qVar"state")), (LW(10,4), Apply (Call ("RfiqBankSelect",ATy(qTy,PTy(CTy"RName",qTy)), TP[Var("mode",FTy 5),LC("RName_10usr",CTy"RName"), LC("RName_10fiq",CTy"RName")]),qVar"state")), (LW(11,4), Apply (Call ("RfiqBankSelect",ATy(qTy,PTy(CTy"RName",qTy)), TP[Var("mode",FTy 5),LC("RName_11usr",CTy"RName"), LC("RName_11fiq",CTy"RName")]),qVar"state")), (LW(12,4), Apply (Call ("RfiqBankSelect",ATy(qTy,PTy(CTy"RName",qTy)), TP[Var("mode",FTy 5),LC("RName_12usr",CTy"RName"), LC("RName_12fiq",CTy"RName")]),qVar"state")), (LW(13,4), Apply (Call ("RBankSelect",ATy(qTy,PTy(CTy"RName",qTy)), TP[Var("mode",FTy 5),LC("RName_SPusr",CTy"RName"), LC("RName_SPfiq",CTy"RName"), LC("RName_SPirq",CTy"RName"), LC("RName_SPsvc",CTy"RName"), LC("RName_SPabt",CTy"RName"), LC("RName_SPund",CTy"RName"), LC("RName_SPmon",CTy"RName"), LC("RName_SPhyp",CTy"RName")]),qVar"state")), (LW(14,4), Apply (Call ("RBankSelect",ATy(qTy,PTy(CTy"RName",qTy)), TP[Var("mode",FTy 5),LC("RName_LRusr",CTy"RName"), LC("RName_LRfiq",CTy"RName"), LC("RName_LRirq",CTy"RName"), LC("RName_LRsvc",CTy"RName"), LC("RName_LRabt",CTy"RName"), LC("RName_LRund",CTy"RName"), LC("RName_LRmon",CTy"RName"), LC("RName_LRusr",CTy"RName")]),qVar"state")), (LW(15,4), Apply (Call ("raise'exception",ATy(qTy,PTy(CTy"RName",qTy)), Call ("ASSERT",CTy"exception", LS"LookUpRName: n >= 0 and n <= 14")),qVar"state"))]))) ; val Rmode_def = Def ("Rmode",TP[Var("n",F4),Var("mode",FTy 5)], Close (qVar"state", Let(bVar"v", Mop(Not,Apply(Call("IsSecure",ATy(qTy,bTy),LU),qVar"state")), Let(qVar"s", ITE(Bop(And,bVar"v",EQ(Var("mode",FTy 5),LW(22,5))), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("UNPREDICTABLE",CTy"exception",LS"Rmode")), qVar"state")),qVar"state"), Let(qVar"s", ITE(Bop(And,bVar"v", Bop(And,EQ(Var("mode",FTy 5),LW(17,5)), Dest ("RFR",bTy, Dest ("NSACR",CTy"NSACR", Dest("CP15",CTy"CP15",qVar"s"))))), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"Rmode")),qVar"s")),qVar"s"), Let(TP[Var("v0",CTy"RName"),qVar"s0"], Apply (Call ("LookUpRName",ATy(qTy,PTy(CTy"RName",qTy)), TP[Var("n",F4),Var("mode",FTy 5)]),qVar"s"), TP[Apply (Dest("REG",ATy(CTy"RName",F32),qVar"s"), Var("v0",CTy"RName")),qVar"s0"])))))) ; val write'Rmode_def = Def ("write'Rmode",TP[Var("value",F32),Var("n",F4),Var("mode",FTy 5)], Close (qVar"state", Let(bVar"v", Mop(Not,Apply(Call("IsSecure",ATy(qTy,bTy),LU),qVar"state")), Let(qVar"s", ITE(Bop(And,bVar"v",EQ(Var("mode",FTy 5),LW(22,5))), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("UNPREDICTABLE",CTy"exception",LS"Rmode")), qVar"state")),qVar"state"), Let(qVar"s", ITE(Bop(And,bVar"v", Bop(And,EQ(Var("mode",FTy 5),LW(17,5)), Dest ("RFR",bTy, Dest ("NSACR",CTy"NSACR", Dest("CP15",CTy"CP15",qVar"s"))))), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"Rmode")),qVar"s")),qVar"s"), Let(TP[Var("v",CTy"RName"),qVar"s"], Apply (Call ("LookUpRName",ATy(qTy,PTy(CTy"RName",qTy)), TP[Var("n",F4),Var("mode",FTy 5)]), ITE(Bop(And,EQ(Var("n",F4),LW(13,4)), Bop(And, Mop(Not, EQ(EX(Var("value",F32),LN 1,LN 0, FTy 2),LW(0,2))), Mop(Not, EQ(Apply (Call ("CurrentInstrSet", ATy(qTy,CTy"InstrSet"), LU),qVar"s"), LC("InstrSet_ARM", CTy"InstrSet"))))), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"Rmode")),qVar"s")),qVar"s")), Rupd ("REG", TP[qVar"s", Fupd (Dest("REG",ATy(CTy"RName",F32),qVar"s"), Var("v",CTy"RName"),Var("value",F32))]))))))) ; val R_def = Def ("R",Var("n",F4), Close (qVar"state", ITE(EQ(Var("n",F4),LW(15,4)), TP[Bop(Add, Apply (Dest("REG",ATy(CTy"RName",F32),qVar"state"), LC("RName_PC",CTy"RName")), ITE(EQ(Apply (Call ("CurrentInstrSet",ATy(qTy,CTy"InstrSet"),LU), qVar"state"),LC("InstrSet_ARM",CTy"InstrSet")), LW(8,32),LW(4,32))),qVar"state"], Apply (Call ("Rmode",ATy(qTy,PTy(F32,qTy)), TP[Var("n",F4), Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state"))]), qVar"state")))) ; val write'R_def = Def ("write'R",TP[Var("value",F32),Var("n",F4)], Close (qVar"state", Apply (Call ("write'Rmode",ATy(qTy,qTy), TP[Var("value",F32),Var("n",F4), Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state"))]), qVar"state"))) ; val SP_def = Def ("SP",qVar"state", Apply(Call("R",ATy(qTy,PTy(F32,qTy)),LW(13,4)),qVar"state")) ; val write'SP_def = Def ("write'SP",Var("value",F32), Close (qVar"state", Apply (Call("write'R",ATy(qTy,qTy),TP[Var("value",F32),LW(13,4)]), qVar"state"))) ; val LR_def = Def ("LR",qVar"state", Apply(Call("R",ATy(qTy,PTy(F32,qTy)),LW(14,4)),qVar"state")) ; val write'LR_def = Def ("write'LR",Var("value",F32), Close (qVar"state", Apply (Call("write'R",ATy(qTy,qTy),TP[Var("value",F32),LW(14,4)]), qVar"state"))) ; val PC_def = Def ("PC",qVar"state", Apply(Call("R",ATy(qTy,PTy(F32,qTy)),LW(15,4)),qVar"state")) ; val BranchTo_def = Def ("BranchTo",Var("address",F32), Close (qVar"state", Rupd ("REG", TP[qVar"state", Fupd (Dest("REG",ATy(CTy"RName",F32),qVar"state"), LC("RName_PC",CTy"RName"),Var("address",F32))]))) ; val PCStoreValue_def = Def ("PCStoreValue",AVar uTy, Close(qVar"state",Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"))) ; val BranchWritePC_def = Def ("BranchWritePC",Var("address",F32), Close (qVar"state", ITE(EQ(Apply (Call("CurrentInstrSet",ATy(qTy,CTy"InstrSet"),LU), qVar"state"),LC("InstrSet_ARM",CTy"InstrSet")), Apply (Call ("BranchTo",ATy(qTy,qTy), CC[EX(Var("address",F32),LN 31,LN 2,FTy 30),LW(0,2)]), ITE(Bop(And, Bop(Lt, Apply (Call("ArchVersion",ATy(qTy,nTy),LU), qVar"state"),LN 6), Mop(Not, EQ(EX(Var("address",F32),LN 1,LN 0,FTy 2),LW(0,2)))), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"BranchWritePC")),qVar"state")), qVar"state")), Apply (Call ("BranchTo",ATy(qTy,qTy), CC[EX(Var("address",F32),LN 31,LN 1,FTy 31),LW(0,1)]), qVar"state")))) ; val BXWritePC_def = Def ("BXWritePC",Var("address",F32), Close (qVar"state", ITB([(EQ(Apply (Call("CurrentInstrSet",ATy(qTy,CTy"InstrSet"),LU), qVar"state"),LC("InstrSet_ThumbEE",CTy"InstrSet")), ITE(Bop(Bit,Var("address",F32),LN 0), Apply (Call ("BranchTo",ATy(qTy,qTy), CC[EX(Var("address",F32),LN 31,LN 1,FTy 31),LW(0,1)]), qVar"state"), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception",LS"BXWritePC")), qVar"state")))), (Bop(Bit,Var("address",F32),LN 0), Apply (Call ("BranchTo",ATy(qTy,qTy), CC[EX(Var("address",F32),LN 31,LN 1,FTy 31),LW(0,1)]), Apply (Call ("SelectInstrSet",ATy(qTy,qTy), LC("InstrSet_Thumb",CTy"InstrSet")),qVar"state"))), (Mop(Not,Bop(Bit,Var("address",F32),LN 1)), Apply (Call("BranchTo",ATy(qTy,qTy),Var("address",F32)), Apply (Call ("SelectInstrSet",ATy(qTy,qTy), LC("InstrSet_ARM",CTy"InstrSet")),qVar"state")))], Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("UNPREDICTABLE",CTy"exception",LS"BXWritePC")), qVar"state"))))) ; val LoadWritePC_def = Def ("LoadWritePC",Var("address",F32), Close (qVar"state", ITE(Bop(Ge,Apply(Call("ArchVersion",ATy(qTy,nTy),LU),qVar"state"), LN 5), Apply (Call("BXWritePC",ATy(qTy,qTy),Var("address",F32)),qVar"state"), Apply (Call("BranchWritePC",ATy(qTy,qTy),Var("address",F32)), qVar"state")))) ; val ALUWritePC_def = Def ("ALUWritePC",Var("address",F32), Close (qVar"state", ITE(Bop(And, Bop(Ge, Apply(Call("ArchVersion",ATy(qTy,nTy),LU),qVar"state"), LN 7), EQ(Apply (Call("CurrentInstrSet",ATy(qTy,CTy"InstrSet"),LU), qVar"state"),LC("InstrSet_ARM",CTy"InstrSet"))), Apply (Call("BXWritePC",ATy(qTy,qTy),Var("address",F32)),qVar"state"), Apply (Call("BranchWritePC",ATy(qTy,qTy),Var("address",F32)), qVar"state")))) ; val ThisInstrLength_def = Def ("ThisInstrLength",AVar uTy, Close (qVar"state", ITE(EQ(Dest("Encoding",CTy"Encoding",qVar"state"), LC("Encoding_Thumb",CTy"Encoding")),LN 16,LN 32))) ; val IncPC_def = Def ("IncPC",AVar uTy, Close (qVar"state", Apply (Call ("BranchTo",ATy(qTy,qTy), Bop(Add, Apply (Dest("REG",ATy(CTy"RName",F32),qVar"state"), LC("RName_PC",CTy"RName")), ITE(EQ(Apply (Call("ThisInstrLength",ATy(qTy,nTy),LU), qVar"state"),LN 16),LW(2,32),LW(4,32)))), qVar"state"))) ; val mem1_def = Def ("mem1",Var("address",F32), Close (qVar"state", Mop(Cast vTy, Apply(Dest("MEM",ATy(F32,F8),qVar"state"),Var("address",F32))))) ; val mem_def = Def ("mem",TP[Var("address",F32),nVar"size"], Close (qVar"state", CS(nVar"size", [(LN 1, TP[EX(Apply (Call ("mem1",ATy(qTy,vTy), Bop(Add,Var("address",F32),LW(0,32))),qVar"state"), LN 7,LN 0,vTy),qVar"state"]), (LN 2, TP[EX(CC[Apply (Call ("mem1",ATy(qTy,vTy), Bop(Add,Var("address",F32),LW(1,32))), qVar"state"), Apply (Call ("mem1",ATy(qTy,vTy), Bop(Add,Var("address",F32),LW(0,32))), qVar"state")],LN 15,LN 0,vTy),qVar"state"]), (LN 4, TP[EX(CC[Apply (Call ("mem1",ATy(qTy,vTy), Bop(Add,Var("address",F32),LW(3,32))), qVar"state"), Apply (Call ("mem1",ATy(qTy,vTy), Bop(Add,Var("address",F32),LW(2,32))), qVar"state"), Apply (Call ("mem1",ATy(qTy,vTy), Bop(Add,Var("address",F32),LW(1,32))), qVar"state"), Apply (Call ("mem1",ATy(qTy,vTy), Bop(Add,Var("address",F32),LW(0,32))), qVar"state")],LN 31,LN 0,vTy),qVar"state"]), (LN 8, TP[EX(CC[Apply (Call ("mem1",ATy(qTy,vTy), Bop(Add,Var("address",F32),LW(7,32))), qVar"state"), Apply (Call ("mem1",ATy(qTy,vTy), Bop(Add,Var("address",F32),LW(6,32))), qVar"state"), Apply (Call ("mem1",ATy(qTy,vTy), Bop(Add,Var("address",F32),LW(5,32))), qVar"state"), Apply (Call ("mem1",ATy(qTy,vTy), Bop(Add,Var("address",F32),LW(4,32))), qVar"state"), Apply (Call ("mem1",ATy(qTy,vTy), Bop(Add,Var("address",F32),LW(3,32))), qVar"state"), Apply (Call ("mem1",ATy(qTy,vTy), Bop(Add,Var("address",F32),LW(2,32))), qVar"state"), Apply (Call ("mem1",ATy(qTy,vTy), Bop(Add,Var("address",F32),LW(1,32))), qVar"state"), Apply (Call ("mem1",ATy(qTy,vTy), Bop(Add,Var("address",F32),LW(0,32))), qVar"state")],LN 63,LN 0,vTy),qVar"state"]), (AVar nTy, Apply (Call ("raise'exception",ATy(qTy,PTy(vTy,qTy)), Call ("ASSERT",CTy"exception",LS"mem: size in {1, 2, 4, 8}")), qVar"state"))]))) ; val write'mem_def = Def ("write'mem",TP[vVar"value",Var("address",F32),nVar"size"], Close (qVar"state", CS(nVar"size", [(LN 1, Rupd ("MEM", TP[qVar"state", Fupd (Dest("MEM",ATy(F32,F8),qVar"state"), Bop(Add,Var("address",F32),LW(0,32)), Mop(Cast F8,EX(vVar"value",LN 7,LN 0,vTy)))])), (LN 2, Let(qVar"s", Rupd ("MEM", TP[qVar"state", Fupd (Dest("MEM",ATy(F32,F8),qVar"state"), Bop(Add,Var("address",F32),LW(0,32)), Mop(Cast F8,EX(vVar"value",LN 7,LN 0,vTy)))]), Rupd ("MEM", TP[qVar"s", Fupd (Dest("MEM",ATy(F32,F8),qVar"s"), Bop(Add,Var("address",F32),LW(1,32)), Mop(Cast F8,EX(vVar"value",LN 15,LN 8,vTy)))]))), (LN 4, Let(qVar"s", Rupd ("MEM", TP[qVar"state", Fupd (Dest("MEM",ATy(F32,F8),qVar"state"), Bop(Add,Var("address",F32),LW(0,32)), Mop(Cast F8,EX(vVar"value",LN 7,LN 0,vTy)))]), Let(qVar"s", Rupd ("MEM", TP[qVar"s", Fupd (Dest("MEM",ATy(F32,F8),qVar"s"), Bop(Add,Var("address",F32),LW(1,32)), Mop(Cast F8,EX(vVar"value",LN 15,LN 8,vTy)))]), Let(qVar"s", Rupd ("MEM", TP[qVar"s", Fupd (Dest("MEM",ATy(F32,F8),qVar"s"), Bop(Add,Var("address",F32),LW(2,32)), Mop(Cast F8, EX(vVar"value",LN 23,LN 16,vTy)))]), Rupd ("MEM", TP[qVar"s", Fupd (Dest("MEM",ATy(F32,F8),qVar"s"), Bop(Add,Var("address",F32),LW(3,32)), Mop(Cast F8, EX(vVar"value",LN 31,LN 24,vTy)))]))))), (LN 8, Let(qVar"s", Rupd ("MEM", TP[qVar"state", Fupd (Dest("MEM",ATy(F32,F8),qVar"state"), Bop(Add,Var("address",F32),LW(0,32)), Mop(Cast F8,EX(vVar"value",LN 7,LN 0,vTy)))]), Let(qVar"s", Rupd ("MEM", TP[qVar"s", Fupd (Dest("MEM",ATy(F32,F8),qVar"s"), Bop(Add,Var("address",F32),LW(1,32)), Mop(Cast F8,EX(vVar"value",LN 15,LN 8,vTy)))]), Let(qVar"s", Rupd ("MEM", TP[qVar"s", Fupd (Dest("MEM",ATy(F32,F8),qVar"s"), Bop(Add,Var("address",F32),LW(2,32)), Mop(Cast F8, EX(vVar"value",LN 23,LN 16,vTy)))]), Let(qVar"s", Rupd ("MEM", TP[qVar"s", Fupd (Dest("MEM",ATy(F32,F8),qVar"s"), Bop(Add,Var("address",F32),LW(3,32)), Mop(Cast F8, EX(vVar"value",LN 31,LN 24,vTy)))]), Let(qVar"s", Rupd ("MEM", TP[qVar"s", Fupd (Dest("MEM",ATy(F32,F8),qVar"s"), Bop(Add,Var("address",F32), LW(4,32)), Mop(Cast F8, EX(vVar"value",LN 39,LN 32,vTy)))]), Let(qVar"s", Rupd ("MEM", TP[qVar"s", Fupd (Dest ("MEM",ATy(F32,F8),qVar"s"), Bop(Add,Var("address",F32), LW(5,32)), Mop(Cast F8, EX(vVar"value",LN 47, LN 40,vTy)))]), Let(qVar"s", Rupd ("MEM", TP[qVar"s", Fupd (Dest ("MEM",ATy(F32,F8), qVar"s"), Bop(Add, Var("address",F32), LW(6,32)), Mop(Cast F8, EX(vVar"value",LN 55, LN 48,vTy)))]), Rupd ("MEM", TP[qVar"s", Fupd (Dest ("MEM",ATy(F32,F8), qVar"s"), Bop(Add, Var("address",F32), LW(7,32)), Mop(Cast F8, EX(vVar"value",LN 63, LN 56,vTy)))]))))))))), (AVar nTy, Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("ASSERT",CTy"exception", LS"mem: size in {1, 2, 4, 8}")),qVar"state")))]))) ; val BigEndianReverse_def = Def ("BigEndianReverse",TP[vVar"value",nVar"n"], Close (qVar"state", CS(nVar"n", [(LN 1,TP[EX(vVar"value",LN 7,LN 0,vTy),qVar"state"]), (LN 2, TP[CC[EX(vVar"value",LN 7,LN 0,vTy), EX(vVar"value",LN 15,LN 8,vTy)],qVar"state"]), (LN 4, TP[CC[EX(vVar"value",LN 7,LN 0,vTy), EX(vVar"value",LN 15,LN 8,vTy), EX(vVar"value",LN 23,LN 16,vTy), EX(vVar"value",LN 31,LN 24,vTy)],qVar"state"]), (LN 8, TP[CC[EX(vVar"value",LN 7,LN 0,vTy), EX(vVar"value",LN 15,LN 8,vTy), EX(vVar"value",LN 23,LN 16,vTy), EX(vVar"value",LN 31,LN 24,vTy), EX(vVar"value",LN 39,LN 32,vTy), EX(vVar"value",LN 47,LN 40,vTy), EX(vVar"value",LN 55,LN 48,vTy), EX(vVar"value",LN 63,LN 56,vTy)],qVar"state"]), (AVar nTy, Apply (Call ("raise'exception",ATy(qTy,PTy(vTy,qTy)), Call ("ASSERT",CTy"exception", LS"BigEndianReverse: n in {1, 2, 4, 8}")),qVar"state"))]))) ; 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 MemA_with_priv_def = Def ("MemA_with_priv",TP[Var("address",F32),nVar"size",bVar"privileged"], Close (qVar"state", Let(TP[Var("r",BTy"N"),Var("s1",PTy(F32,qTy))], Let(Var("s",PTy(F32,qTy)), ITB([(Call("Aligned",bTy,TP[Var("address",F32),nVar"size"]), TP[Var("address",F32),qVar"state"]), (Bop(Or, Dest ("A",bTy, Dest ("SCTLR",CTy"SCTLR", Dest("CP15",CTy"CP15",qVar"state"))), Dest ("U",bTy, Dest ("SCTLR",CTy"SCTLR", Dest("CP15",CTy"CP15",qVar"state")))), TP[LX F32, Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("AlignmentFault",CTy"exception", Var("address",F32))),qVar"state"))])], TP[Call("Align",F32,TP[Var("address",F32),nVar"size"]), qVar"state"]), Let(TP[vVar"v",Var("s",PTy(F32,qTy))], Let(TP[vVar"v",qVar"s3"], Apply (Call ("mem",ATy(qTy,PTy(vTy,qTy)), TP[Mop(Fst,Var("s",PTy(F32,qTy))),nVar"size"]), Mop(Snd,Var("s",PTy(F32,qTy)))), TP[vVar"v",Mop(Fst,Var("s",PTy(F32,qTy))),qVar"s3"]), Let(TP[Var("r",BTy"N"),Var("s1",PTy(vTy,PTy(F32,qTy)))], Let(Var("s0",PTy(vTy,PTy(F32,qTy))), TP[vVar"v",Var("s",PTy(F32,qTy))], Let(Var("s",PTy(vTy,PTy(F32,qTy))), ITE(Dest ("E",bTy, Dest ("CPSR",CTy"PSR", Mop(Snd,Var("s",PTy(F32,qTy))))), Let(TP[vVar"v", Var("s",PTy(vTy,PTy(F32,qTy)))], CS(Let(TP[vVar"v",qVar"s3"], Apply (Call ("BigEndianReverse", ATy(qTy,PTy(vTy,qTy)), TP[Mop(Fst, Var("s0", PTy(vTy, PTy(F32, qTy)))), nVar"size"]), Mop(Snd, Mop(Snd, Var("s0", PTy(vTy, PTy(F32, qTy)))))), TP[vVar"v", Mop(Fst, Mop(Snd, Var("s0", PTy(vTy, PTy(F32, qTy))))), qVar"s3"]), [(TP[vVar"v", Var("s3",PTy(F32,qTy))], TP[vVar"v", Mop(Fst, Var("s0", PTy(vTy,PTy(F32,qTy)))), Var("s3",PTy(F32,qTy))])]), TP[vVar"v", Mop(Snd, Var("s",PTy(vTy,PTy(F32,qTy))))]), Var("s0",PTy(vTy,PTy(F32,qTy)))), TP[Mop(Cast(BTy"N"), Mop(Fst, Var("s",PTy(vTy,PTy(F32,qTy))))), Var("s",PTy(vTy,PTy(F32,qTy)))])), TP[Var("r",BTy"N"), Mop(Snd,Var("s1",PTy(vTy,PTy(F32,qTy))))]))), TP[Var("r",BTy"N"),Mop(Snd,Var("s1",PTy(F32,qTy)))]))) ; val write'MemA_with_priv_def = Def ("write'MemA_with_priv", TP[Var("value",BTy"N"),Var("address",F32),nVar"size",bVar"privileged"], Close (qVar"state", Let(Var("s",PTy(F32,qTy)), ITB([(Call("Aligned",bTy,TP[Var("address",F32),nVar"size"]), TP[Var("address",F32),qVar"state"]), (Bop(Or, Dest ("A",bTy, Dest ("SCTLR",CTy"SCTLR", Dest("CP15",CTy"CP15",qVar"state"))), Dest ("U",bTy, Dest ("SCTLR",CTy"SCTLR", Dest("CP15",CTy"CP15",qVar"state")))), TP[LX F32, Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("AlignmentFault",CTy"exception", Var("address",F32))),qVar"state"))])], TP[Call("Align",F32,TP[Var("address",F32),nVar"size"]), qVar"state"]), Let(TP[vVar"v",Var("s",PTy(F32,qTy))], ITE(Dest ("E",bTy, Dest("CPSR",CTy"PSR",Mop(Snd,Var("s",PTy(F32,qTy))))), Let(TP[vVar"v",qVar"s3"], Apply (Call ("BigEndianReverse",ATy(qTy,PTy(vTy,qTy)), TP[Mop(Cast vTy,Var("value",BTy"N")), nVar"size"]),Mop(Snd,Var("s",PTy(F32,qTy)))), TP[vVar"v",Mop(Fst,Var("s",PTy(F32,qTy))),qVar"s3"]), TP[Mop(Cast vTy,Var("value",BTy"N")), Var("s",PTy(F32,qTy))]), Apply (Call ("write'mem",ATy(qTy,qTy), TP[vVar"v",Mop(Fst,Var("s",PTy(F32,qTy))),nVar"size"]), Mop(Snd,Var("s",PTy(F32,qTy)))))))) ; val MemA_unpriv_def = Def ("MemA_unpriv",TP[Var("address",F32),nVar"size"], Close (qVar"state", Apply (Call ("MemA_with_priv",ATy(qTy,PTy(BTy"N",qTy)), TP[Var("address",F32),nVar"size",LF]),qVar"state"))) ; val write'MemA_unpriv_def = Def ("write'MemA_unpriv", TP[Var("value",BTy"N"),Var("address",F32),nVar"size"], Close (qVar"state", Apply (Call ("write'MemA_with_priv",ATy(qTy,qTy), TP[Var("value",BTy"N"),Var("address",F32),nVar"size",LF]), qVar"state"))) ; val MemA_def = Def ("MemA",TP[Var("address",F32),nVar"size"], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU), qVar"state"), Apply (Call ("MemA_with_priv",ATy(qTy,PTy(BTy"N",qTy)), TP[Var("address",F32),nVar"size",bVar"v"]),qVar"s")))) ; val write'MemA_def = Def ("write'MemA",TP[Var("value",BTy"N"),Var("address",F32),nVar"size"], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU), qVar"state"), Apply (Call ("write'MemA_with_priv",ATy(qTy,qTy), TP[Var("value",BTy"N"),Var("address",F32),nVar"size", bVar"v"]),qVar"s")))) ; val MemU_with_priv_def = Def ("MemU_with_priv",TP[Var("address",F32),nVar"size",bVar"privileged"], Close (qVar"state", Let(TP[Var("r",BTy"N"),Var("s1",PTy(vTy,qTy))], Let(vVar"s0",Bop(Rep,LV"0",LN 64), Let(Var("v",F32), ITE(Bop(And, Mop(Not, Dest ("A",bTy, Dest ("SCTLR",CTy"SCTLR", Dest("CP15",CTy"CP15",qVar"state")))), Mop(Not, Dest ("U",bTy, Dest ("SCTLR",CTy"SCTLR", Dest("CP15",CTy"CP15",qVar"state"))))), Call("Align",F32,TP[Var("address",F32),nVar"size"]), Var("address",F32)), Let(Var("s",PTy(vTy,qTy)), ITB([(Call ("Aligned",bTy,TP[Var("v",F32),nVar"size"]), Let(TP[Var("v",BTy"N"),Var("s",PTy(vTy,qTy))], Let(TP[Var("v",BTy"N"),qVar"s3"], Apply (Call ("MemA_with_priv", ATy(qTy,PTy(BTy"N",qTy)), TP[Var("v",F32),nVar"size", bVar"privileged"]), qVar"state"), TP[Var("v",BTy"N"),vVar"s0",qVar"s3"]), TP[Mop(Cast vTy,Var("v",BTy"N")), Mop(Snd,Var("s",PTy(vTy,qTy)))])), (Dest ("A",bTy, Dest ("SCTLR",CTy"SCTLR", Dest("CP15",CTy"CP15",qVar"state"))), TP[vVar"s0", Mop(Snd, Apply (Call ("raise'exception", ATy(qTy,PTy(uTy,qTy)), Call ("AlignmentFault", CTy"exception", Var("address",F32))), qVar"state"))])], 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)), Let(TP[vVar"v", Var("s", PTy(vTy,qTy))], Let(TP[Var("v0",F8), Var("s", PTy(vTy, qTy))], Let(TP[Var("v", F8), qVar"s3"], Apply (Call ("MemA_with_priv", ATy(qTy, PTy(F8, qTy)), TP[Bop(Add, Var("v", F32), Mop(Cast F32, nVar"i")), LN 1, bVar"privileged"]), Mop(Snd, Var("state", PTy(vTy, qTy)))), TP[Var("v", F8), Mop(Fst, Var("state", PTy(vTy, qTy))), qVar"s3"]), TP[BFI(Bop(Add, Bop(Mul, LN 8, nVar"i"), LN 7), Bop(Mul, LN 8, nVar"i"), Mop(Cast vTy, Var("v0", F8)), Mop(Fst, Var("state", PTy(vTy, qTy)))), Var("s", PTy(vTy, qTy))]), TP[LU,vVar"v", Mop(Snd, Var("s", PTy(vTy, qTy)))])))]), TP[vVar"s0",qVar"state"])), ITE(Dest ("E",bTy, Dest ("CPSR",CTy"PSR", Mop(Snd,Var("s",PTy(vTy,qTy))))), Let(TP[vVar"v",Var("s",PTy(vTy,qTy))], CS(Apply (Call ("BigEndianReverse", ATy(qTy,PTy(vTy,qTy)), TP[Mop(Fst, Var("s",PTy(vTy,qTy))), nVar"size"]), Mop(Snd,Var("s",PTy(vTy,qTy)))), [(TP[vVar"v",qVar"s3"], TP[vVar"v", Mop(Fst, Var("s",PTy(vTy,qTy))), qVar"s3"])]), TP[vVar"v", Mop(Snd,Var("s",PTy(vTy,qTy)))]), Var("s",PTy(vTy,qTy))))), TP[Mop(Cast(BTy"N"),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'MemU_with_priv_def = Def ("write'MemU_with_priv", TP[Var("value",BTy"N"),Var("address",F32),nVar"size",bVar"privileged"], Close (qVar"state", Let(Var("v",F32), ITE(Bop(And, Mop(Not, Dest ("A",bTy, Dest ("SCTLR",CTy"SCTLR", Dest("CP15",CTy"CP15",qVar"state")))), Mop(Not, Dest ("U",bTy, Dest ("SCTLR",CTy"SCTLR", Dest("CP15",CTy"CP15",qVar"state"))))), Call("Align",F32,TP[Var("address",F32),nVar"size"]), Var("address",F32)), ITB([(Call("Aligned",bTy,TP[Var("v",F32),nVar"size"]), Apply (Call ("write'MemA_with_priv",ATy(qTy,qTy), TP[Var("value",BTy"N"),Var("v",F32),nVar"size", bVar"privileged"]),qVar"state")), (Dest ("A",bTy, Dest ("SCTLR",CTy"SCTLR", Dest("CP15",CTy"CP15",qVar"state"))), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("AlignmentFault",CTy"exception", Var("address",F32))),qVar"state")))], Let(TP[vVar"v0",qVar"s"], ITE(Dest("E",bTy,Dest("CPSR",CTy"PSR",qVar"state")), Apply (Call ("BigEndianReverse",ATy(qTy,PTy(vTy,qTy)), TP[Mop(Cast vTy,Var("value",BTy"N")), nVar"size"]),qVar"state"), TP[Mop(Cast vTy,Var("value",BTy"N")),qVar"state"]), Mop(Snd, Apply (For(TP[LN 0,Bop(Sub,nVar"size",LN 1), Close (nVar"i", Close (qVar"state", TP[LU, Apply (Call ("write'MemA_with_priv", ATy(qTy,qTy), TP[Mop(Cast F8, EX(vVar"v0", Bop(Add, Bop(Mul,LN 8, nVar"i"), LN 7), Bop(Mul,LN 8, nVar"i"),vTy)), Bop(Add,Var("v",F32), Mop(Cast F32,nVar"i")), LN 1,bVar"privileged"]), qVar"state")]))]),qVar"s"))))))) ; val MemU_unpriv_def = Def ("MemU_unpriv",TP[Var("address",F32),nVar"size"], Close (qVar"state", Apply (Call ("MemU_with_priv",ATy(qTy,PTy(BTy"N",qTy)), TP[Var("address",F32),nVar"size",LF]),qVar"state"))) ; val write'MemU_unpriv_def = Def ("write'MemU_unpriv", TP[Var("value",BTy"N"),Var("address",F32),nVar"size"], Close (qVar"state", Apply (Call ("write'MemU_with_priv",ATy(qTy,qTy), TP[Var("value",BTy"N"),Var("address",F32),nVar"size",LF]), qVar"state"))) ; val MemU_def = Def ("MemU",TP[Var("address",F32),nVar"size"], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU), qVar"state"), Apply (Call ("MemU_with_priv",ATy(qTy,PTy(BTy"N",qTy)), TP[Var("address",F32),nVar"size",bVar"v"]),qVar"s")))) ; val write'MemU_def = Def ("write'MemU",TP[Var("value",BTy"N"),Var("address",F32),nVar"size"], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU), qVar"state"), Apply (Call ("write'MemU_with_priv",ATy(qTy,qTy), TP[Var("value",BTy"N"),Var("address",F32),nVar"size", bVar"v"]),qVar"s")))) ; val NullCheckIfThumbEE_def = Def ("NullCheckIfThumbEE",Var("n",F4), Close (qVar"state", Let(TP[bVar"r",Var("s1",PTy(bTy,qTy))], Let(Var("s",PTy(bTy,qTy)), ITE(EQ(Apply (Call("CurrentInstrSet",ATy(qTy,CTy"InstrSet"),LU), qVar"state"),LC("InstrSet_ThumbEE",CTy"InstrSet")), ITB([(EQ(Var("n",F4),LW(15,4)), Let(TP[Var("v",F32),Var("s",PTy(bTy,qTy))], Let(TP[Var("v",F32),qVar"s3"], Apply (Const("PC",ATy(qTy,PTy(F32,qTy))), qVar"state"), TP[Var("v",F32),LF,qVar"s3"]), ITE(EQ(Call("Align",F32,TP[Var("v",F32),LN 4]), LW(0,32)), TP[Mop(Fst,Var("s",PTy(bTy,qTy))), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE", CTy"exception", LS"NullCheckIfThumbEE")), Mop(Snd,Var("s",PTy(bTy,qTy)))))], Var("s",PTy(bTy,qTy))))), (EQ(Var("n",F4),LW(13,4)), Let(TP[Var("v",F32),Var("s",PTy(bTy,qTy))], Let(TP[Var("v",F32),qVar"s3"], Apply (Const("SP",ATy(qTy,PTy(F32,qTy))), qVar"state"), TP[Var("v",F32),LF,qVar"s3"]), ITE(EQ(Var("v",F32),LW(0,32)), TP[Mop(Fst,Var("s",PTy(bTy,qTy))), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE", CTy"exception", LS"NullCheckIfThumbEE")), Mop(Snd,Var("s",PTy(bTy,qTy)))))], Var("s",PTy(bTy,qTy)))))], Let(TP[Var("v",F32),Var("s",PTy(bTy,qTy))], Let(TP[Var("v",F32),qVar"s3"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"state"),TP[Var("v",F32),LF,qVar"s3"]), ITE(EQ(Var("v",F32),LW(0,32)), Let(TP[Var("v",F32),Var("s",PTy(bTy,qTy))], Let(TP[Var("v",F32),qVar"s3"], Apply (Const("PC",ATy(qTy,PTy(F32,qTy))), Mop(Snd,Var("s",PTy(bTy,qTy)))), TP[Var("v",F32), Mop(Fst,Var("s",PTy(bTy,qTy))), qVar"s3"]), Let(qVar"s1", Apply (Call ("write'ITSTATE",ATy(qTy,qTy), LW(0,8)), Apply (Call ("write'LR",ATy(qTy,qTy), CC[EX(Var("v",F32),LN 31, LN 1,FTy 31),LW(1,1)]), Mop(Snd,Var("s",PTy(bTy,qTy))))), TP[LT, Apply (Call ("BranchWritePC", ATy(qTy,qTy), Bop(Sub, Dest ("TEEHBR",F32, Dest ("CP14",CTy"CP14", qVar"s1")), LW(4,32))),qVar"s1")])), Var("s",PTy(bTy,qTy))))),TP[LF,qVar"state"]), TP[Mop(Not,Mop(Fst,Var("s",PTy(bTy,qTy)))), Var("s",PTy(bTy,qTy))]), TP[bVar"r",Mop(Snd,Var("s1",PTy(bTy,qTy)))]))) ; 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 LowestSetBit_def = Def ("LowestSetBit",Var("w",BTy"N"), Call("CountLeadingZeroBits",nTy,Mop(Rev,Var("w",BTy"N")))) ; val BitCount_def = Def ("BitCount",Var("w",BTy"N"), Mop(Fst, Mop(Snd, Apply (For(TP[LN 0,Bop(Sub,Mop(Size,LY(0,"N")),LN 1), Close (nVar"i", Close (Var("state",PTy(nTy,uTy)), TP[LU, ITE(Bop(Bit,Var("w",BTy"N"),nVar"i"), TP[Bop(Add, Mop(Fst,Var("state",PTy(nTy,uTy))), LN 1),LU], Var("state",PTy(nTy,uTy)))]))]), TP[LN 0,LU])))) ; val SignExtendFrom_def = Def ("SignExtendFrom",TP[Var("w",BTy"N"),nVar"p"], Let(nVar"s",Bop(Sub,Bop(Sub,Mop(Size,LY(0,"N")),LN 1),nVar"p"), Bop(Asr,Bop(Lsl,Var("w",BTy"N"),nVar"s"),nVar"s"))) ; val Extend_def = Def ("Extend",TP[bVar"unsigned",Var("w",BTy"M")], ITE(bVar"unsigned",Mop(Cast(BTy"N"),Var("w",BTy"M")), Mop(SE(BTy"N"),Var("w",BTy"M")))) ; val UInt_def = Def ("UInt",Var("w",BTy"N"),Mop(Cast iTy,Mop(Cast nTy,Var("w",BTy"N")))) ; val SignedSatQ_def = Def ("SignedSatQ",TP[iVar"i",nVar"N"], Close (qVar"state", TP[Let(iVar"max",Mop(Cast iTy,Bop(Exp,LN 2,Bop(Sub,nVar"N",LN 1))), ITB([(Bop(Gt,iVar"i",Bop(Sub,iVar"max",LI 1)), TP[Mop(Cast(BTy"M"),Bop(Sub,iVar"max",LI 1)),LT]), (Bop(Lt,iVar"i",Mop(Neg,iVar"max")), TP[Mop(Cast(BTy"M"),Mop(Neg,iVar"max")),LT])], TP[Mop(Cast(BTy"M"),iVar"i"),LF])), ITE(Bop(Lt,Mop(Size,LY(0,"M")),nVar"N"), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("ASSERT",CTy"exception",LS"SignedSatQ: M < N")), qVar"state")),qVar"state")])) ; val UnsignedSatQ_def = Def ("UnsignedSatQ",TP[iVar"i",nVar"N"], Close (qVar"state", TP[Let(iVar"max",Mop(Cast iTy,Bop(Sub,Bop(Exp,LN 2,nVar"N"),LN 1)), ITB([(Bop(Gt,iVar"i",iVar"max"), TP[Mop(Cast(BTy"M"),iVar"max"),LT]), (Bop(Lt,iVar"i",LI 0),TP[LY(0,"M"),LT])], TP[Mop(Cast(BTy"M"),iVar"i"),LF])), ITE(Bop(Lt,Mop(Size,LY(0,"M")),nVar"N"), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("ASSERT",CTy"exception",LS"UnsignedSatQ: M < N")), qVar"state")),qVar"state")])) ; val SatQ_def = Def ("SatQ",TP[iVar"i",nVar"N",bVar"unsigned"], Close (qVar"state", ITE(bVar"unsigned", Apply (Call ("UnsignedSatQ",ATy(qTy,PTy(PTy(BTy"M",bTy),qTy)), TP[iVar"i",nVar"N"]),qVar"state"), Apply (Call ("SignedSatQ",ATy(qTy,PTy(PTy(BTy"M",bTy),qTy)), TP[iVar"i",nVar"N"]),qVar"state")))) ; val SignedSat_def = Def ("SignedSat",TP[iVar"i",nVar"N"], Close (qVar"state", Let(TP[Var("v",PTy(BTy"M",bTy)),qVar"s"], Apply (Call ("SignedSatQ",ATy(qTy,PTy(PTy(BTy"M",bTy),qTy)), TP[iVar"i",nVar"N"]),qVar"state"), TP[Mop(Fst,Var("v",PTy(BTy"M",bTy))),qVar"s"]))) ; val UnsignedSat_def = Def ("UnsignedSat",TP[iVar"i",nVar"N"], Close (qVar"state", Let(TP[Var("v",PTy(BTy"M",bTy)),qVar"s"], Apply (Call ("UnsignedSatQ",ATy(qTy,PTy(PTy(BTy"M",bTy),qTy)), TP[iVar"i",nVar"N"]),qVar"state"), TP[Mop(Fst,Var("v",PTy(BTy"M",bTy))),qVar"s"]))) ; val LSL_C_def = Def ("LSL_C",TP[Var("x",BTy"N"),nVar"shift"], Close (qVar"state", TP[TP[Bop(Lsl,Var("x",BTy"N"),nVar"shift"), Bop(Bit, CC[Mop(Cast vTy,Var("x",BTy"N")), Bop(Rep,LV"0",nVar"shift")],Mop(Size,LY(0,"N")))], ITE(EQ(nVar"shift",LN 0), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("ASSERT",CTy"exception",LS"LSL_C")), qVar"state")),qVar"state")])) ; val LSL_def = Def ("LSL",TP[Var("x",BTy"N"),nVar"shift"], Close (qVar"state", ITE(EQ(nVar"shift",LN 0),TP[Var("x",BTy"N"),qVar"state"], Let(TP[Var("v",PTy(BTy"N",bTy)),qVar"s"], Apply (Call ("LSL_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)), TP[Var("x",BTy"N"),nVar"shift"]),qVar"state"), TP[Mop(Fst,Var("v",PTy(BTy"N",bTy))),qVar"s"])))) ; val LSR_C_def = Def ("LSR_C",TP[Var("x",BTy"N"),nVar"shift"], Close (qVar"state", TP[TP[Bop(Lsr,Var("x",BTy"N"),nVar"shift"), Bop(And,Bop(Le,nVar"shift",Mop(Size,LY(0,"N"))), Bop(Bit,Var("x",BTy"N"),Bop(Sub,nVar"shift",LN 1)))], ITE(EQ(nVar"shift",LN 0), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("ASSERT",CTy"exception",LS"LSR_C")), qVar"state")),qVar"state")])) ; val LSR_def = Def ("LSR",TP[Var("x",BTy"N"),nVar"shift"], Close (qVar"state", ITE(EQ(nVar"shift",LN 0),TP[Var("x",BTy"N"),qVar"state"], Let(TP[Var("v",PTy(BTy"N",bTy)),qVar"s"], Apply (Call ("LSR_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)), TP[Var("x",BTy"N"),nVar"shift"]),qVar"state"), TP[Mop(Fst,Var("v",PTy(BTy"N",bTy))),qVar"s"])))) ; val ASR_C_def = Def ("ASR_C",TP[Var("x",BTy"N"),nVar"shift"], Close (qVar"state", TP[TP[Bop(Asr,Var("x",BTy"N"),nVar"shift"), Bop(Bit,Var("x",BTy"N"), Bop(Sub,Mop(Min,TP[Mop(Size,LY(0,"N")),nVar"shift"]),LN 1))], ITE(EQ(nVar"shift",LN 0), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("ASSERT",CTy"exception",LS"ASR_C")), qVar"state")),qVar"state")])) ; val ASR_def = Def ("ASR",TP[Var("x",BTy"N"),nVar"shift"], Close (qVar"state", ITE(EQ(nVar"shift",LN 0),TP[Var("x",BTy"N"),qVar"state"], Let(TP[Var("v",PTy(BTy"N",bTy)),qVar"s"], Apply (Call ("ASR_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)), TP[Var("x",BTy"N"),nVar"shift"]),qVar"state"), TP[Mop(Fst,Var("v",PTy(BTy"N",bTy))),qVar"s"])))) ; val ROR_C_def = Def ("ROR_C",TP[Var("x",BTy"N"),nVar"shift"], Close (qVar"state", TP[Let(Var("result",BTy"N"),Bop(Ror,Var("x",BTy"N"),nVar"shift"), TP[Var("result",BTy"N"),Mop(Msb,Var("result",BTy"N"))]), ITE(EQ(nVar"shift",LN 0), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call("ASSERT",CTy"exception",LS"ROR_C")), qVar"state")),qVar"state")])) ; val ROR_def = Def ("ROR",TP[Var("x",BTy"N"),nVar"shift"], Close (qVar"state", ITE(EQ(nVar"shift",LN 0),TP[Var("x",BTy"N"),qVar"state"], Let(TP[Var("v",PTy(BTy"N",bTy)),qVar"s"], Apply (Call ("ROR_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)), TP[Var("x",BTy"N"),nVar"shift"]),qVar"state"), TP[Mop(Fst,Var("v",PTy(BTy"N",bTy))),qVar"s"])))) ; val RRX_C_def = Def ("RRX_C",TP[Var("x",BTy"N"),bVar"carry_in"], TP[Mop(Cast(BTy"N"), CC[Mop(Cast vTy,bVar"carry_in"), EX(Mop(Cast vTy,Var("x",BTy"N")), Bop(Sub,Mop(Size,LY(0,"N")),LN 1),LN 1,vTy)]), Bop(Bit,Var("x",BTy"N"),LN 0)]) ; val RRX_def = Def ("RRX",TP[Var("x",BTy"N"),bVar"carry_in"], Mop(Fst, Call("RRX_C",PTy(BTy"N",bTy),TP[Var("x",BTy"N"),bVar"carry_in"]))) ; val DecodeImmShift_def = Def ("DecodeImmShift",TP[Var("typ",FTy 2),Var("imm5",FTy 5)], CS(Var("typ",FTy 2), [(LW(0,2), TP[LC("SRType_LSL",CTy"SRType"),Mop(Cast nTy,Var("imm5",FTy 5))]), (LW(1,2), TP[LC("SRType_LSR",CTy"SRType"), ITE(EQ(Var("imm5",FTy 5),LW(0,5)),LN 32, Mop(Cast nTy,Var("imm5",FTy 5)))]), (LW(2,2), TP[LC("SRType_ASR",CTy"SRType"), ITE(EQ(Var("imm5",FTy 5),LW(0,5)),LN 32, Mop(Cast nTy,Var("imm5",FTy 5)))]), (LW(3,2), ITE(EQ(Var("imm5",FTy 5),LW(0,5)), TP[LC("SRType_RRX",CTy"SRType"),LN 1], TP[LC("SRType_ROR",CTy"SRType"), Mop(Cast nTy,Var("imm5",FTy 5))]))])) ; val DecodeRegShift_def = Def ("DecodeRegShift",Var("typ",FTy 2), CS(Var("typ",FTy 2), [(LW(0,2),LC("SRType_LSL",CTy"SRType")), (LW(1,2),LC("SRType_LSR",CTy"SRType")), (LW(2,2),LC("SRType_ASR",CTy"SRType")), (LW(3,2),LC("SRType_ROR",CTy"SRType"))])) ; val Shift_C_def = Def ("Shift_C", TP[Var("value",BTy"N"),Var("typ",CTy"SRType"),nVar"amount", bVar"carry_in"], Close (qVar"state", ITE(EQ(nVar"amount",LN 0), TP[TP[Var("value",BTy"N"),bVar"carry_in"],qVar"state"], CS(Var("typ",CTy"SRType"), [(LC("SRType_LSL",CTy"SRType"), Apply (Call ("LSL_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)), TP[Var("value",BTy"N"),nVar"amount"]),qVar"state")), (LC("SRType_LSR",CTy"SRType"), Apply (Call ("LSR_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)), TP[Var("value",BTy"N"),nVar"amount"]),qVar"state")), (LC("SRType_ASR",CTy"SRType"), Apply (Call ("ASR_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)), TP[Var("value",BTy"N"),nVar"amount"]),qVar"state")), (LC("SRType_ROR",CTy"SRType"), Apply (Call ("ROR_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)), TP[Var("value",BTy"N"),nVar"amount"]),qVar"state")), (LC("SRType_RRX",CTy"SRType"), TP[Call ("RRX_C",PTy(BTy"N",bTy), TP[Var("value",BTy"N"),bVar"carry_in"]),qVar"state"])])))) ; val Shift_def = Def ("Shift", TP[Var("value",BTy"N"),Var("typ",CTy"SRType"),nVar"amount", bVar"carry_in"], Close (qVar"state", Let(TP[Var("v",PTy(BTy"N",bTy)),qVar"s"], Apply (Call ("Shift_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)), TP[Var("value",BTy"N"),Var("typ",CTy"SRType"), nVar"amount",bVar"carry_in"]),qVar"state"), TP[Mop(Fst,Var("v",PTy(BTy"N",bTy))),qVar"s"]))) ; val ARMExpandImm_C_def = Def ("ARMExpandImm_C",TP[Var("imm12",FTy 12),bVar"carry_in"], Close (qVar"state", Apply (Call ("Shift_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)), TP[Mop(Cast F32,EX(Var("imm12",FTy 12),LN 7,LN 0,F8)), LC("SRType_ROR",CTy"SRType"), Bop(Mul,LN 2, Mop(Cast nTy,EX(Var("imm12",FTy 12),LN 11,LN 8,F4))), bVar"carry_in"]),qVar"state"))) ; val ARMExpandImm_def = Def ("ARMExpandImm",Var("imm12",FTy 12), Close (qVar"state", Let(TP[Var("v",PTy(F32,bTy)),qVar"s"], Apply (Call ("ARMExpandImm_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)), TP[Var("imm12",FTy 12), Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"state"))]), qVar"state"),TP[Mop(Fst,Var("v",PTy(F32,bTy))),qVar"s"]))) ; val ThumbExpandImm_C_def = Def ("ThumbExpandImm_C",TP[Var("imm12",FTy 12),bVar"carry_in"], Close (qVar"state", ITE(EQ(EX(Var("imm12",FTy 12),LN 11,LN 10,FTy 2),LW(0,2)), Let(TP[Var("v",F32),qVar"s"], CS(EX(Var("imm12",FTy 12),LN 9,LN 8,FTy 2), [(LW(0,2), TP[Mop(Cast F32,EX(Var("imm12",FTy 12),LN 7,LN 0,F8)), qVar"state"]), (LW(1,2), ITE(EQ(EX(Var("imm12",FTy 12),LN 7,LN 0,F8),LW(0,8)), Apply (Call ("raise'exception",ATy(qTy,PTy(F32,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"ThumbExpandImm_C")),qVar"state"), TP[CC[LW(0,8),EX(Var("imm12",FTy 12),LN 7,LN 0,F8), LW(0,8),EX(Var("imm12",FTy 12),LN 7,LN 0,F8)], qVar"state"])), (LW(2,2), ITE(EQ(EX(Var("imm12",FTy 12),LN 7,LN 0,F8),LW(0,8)), Apply (Call ("raise'exception",ATy(qTy,PTy(F32,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"ThumbExpandImm_C")),qVar"state"), TP[CC[EX(Var("imm12",FTy 12),LN 7,LN 0,F8),LW(0,8), EX(Var("imm12",FTy 12),LN 7,LN 0,F8),LW(0,8)], qVar"state"])), (LW(3,2), ITE(EQ(EX(Var("imm12",FTy 12),LN 7,LN 0,F8),LW(0,8)), Apply (Call ("raise'exception",ATy(qTy,PTy(F32,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"ThumbExpandImm_C")),qVar"state"), TP[CC[EX(Var("imm12",FTy 12),LN 7,LN 0,F8), EX(Var("imm12",FTy 12),LN 7,LN 0,F8), EX(Var("imm12",FTy 12),LN 7,LN 0,F8), EX(Var("imm12",FTy 12),LN 7,LN 0,F8)], qVar"state"]))]), TP[TP[Var("v",F32),bVar"carry_in"],qVar"s"]), Apply (Call ("ROR_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)), TP[Mop(Cast F32, CC[LW(1,1),EX(Var("imm12",FTy 12),LN 6,LN 0,FTy 7)]), Mop(Cast nTy,EX(Var("imm12",FTy 12),LN 11,LN 7,FTy 5))]), qVar"state")))) ; val ExpandImm_C_def = Def ("ExpandImm_C",TP[Var("imm12",FTy 12),bVar"carry_in"], Close (qVar"state", ITE(EQ(Dest("Encoding",CTy"Encoding",qVar"state"), LC("Encoding_Thumb2",CTy"Encoding")), Apply (Call ("ThumbExpandImm_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)), TP[Var("imm12",FTy 12),bVar"carry_in"]),qVar"state"), Apply (Call ("ARMExpandImm_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)), TP[Var("imm12",FTy 12),bVar"carry_in"]),qVar"state")))) ; 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(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 DataProcessingALU_def = Def ("DataProcessingALU", TP[Var("opc",F4),Var("a",F32),Var("b",F32),bVar"c"], CS(Var("opc",F4), [(LW(0,4),TP[Bop(BAnd,Var("a",F32),Var("b",F32)),bVar"c",LX bTy]), (LW(8,4),TP[Bop(BAnd,Var("a",F32),Var("b",F32)),bVar"c",LX bTy]), (LW(1,4),TP[Bop(BXor,Var("a",F32),Var("b",F32)),bVar"c",LX bTy]), (LW(9,4),TP[Bop(BXor,Var("a",F32),Var("b",F32)),bVar"c",LX bTy]), (LW(2,4), Call ("AddWithCarry",PTy(F32,PTy(bTy,bTy)), TP[Var("a",F32),Mop(BNot,Var("b",F32)),LT])), (LW(10,4), Call ("AddWithCarry",PTy(F32,PTy(bTy,bTy)), TP[Var("a",F32),Mop(BNot,Var("b",F32)),LT])), (LW(3,4), Call ("AddWithCarry",PTy(F32,PTy(bTy,bTy)), TP[Mop(BNot,Var("a",F32)),Var("b",F32),LT])), (LW(4,4), Call ("AddWithCarry",PTy(F32,PTy(bTy,bTy)), TP[Var("a",F32),Var("b",F32),LF])), (LW(11,4), Call ("AddWithCarry",PTy(F32,PTy(bTy,bTy)), TP[Var("a",F32),Var("b",F32),LF])), (LW(5,4), Call ("AddWithCarry",PTy(F32,PTy(bTy,bTy)), TP[Var("a",F32),Var("b",F32),bVar"c"])), (LW(6,4), Call ("AddWithCarry",PTy(F32,PTy(bTy,bTy)), TP[Var("a",F32),Mop(BNot,Var("b",F32)),bVar"c"])), (LW(7,4), Call ("AddWithCarry",PTy(F32,PTy(bTy,bTy)), TP[Mop(BNot,Var("a",F32)),Var("b",F32),bVar"c"])), (LW(12,4),TP[Bop(BOr,Var("a",F32),Var("b",F32)),bVar"c",LX bTy]), (LW(13,4),TP[Var("b",F32),bVar"c",LX bTy]), (LW(14,4), TP[Bop(BAnd,Var("a",F32),Mop(BNot,Var("b",F32))),bVar"c",LX bTy]), (LW(15,4), TP[Bop(BOr,Var("a",F32),Mop(BNot,Var("b",F32))),bVar"c",LX bTy])])) ; val ArithmeticOpcode_def = Def ("ArithmeticOpcode",Var("opc",F4), Bop(And, Bop(Or,Bop(Bit,Var("opc",F4),LN 2),Bop(Bit,Var("opc",F4),LN 1)), Mop(Not, Bop(And,Bop(Bit,Var("opc",F4),LN 3),Bop(Bit,Var("opc",F4),LN 2))))) ; val ExcVectorBase_def = Def ("ExcVectorBase",AVar uTy, Close (qVar"state", ITB([(Dest ("V",bTy, Dest("SCTLR",CTy"SCTLR",Dest("CP15",CTy"CP15",qVar"state"))), LW(268431360,32)), (Apply(Call("HaveSecurityExt",ATy(qTy,bTy),LU),qVar"state"), Dest("VBAR",F32,Dest("CP15",CTy"CP15",qVar"state")))],LW(0,32)))) ; val EnterMonitorMode_def = Def ("EnterMonitorMode", TP[Var("new_spsr_value",CTy"PSR"),Var("new_lr_value",F32), Var("vect_offset",F32)], Close (qVar"state", Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("new_lr_value",F32),LW(14,4)]), Apply (Call ("write'SPSR",ATy(qTy,qTy), Var("new_spsr_value",CTy"PSR")), Rupd ("CPSR", TP[qVar"state", Rupd ("M", TP[Dest("CPSR",CTy"PSR",qVar"state"),LW(22,5)])]))), Let(qVar"s", Rupd ("CPSR", TP[qVar"s",Rupd("J",TP[Dest("CPSR",CTy"PSR",qVar"s"),LF])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("T", TP[Dest("CPSR",CTy"PSR",qVar"s"), Dest ("TE",bTy, Dest ("SCTLR",CTy"SCTLR", Dest("CP15",CTy"CP15",qVar"s")))])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("E", TP[Dest("CPSR",CTy"PSR",qVar"s"), Dest ("EE",bTy, Dest ("SCTLR",CTy"SCTLR", Dest("CP15",CTy"CP15",qVar"s")))])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("A", TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("F", TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("I", TP[Dest ("CPSR",CTy"PSR",qVar"s"), LT])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("IT", TP[Dest ("CPSR",CTy"PSR", qVar"s"),LW(0,8)])]), Apply (Call ("BranchTo",ATy(qTy,qTy), Bop(Add, Dest ("MVBAR",F32, Dest ("CP15",CTy"CP15", qVar"s")), Var("vect_offset",F32))), qVar"s"))))))))))) ; val EnterHypMode_def = Def ("EnterHypMode", TP[Var("new_spsr_value",CTy"PSR"),Var("new_lr_value",F32), Var("vect_offset",F32)], Close (qVar"state", Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("new_lr_value",F32),LW(14,4)]), Apply (Call ("write'SPSR",ATy(qTy,qTy), Var("new_spsr_value",CTy"PSR")), Rupd ("CPSR", TP[qVar"state", Rupd ("M", TP[Dest("CPSR",CTy"PSR",qVar"state"),LW(26,5)])]))), Let(qVar"s", Rupd ("CPSR", TP[qVar"s",Rupd("J",TP[Dest("CPSR",CTy"PSR",qVar"s"),LF])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("T", TP[Dest("CPSR",CTy"PSR",qVar"s"), Dest ("TE",bTy, Dest ("SCTLR",CTy"SCTLR", Dest("CP15",CTy"CP15",qVar"s")))])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("E", TP[Dest("CPSR",CTy"PSR",qVar"s"), Dest ("EE",bTy, Dest ("SCTLR",CTy"SCTLR", Dest("CP15",CTy"CP15",qVar"s")))])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("A", TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("F", TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("I", TP[Dest ("CPSR",CTy"PSR",qVar"s"), LT])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("IT", TP[Dest ("CPSR",CTy"PSR", qVar"s"),LW(0,8)])]), Apply (Call ("BranchTo",ATy(qTy,qTy), Bop(Add, Dest ("MVBAR",F32, Dest ("CP15",CTy"CP15", qVar"s")), Var("vect_offset",F32))), qVar"s"))))))))))) ; val TakeReset_def = Def ("TakeReset",AVar uTy, Close (qVar"state", Let(TP[bVar"v",qVar"s"], Let(qVar"s", Rupd ("CPSR", TP[qVar"state", Rupd ("M",TP[Dest("CPSR",CTy"PSR",qVar"state"),LW(19,5)])]), TP[Apply(Call("HaveSecurityExt",ATy(qTy,bTy),LU),qVar"s"), qVar"s"]), Let(qVar"s", ITE(bVar"v", Rupd ("CP15", TP[qVar"s", Rupd ("SCR", TP[Dest("CP15",CTy"CP15",qVar"s"), Rupd ("NS", TP[Dest ("SCR",CTy"SCR", Dest("CP15",CTy"CP15",qVar"s")),LF])])]), qVar"s"), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd("I",TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd("F",TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("A", TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("IT", TP[Dest("CPSR",CTy"PSR",qVar"s"), LW(0,8)])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("J", TP[Dest ("CPSR",CTy"PSR",qVar"s"), LF])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("T", TP[Dest ("CPSR",CTy"PSR", qVar"s"), Dest ("TE",bTy, Dest ("SCTLR", CTy"SCTLR", Dest ("CP15", CTy"CP15", qVar"s")))])]), Let(TP[Var("v",F32),qVar"s"], Let(qVar"s0", Rupd ("CPSR", TP[qVar"s", Rupd ("E", TP[Dest ("CPSR", CTy"PSR", qVar"s"), Dest ("EE",bTy, Dest ("SCTLR", CTy"SCTLR", Dest ("CP15", CTy"CP15", qVar"s")))])]), TP[Apply (Call ("ExcVectorBase", ATy(qTy,F32),LU), qVar"s0"),qVar"s0"]), Apply (Call ("BranchTo",ATy(qTy,qTy), Bop(Add,Var("v",F32), LW(0,32))),qVar"s")))))))))))) ; val TakeUndefInstrException_def = Def ("TakeUndefInstrException",AVar uTy, Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"state")), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), TP[Bop(Sub,Var("v",F32),LW(2,32)),qVar"s"]), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), TP[Bop(Sub,Var("v",F32),LW(4,32)),qVar"s"])), Let(Var("v0",CTy"PSR"),Dest("CPSR",CTy"PSR",qVar"s"), Let(Var("vect_offset",F32),LW(4,32), Let(Var("preferred_exceptn_return",F32), Bop(Sub,Var("v",F32), ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"s")), LW(2,32),LW(4,32))), ITB([(Bop(And, Apply (Call("HaveVirtExt",ATy(qTy,bTy),LU), qVar"s"), Bop(And, Apply (Call ("HaveSecurityExt",ATy(qTy,bTy), LU),qVar"s"), Bop(And, Dest ("NS",bTy, Dest ("SCR",CTy"SCR", Dest ("CP15",CTy"CP15",qVar"s"))), EQ(Dest ("M",FTy 5, Dest ("CPSR",CTy"PSR",qVar"s")), LW(26,5))))), Apply (Call ("EnterHypMode",ATy(qTy,qTy), TP[Var("v0",CTy"PSR"), Var("preferred_exceptn_return",F32), Var("vect_offset",F32)]),qVar"s")), (Bop(And, Apply (Call("HaveVirtExt",ATy(qTy,bTy),LU), qVar"s"), Bop(And, Apply (Call ("HaveSecurityExt",ATy(qTy,bTy), LU),qVar"s"), Bop(And, Mop(Not, Apply (Call ("IsSecure",ATy(qTy,bTy), LU),qVar"s")), Bop(And, Dest ("TGE",bTy, Dest ("HCR",CTy"HCR", Dest ("CP15",CTy"CP15", qVar"s"))), EQ(Dest ("M",FTy 5, Dest ("CPSR",CTy"PSR", qVar"s")),LW(16,5)))))), Apply (Call ("EnterHypMode",ATy(qTy,qTy), TP[Var("v0",CTy"PSR"), Var("preferred_exceptn_return",F32), LW(20,32)]),qVar"s"))], Let(qVar"s", ITE(EQ(Dest ("M",FTy 5, Dest("CPSR",CTy"PSR",qVar"s")), LW(22,5)), Rupd ("CP15", TP[qVar"s", Rupd ("SCR", TP[Dest ("CP15",CTy"CP15",qVar"s"), Rupd ("NS", TP[Dest ("SCR",CTy"SCR", Dest ("CP15", CTy"CP15", qVar"s")),LF])])]), qVar"s"), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("v",F32),LW(14,4)]), Apply (Call ("write'SPSR",ATy(qTy,qTy), Var("v0",CTy"PSR")), Rupd ("CPSR", TP[qVar"s", Rupd ("M", TP[Dest ("CPSR",CTy"PSR", qVar"s"),LW(27,5)])]))), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("I", TP[Dest ("CPSR",CTy"PSR", qVar"s"),LT])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("IT", TP[Dest ("CPSR",CTy"PSR", qVar"s"),LW(0,8)])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("J", TP[Dest ("CPSR", CTy"PSR", qVar"s"),LF])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("T", TP[Dest ("CPSR", CTy"PSR", qVar"s"), Dest ("TE",bTy, Dest ("SCTLR", CTy"SCTLR", Dest ("CP15", CTy"CP15", qVar"s")))])]), Let(TP[Var("v",F32), qVar"s"], Let(qVar"s0", Rupd ("CPSR", TP[qVar"s", Rupd ("E", TP[Dest ("CPSR", CTy"PSR", qVar"s"), Dest ("EE", bTy, Dest ("SCTLR", CTy"SCTLR", Dest ("CP15", CTy"CP15", qVar"s")))])]), TP[Apply (Call ("ExcVectorBase", ATy(qTy, F32), LU), qVar"s0"), qVar"s0"]), Apply (Call ("BranchTo", ATy(qTy,qTy), Bop(Add, Var("v", F32), Var("vect_offset", F32))), qVar"s"))))))))))))))) ; val TakeSVCException_def = Def ("TakeSVCException",AVar uTy, Close (qVar"state", Let(qVar"s",Apply(Call("ITAdvance",ATy(qTy,qTy),LU),qVar"state"), Let(TP[Var("v",F32),qVar"s"], ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"s")), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"), TP[Bop(Sub,Var("v",F32),LW(2,32)),qVar"s"]), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"), TP[Bop(Sub,Var("v",F32),LW(4,32)),qVar"s"])), Let(Var("v0",CTy"PSR"),Dest("CPSR",CTy"PSR",qVar"s"), Let(Var("vect_offset",F32),LW(8,32), ITB([(Bop(And, Apply (Call("HaveVirtExt",ATy(qTy,bTy),LU), qVar"s"), Bop(And, Apply (Call ("HaveSecurityExt",ATy(qTy,bTy), LU),qVar"s"), Bop(And, Dest ("NS",bTy, Dest ("SCR",CTy"SCR", Dest ("CP15",CTy"CP15",qVar"s"))), EQ(Dest ("M",FTy 5, Dest ("CPSR",CTy"PSR",qVar"s")), LW(26,5))))), Apply (Call ("EnterHypMode",ATy(qTy,qTy), TP[Var("v0",CTy"PSR"),Var("v",F32), Var("vect_offset",F32)]),qVar"s")), (Bop(And, Apply (Call("HaveVirtExt",ATy(qTy,bTy),LU), qVar"s"), Bop(And, Apply (Call ("HaveSecurityExt",ATy(qTy,bTy), LU),qVar"s"), Bop(And, Mop(Not, Apply (Call ("IsSecure",ATy(qTy,bTy), LU),qVar"s")), Bop(And, Dest ("TGE",bTy, Dest ("HCR",CTy"HCR", Dest ("CP15",CTy"CP15", qVar"s"))), EQ(Dest ("M",FTy 5, Dest ("CPSR",CTy"PSR", qVar"s")),LW(16,5)))))), Apply (Call ("EnterHypMode",ATy(qTy,qTy), TP[Var("v0",CTy"PSR"),Var("v",F32), LW(20,32)]),qVar"s"))], Let(qVar"s", ITE(EQ(Dest ("M",FTy 5, Dest("CPSR",CTy"PSR",qVar"s")), LW(22,5)), Rupd ("CP15", TP[qVar"s", Rupd ("SCR", TP[Dest ("CP15",CTy"CP15",qVar"s"), Rupd ("NS", TP[Dest ("SCR",CTy"SCR", Dest ("CP15", CTy"CP15", qVar"s")),LF])])]), qVar"s"), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("v",F32),LW(14,4)]), Apply (Call ("write'SPSR",ATy(qTy,qTy), Var("v0",CTy"PSR")), Rupd ("CPSR", TP[qVar"s", Rupd ("M", TP[Dest ("CPSR",CTy"PSR", qVar"s"),LW(19,5)])]))), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("I", TP[Dest ("CPSR",CTy"PSR", qVar"s"),LT])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("IT", TP[Dest ("CPSR",CTy"PSR", qVar"s"),LW(0,8)])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("J", TP[Dest ("CPSR", CTy"PSR", qVar"s"),LF])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("T", TP[Dest ("CPSR", CTy"PSR", qVar"s"), Dest ("TE",bTy, Dest ("SCTLR", CTy"SCTLR", Dest ("CP15", CTy"CP15", qVar"s")))])]), Let(TP[Var("v",F32), qVar"s"], Let(qVar"s0", Rupd ("CPSR", TP[qVar"s", Rupd ("E", TP[Dest ("CPSR", CTy"PSR", qVar"s"), Dest ("EE", bTy, Dest ("SCTLR", CTy"SCTLR", Dest ("CP15", CTy"CP15", qVar"s")))])]), TP[Apply (Call ("ExcVectorBase", ATy(qTy, F32), LU), qVar"s0"), qVar"s0"]), Apply (Call ("BranchTo", ATy(qTy,qTy), Bop(Add, Var("v", F32), Var("vect_offset", F32))), qVar"s"))))))))))))))) ; val TakeSMCException_def = Def ("TakeSMCException",AVar uTy, Close (qVar"state", Let(qVar"s",Apply(Call("ITAdvance",ATy(qTy,qTy),LU),qVar"state"), Let(TP[Var("v",F32),qVar"s"], ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"s")), Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"), TP[Bop(Sub,Var("v",F32),LW(4,32)),qVar"s"])), Let(qVar"s0", ITE(EQ(Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")), LW(22,5)), Rupd ("CP15", TP[qVar"s", Rupd ("SCR", TP[Dest("CP15",CTy"CP15",qVar"s"), Rupd ("NS", TP[Dest ("SCR",CTy"SCR", Dest("CP15",CTy"CP15",qVar"s")), LF])])]),qVar"s"), Apply (Call ("EnterMonitorMode",ATy(qTy,qTy), TP[Dest("CPSR",CTy"PSR",qVar"s"),Var("v",F32), LW(8,32)]), Rupd ("CPSR", TP[qVar"s0", Rupd ("M", TP[Dest("CPSR",CTy"PSR",qVar"s0"),LW(22,5)])]))))))) ; val TakeHVCException_def = Def ("TakeHVCException",AVar uTy, Close (qVar"state", Let(qVar"s",Apply(Call("ITAdvance",ATy(qTy,qTy),LU),qVar"state"), Let(TP[Var("v",F32),qVar"s"], ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"s")), Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"), TP[Bop(Sub,Var("v",F32),LW(4,32)),qVar"s"])), Let(Var("v0",CTy"PSR"),Dest("CPSR",CTy"PSR",qVar"s"), ITE(EQ(Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")), LW(26,5)), Apply (Call ("EnterHypMode",ATy(qTy,qTy), TP[Var("v0",CTy"PSR"),Var("v",F32),LW(8,32)]), qVar"s"), Apply (Call ("EnterHypMode",ATy(qTy,qTy), TP[Var("v0",CTy"PSR"),Var("v",F32),LW(20,32)]), qVar"s"))))))) ; val TakeDataAbortException_def = Def ("TakeDataAbortException",AVar uTy, Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"state")), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), TP[Bop(Add,Var("v",F32),LW(4,32)),qVar"s"]), Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state")), Let(Var("v0",CTy"PSR"),Dest("CPSR",CTy"PSR",qVar"s"), Let(Var("vect_offset",F32),LW(16,32), ITB([(Bop(And, Apply (Call("HaveSecurityExt",ATy(qTy,bTy),LU), qVar"s"), Bop(And, Dest ("EA",bTy, Dest ("SCR",CTy"SCR", Dest("CP15",CTy"CP15",qVar"s"))), Call("IsExternalAbort",bTy,LU))), Apply (Call ("EnterMonitorMode",ATy(qTy,qTy), TP[Var("v0",CTy"PSR"),Var("v",F32), Var("vect_offset",F32)]), ITE(EQ(Dest ("M",FTy 5, Dest("CPSR",CTy"PSR",qVar"s")), LW(22,5)), Rupd ("CP15", TP[qVar"s", Rupd ("SCR", TP[Dest("CP15",CTy"CP15",qVar"s"), Rupd ("NS", TP[Dest ("SCR",CTy"SCR", Dest ("CP15",CTy"CP15", qVar"s")),LF])])]), qVar"s"))), (Bop(And, Apply (Call("HaveVirtExt",ATy(qTy,bTy),LU),qVar"s"), Bop(And, Apply (Call("HaveSecurityExt",ATy(qTy,bTy),LU), qVar"s"), Bop(And, Dest ("NS",bTy, Dest ("SCR",CTy"SCR", Dest("CP15",CTy"CP15",qVar"s"))), EQ(Dest ("M",FTy 5, Dest("CPSR",CTy"PSR",qVar"s")), LW(26,5))))), Apply (Call ("EnterHypMode",ATy(qTy,qTy), TP[Var("v0",CTy"PSR"), Bop(Sub,Var("v",F32),LW(8,32)), Var("vect_offset",F32)]),qVar"s"))], Let(qVar"s", ITE(Bop(And, Apply (Call ("HaveSecurityExt",ATy(qTy,bTy),LU), qVar"s"), EQ(Dest ("M",FTy 5, Dest("CPSR",CTy"PSR",qVar"s")), LW(22,5))), Rupd ("CP15", TP[qVar"s", Rupd ("SCR", TP[Dest("CP15",CTy"CP15",qVar"s"), Rupd ("NS", TP[Dest ("SCR",CTy"SCR", Dest ("CP15",CTy"CP15", qVar"s")),LF])])]), qVar"s"), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("v",F32),LW(14,4)]), Apply (Call ("write'SPSR",ATy(qTy,qTy), Var("v0",CTy"PSR")), Rupd ("CPSR", TP[qVar"s", Rupd ("M", TP[Dest ("CPSR",CTy"PSR",qVar"s"), LW(23,5)])]))), Let(TP[bVar"v",qVar"s"], Let(qVar"s0", Rupd ("CPSR", TP[qVar"s", Rupd ("I", TP[Dest ("CPSR",CTy"PSR", qVar"s"),LT])]), TP[Apply (Call ("HaveSecurityExt", ATy(qTy,bTy),LU),qVar"s0"), qVar"s0"]), Let(qVar"s", ITE(Bop(Or,Mop(Not,bVar"v"), Bop(Or, Apply (Call ("HaveVirtExt", ATy(qTy,bTy),LU), qVar"s"), Bop(Or, Mop(Not, Dest ("NS",bTy, Dest ("SCR", CTy"SCR", Dest ("CP15", CTy"CP15", qVar"s")))), Dest ("AW",bTy, Dest ("SCR", CTy"SCR", Dest ("CP15", CTy"CP15", qVar"s")))))), Rupd ("CPSR", TP[qVar"s", Rupd ("A", TP[Dest ("CPSR",CTy"PSR", qVar"s"),LT])]), qVar"s"), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("IT", TP[Dest ("CPSR",CTy"PSR", qVar"s"),LW(0,8)])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("J", TP[Dest ("CPSR", CTy"PSR", qVar"s"),LF])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("T", TP[Dest ("CPSR", CTy"PSR", qVar"s"), Dest ("TE",bTy, Dest ("SCTLR", CTy"SCTLR", Dest ("CP15", CTy"CP15", qVar"s")))])]), Let(TP[Var("v",F32), qVar"s"], Let(qVar"s0", Rupd ("CPSR", TP[qVar"s", Rupd ("E", TP[Dest ("CPSR", CTy"PSR", qVar"s"), Dest ("EE", bTy, Dest ("SCTLR", CTy"SCTLR", Dest ("CP15", CTy"CP15", qVar"s")))])]), TP[Apply (Call ("ExcVectorBase", ATy(qTy, F32), LU), qVar"s0"), qVar"s0"]), Apply (Call ("BranchTo", ATy(qTy,qTy), Bop(Add, Var("v", F32), Var("vect_offset", F32))), qVar"s"))))))))))))))) ; val TakePrefetchAbortException_def = Def ("TakePrefetchAbortException",AVar uTy, Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"state")), Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), TP[Bop(Sub,Var("v",F32),LW(4,32)),qVar"s"])), Let(Var("v0",CTy"PSR"),Dest("CPSR",CTy"PSR",qVar"s"), Let(Var("vect_offset",F32),LW(12,32), ITB([(Bop(And, Apply (Call("HaveSecurityExt",ATy(qTy,bTy),LU), qVar"s"), Bop(And, Dest ("EA",bTy, Dest ("SCR",CTy"SCR", Dest("CP15",CTy"CP15",qVar"s"))), Call("IsExternalAbort",bTy,LU))), Apply (Call ("EnterMonitorMode",ATy(qTy,qTy), TP[Var("v0",CTy"PSR"),Var("v",F32), Var("vect_offset",F32)]), ITE(EQ(Dest ("M",FTy 5, Dest("CPSR",CTy"PSR",qVar"s")), LW(22,5)), Rupd ("CP15", TP[qVar"s", Rupd ("SCR", TP[Dest("CP15",CTy"CP15",qVar"s"), Rupd ("NS", TP[Dest ("SCR",CTy"SCR", Dest ("CP15",CTy"CP15", qVar"s")),LF])])]), qVar"s"))), (Bop(And, Apply (Call("HaveVirtExt",ATy(qTy,bTy),LU),qVar"s"), Bop(And, Apply (Call("HaveSecurityExt",ATy(qTy,bTy),LU), qVar"s"), Bop(And, Dest ("NS",bTy, Dest ("SCR",CTy"SCR", Dest("CP15",CTy"CP15",qVar"s"))), EQ(Dest ("M",FTy 5, Dest("CPSR",CTy"PSR",qVar"s")), LW(26,5))))), Apply (Call ("EnterHypMode",ATy(qTy,qTy), TP[Var("v0",CTy"PSR"), Bop(Sub,Var("v",F32),LW(4,32)), Var("vect_offset",F32)]),qVar"s"))], Let(qVar"s", ITE(Bop(And, Apply (Call ("HaveSecurityExt",ATy(qTy,bTy),LU), qVar"s"), EQ(Dest ("M",FTy 5, Dest("CPSR",CTy"PSR",qVar"s")), LW(22,5))), Rupd ("CP15", TP[qVar"s", Rupd ("SCR", TP[Dest("CP15",CTy"CP15",qVar"s"), Rupd ("NS", TP[Dest ("SCR",CTy"SCR", Dest ("CP15",CTy"CP15", qVar"s")),LF])])]), qVar"s"), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("v",F32),LW(14,4)]), Apply (Call ("write'SPSR",ATy(qTy,qTy), Var("v0",CTy"PSR")), Rupd ("CPSR", TP[qVar"s", Rupd ("M", TP[Dest ("CPSR",CTy"PSR",qVar"s"), LW(23,5)])]))), Let(TP[bVar"v",qVar"s"], Let(qVar"s0", Rupd ("CPSR", TP[qVar"s", Rupd ("I", TP[Dest ("CPSR",CTy"PSR", qVar"s"),LT])]), TP[Apply (Call ("HaveSecurityExt", ATy(qTy,bTy),LU),qVar"s0"), qVar"s0"]), Let(qVar"s", ITE(Bop(Or,Mop(Not,bVar"v"), Bop(Or, Apply (Call ("HaveVirtExt", ATy(qTy,bTy),LU), qVar"s"), Bop(Or, Mop(Not, Dest ("NS",bTy, Dest ("SCR", CTy"SCR", Dest ("CP15", CTy"CP15", qVar"s")))), Dest ("AW",bTy, Dest ("SCR", CTy"SCR", Dest ("CP15", CTy"CP15", qVar"s")))))), Rupd ("CPSR", TP[qVar"s", Rupd ("A", TP[Dest ("CPSR",CTy"PSR", qVar"s"),LT])]), qVar"s"), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("IT", TP[Dest ("CPSR",CTy"PSR", qVar"s"),LW(0,8)])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("J", TP[Dest ("CPSR", CTy"PSR", qVar"s"),LF])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("T", TP[Dest ("CPSR", CTy"PSR", qVar"s"), Dest ("TE",bTy, Dest ("SCTLR", CTy"SCTLR", Dest ("CP15", CTy"CP15", qVar"s")))])]), Let(TP[Var("v",F32), qVar"s"], Let(qVar"s0", Rupd ("CPSR", TP[qVar"s", Rupd ("E", TP[Dest ("CPSR", CTy"PSR", qVar"s"), Dest ("EE", bTy, Dest ("SCTLR", CTy"SCTLR", Dest ("CP15", CTy"CP15", qVar"s")))])]), TP[Apply (Call ("ExcVectorBase", ATy(qTy, F32), LU), qVar"s0"), qVar"s0"]), Apply (Call ("BranchTo", ATy(qTy,qTy), Bop(Add, Var("v", F32), Var("vect_offset", F32))), qVar"s"))))))))))))))) ; val TakePhysicalIRQException_def = Def ("TakePhysicalIRQException",AVar uTy, Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"state")), Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), TP[Bop(Sub,Var("v",F32),LW(4,32)),qVar"s"])), Let(Var("v0",CTy"PSR"),Dest("CPSR",CTy"PSR",qVar"s"), Let(Var("vect_offset",F32),LW(24,32), ITB([(Bop(And, Apply (Call("HaveSecurityExt",ATy(qTy,bTy),LU), qVar"s"), Dest ("IRQ",bTy, Dest ("SCR",CTy"SCR", Dest("CP15",CTy"CP15",qVar"s")))), Apply (Call ("EnterMonitorMode",ATy(qTy,qTy), TP[Var("v0",CTy"PSR"),Var("v",F32), Var("vect_offset",F32)]), ITE(EQ(Dest ("M",FTy 5, Dest("CPSR",CTy"PSR",qVar"s")), LW(22,5)), Rupd ("CP15", TP[qVar"s", Rupd ("SCR", TP[Dest("CP15",CTy"CP15",qVar"s"), Rupd ("NS", TP[Dest ("SCR",CTy"SCR", Dest ("CP15",CTy"CP15", qVar"s")),LF])])]), qVar"s"))), (Bop(Or, Bop(And, Apply (Call("HaveVirtExt",ATy(qTy,bTy),LU), qVar"s"), Bop(And, Apply (Call ("HaveSecurityExt",ATy(qTy,bTy), LU),qVar"s"), Bop(And, Mop(Not, Dest ("IRQ",bTy, Dest ("SCR",CTy"SCR", Dest ("CP15",CTy"CP15", qVar"s")))), Bop(And, Dest ("IMO",bTy, Dest ("HCR",CTy"HCR", Dest ("CP15",CTy"CP15", qVar"s"))), Mop(Not, Apply (Call ("IsSecure", ATy(qTy,bTy),LU), qVar"s")))))), EQ(Dest ("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")), LW(26,5))), Apply (Call ("EnterHypMode",ATy(qTy,qTy), TP[Var("v0",CTy"PSR"), Bop(Sub,Var("v",F32),LW(4,32)), Var("vect_offset",F32)]), Rupd ("CP15", TP[qVar"s", Rupd ("HSR", TP[Dest("CP15",CTy"CP15",qVar"s"), LX(CTy"HSR")])])))], Let(qVar"s", ITE(EQ(Dest ("M",FTy 5, Dest("CPSR",CTy"PSR",qVar"s")), LW(22,5)), Rupd ("CP15", TP[qVar"s", Rupd ("SCR", TP[Dest("CP15",CTy"CP15",qVar"s"), Rupd ("NS", TP[Dest ("SCR",CTy"SCR", Dest ("CP15",CTy"CP15", qVar"s")),LF])])]), qVar"s"), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("v",F32),LW(14,4)]), Apply (Call ("write'SPSR",ATy(qTy,qTy), Var("v0",CTy"PSR")), Rupd ("CPSR", TP[qVar"s", Rupd ("M", TP[Dest ("CPSR",CTy"PSR",qVar"s"), LW(18,5)])]))), Let(TP[bVar"v",qVar"s"], Let(qVar"s0", Rupd ("CPSR", TP[qVar"s", Rupd ("I", TP[Dest ("CPSR",CTy"PSR", qVar"s"),LT])]), TP[Apply (Call ("HaveSecurityExt", ATy(qTy,bTy),LU),qVar"s0"), qVar"s0"]), Let(qVar"s", ITE(Bop(Or,Mop(Not,bVar"v"), Bop(Or, Apply (Call ("HaveVirtExt", ATy(qTy,bTy),LU), qVar"s"), Bop(Or, Mop(Not, Dest ("NS",bTy, Dest ("SCR", CTy"SCR", Dest ("CP15", CTy"CP15", qVar"s")))), Dest ("AW",bTy, Dest ("SCR", CTy"SCR", Dest ("CP15", CTy"CP15", qVar"s")))))), Rupd ("CPSR", TP[qVar"s", Rupd ("A", TP[Dest ("CPSR",CTy"PSR", qVar"s"),LT])]), qVar"s"), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("IT", TP[Dest ("CPSR",CTy"PSR", qVar"s"),LW(0,8)])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("J", TP[Dest ("CPSR", CTy"PSR", qVar"s"),LF])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("T", TP[Dest ("CPSR", CTy"PSR", qVar"s"), Dest ("TE",bTy, Dest ("SCTLR", CTy"SCTLR", Dest ("CP15", CTy"CP15", qVar"s")))])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("E", TP[Dest ("CPSR", CTy"PSR", qVar"s"), Dest ("EE", bTy, Dest ("SCTLR", CTy"SCTLR", Dest ("CP15", CTy"CP15", qVar"s")))])]), ITE(Dest ("VE",bTy, Dest ("SCTLR", CTy"SCTLR", Dest ("CP15", CTy"CP15", qVar"s"))), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy, PTy(uTy, qTy)), Call ("IMPLEMENTATION_DEFINED", CTy"exception", LS "branch to an IRQ vector")), qVar"s")), Apply (Call ("BranchTo", ATy(qTy, qTy), Bop(Add, Apply (Call ("ExcVectorBase", ATy(qTy, F32), LU), qVar"s"), Var("vect_offset", F32))), qVar"s")))))))))))))))) ; val TakeVirtualIRQException_def = Def ("TakeVirtualIRQException",AVar uTy, Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"state")), Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), TP[Bop(Sub,Var("v",F32),LW(4,32)),qVar"s"])), Let(qVar"s", Apply (Call("write'R",ATy(qTy,qTy),TP[Var("v",F32),LW(14,4)]), Apply (Call ("write'SPSR",ATy(qTy,qTy), Dest("CPSR",CTy"PSR",qVar"s")), Rupd ("CPSR", TP[qVar"s", Rupd ("M", TP[Dest("CPSR",CTy"PSR",qVar"s"),LW(18,5)])]))), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd("I",TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd("A",TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("IT", TP[Dest("CPSR",CTy"PSR",qVar"s"), LW(0,8)])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("J", TP[Dest("CPSR",CTy"PSR",qVar"s"),LF])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("T", TP[Dest ("CPSR",CTy"PSR",qVar"s"), Dest ("TE",bTy, Dest ("SCTLR",CTy"SCTLR", Dest ("CP15",CTy"CP15", qVar"s")))])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("E", TP[Dest ("CPSR",CTy"PSR", qVar"s"), Dest ("EE",bTy, Dest ("SCTLR", CTy"SCTLR", Dest ("CP15", CTy"CP15", qVar"s")))])]), ITE(Dest ("VE",bTy, Dest ("SCTLR",CTy"SCTLR", Dest ("CP15",CTy"CP15", qVar"s"))), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy,PTy(uTy,qTy)), Call ("IMPLEMENTATION_DEFINED", CTy"exception", LS "branch to an IRQ vector")), qVar"s")), Apply (Call ("BranchTo",ATy(qTy,qTy), Bop(Add, Apply (Call ("ExcVectorBase", ATy(qTy,F32),LU), qVar"s"),LW(24,32))), qVar"s")))))))))))) ; val TakePhysicalFIQException_def = Def ("TakePhysicalFIQException",AVar uTy, Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"state")), Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), TP[Bop(Sub,Var("v",F32),LW(4,32)),qVar"s"])), Let(Var("v0",CTy"PSR"),Dest("CPSR",CTy"PSR",qVar"s"), Let(Var("vect_offset",F32),LW(28,32), ITB([(Bop(And, Apply (Call("HaveSecurityExt",ATy(qTy,bTy),LU), qVar"s"), Dest ("FIQ",bTy, Dest ("SCR",CTy"SCR", Dest("CP15",CTy"CP15",qVar"s")))), Apply (Call ("EnterMonitorMode",ATy(qTy,qTy), TP[Var("v0",CTy"PSR"),Var("v",F32), Var("vect_offset",F32)]), ITE(EQ(Dest ("M",FTy 5, Dest("CPSR",CTy"PSR",qVar"s")), LW(22,5)), Rupd ("CP15", TP[qVar"s", Rupd ("SCR", TP[Dest("CP15",CTy"CP15",qVar"s"), Rupd ("NS", TP[Dest ("SCR",CTy"SCR", Dest ("CP15",CTy"CP15", qVar"s")),LF])])]), qVar"s"))), (Bop(Or, Bop(And, Apply (Call("HaveVirtExt",ATy(qTy,bTy),LU), qVar"s"), Bop(And, Apply (Call ("HaveSecurityExt",ATy(qTy,bTy), LU),qVar"s"), Bop(And, Mop(Not, Dest ("FIQ",bTy, Dest ("SCR",CTy"SCR", Dest ("CP15",CTy"CP15", qVar"s")))), Bop(And, Dest ("FMO",bTy, Dest ("HCR",CTy"HCR", Dest ("CP15",CTy"CP15", qVar"s"))), Mop(Not, Apply (Call ("IsSecure", ATy(qTy,bTy),LU), qVar"s")))))), EQ(Dest ("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")), LW(26,5))), Apply (Call ("EnterHypMode",ATy(qTy,qTy), TP[Var("v0",CTy"PSR"), Bop(Sub,Var("v",F32),LW(4,32)), Var("vect_offset",F32)]), Rupd ("CP15", TP[qVar"s", Rupd ("HSR", TP[Dest("CP15",CTy"CP15",qVar"s"), LX(CTy"HSR")])])))], Let(qVar"s", ITE(EQ(Dest ("M",FTy 5, Dest("CPSR",CTy"PSR",qVar"s")), LW(22,5)), Rupd ("CP15", TP[qVar"s", Rupd ("SCR", TP[Dest("CP15",CTy"CP15",qVar"s"), Rupd ("NS", TP[Dest ("SCR",CTy"SCR", Dest ("CP15",CTy"CP15", qVar"s")),LF])])]), qVar"s"), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("v",F32),LW(14,4)]), Apply (Call ("write'SPSR",ATy(qTy,qTy), Var("v0",CTy"PSR")), Rupd ("CPSR", TP[qVar"s", Rupd ("M", TP[Dest ("CPSR",CTy"PSR",qVar"s"), LW(17,5)])]))), Let(TP[bVar"v",qVar"s"], Let(qVar"s0", Rupd ("CPSR", TP[qVar"s", Rupd ("I", TP[Dest ("CPSR",CTy"PSR", qVar"s"),LT])]), TP[Apply (Call ("HaveSecurityExt", ATy(qTy,bTy),LU),qVar"s0"), qVar"s0"]), Let(TP[bVar"v",qVar"s"], Let(qVar"s0", ITE(Bop(Or,Mop(Not,bVar"v"), Bop(Or, Apply (Call ("HaveVirtExt", ATy(qTy,bTy), LU),qVar"s"), Bop(Or, Mop(Not, Dest ("NS",bTy, Dest ("SCR", CTy"SCR", Dest ("CP15", CTy"CP15", qVar"s")))), Dest ("FW",bTy, Dest ("SCR", CTy"SCR", Dest ("CP15", CTy"CP15", qVar"s")))))), Rupd ("CPSR", TP[qVar"s", Rupd ("F", TP[Dest ("CPSR", CTy"PSR", qVar"s"),LT])]), qVar"s"), TP[Apply (Call ("HaveSecurityExt", ATy(qTy,bTy),LU), qVar"s0"),qVar"s0"]), Let(qVar"s", ITE(Bop(Or,Mop(Not,bVar"v"), Bop(Or, Apply (Call ("HaveVirtExt", ATy(qTy,bTy), LU),qVar"s"), Bop(Or, Mop(Not, Dest ("NS",bTy, Dest ("SCR", CTy"SCR", Dest ("CP15", CTy"CP15", qVar"s")))), Dest ("AW",bTy, Dest ("SCR", CTy"SCR", Dest ("CP15", CTy"CP15", qVar"s")))))), Rupd ("CPSR", TP[qVar"s", Rupd ("A", TP[Dest ("CPSR", CTy"PSR", qVar"s"),LT])]), qVar"s"), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("IT", TP[Dest ("CPSR", CTy"PSR", qVar"s"), LW(0,8)])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("J", TP[Dest ("CPSR", CTy"PSR", qVar"s"), LF])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("T", TP[Dest ("CPSR", CTy"PSR", qVar"s"), Dest ("TE", bTy, Dest ("SCTLR", CTy"SCTLR", Dest ("CP15", CTy"CP15", qVar"s")))])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("E", TP[Dest ("CPSR", CTy"PSR", qVar"s"), Dest ("EE", bTy, Dest ("SCTLR", CTy"SCTLR", Dest ("CP15", CTy"CP15", qVar"s")))])]), ITE(Dest ("VE",bTy, Dest ("SCTLR", CTy"SCTLR", Dest ("CP15", CTy"CP15", qVar"s"))), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy, PTy(uTy, qTy)), Call ("IMPLEMENTATION_DEFINED", CTy"exception", LS "branch to an FIQ vector")), qVar"s")), Apply (Call ("BranchTo", ATy(qTy, qTy), Bop(Add, Apply (Call ("ExcVectorBase", ATy(qTy, F32), LU), qVar"s"), Var("vect_offset", F32))), qVar"s"))))))))))))))))) ; val TakeVirtualFIQException_def = Def ("TakeVirtualFIQException",AVar uTy, Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"state")), Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), TP[Bop(Sub,Var("v",F32),LW(4,32)),qVar"s"])), Let(qVar"s", Apply (Call("write'R",ATy(qTy,qTy),TP[Var("v",F32),LW(14,4)]), Apply (Call ("write'SPSR",ATy(qTy,qTy), Dest("CPSR",CTy"PSR",qVar"s")), Rupd ("CPSR", TP[qVar"s", Rupd ("M", TP[Dest("CPSR",CTy"PSR",qVar"s"),LW(17,5)])]))), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd("I",TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd("F",TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("A", TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("IT", TP[Dest("CPSR",CTy"PSR",qVar"s"), LW(0,8)])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("J", TP[Dest ("CPSR",CTy"PSR",qVar"s"), LF])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("T", TP[Dest ("CPSR",CTy"PSR", qVar"s"), Dest ("TE",bTy, Dest ("SCTLR", CTy"SCTLR", Dest ("CP15", CTy"CP15", qVar"s")))])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("E", TP[Dest ("CPSR",CTy"PSR", qVar"s"), Dest ("EE",bTy, Dest ("SCTLR", CTy"SCTLR", Dest ("CP15", CTy"CP15", qVar"s")))])]), ITE(Dest ("VE",bTy, Dest ("SCTLR",CTy"SCTLR", Dest ("CP15",CTy"CP15", qVar"s"))), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy, PTy(uTy,qTy)), Call ("IMPLEMENTATION_DEFINED", CTy"exception", LS "branch to an FIQ vector")), qVar"s")), Apply (Call ("BranchTo", ATy(qTy,qTy), Bop(Add, Apply (Call ("ExcVectorBase", ATy(qTy,F32), LU),qVar"s"), LW(28,32))), qVar"s"))))))))))))) ; val TakeHypTrapException_def = Def ("TakeHypTrapException",AVar uTy, Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"state")), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), TP[Bop(Sub,Var("v",F32),LW(4,32)),qVar"s"]), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), TP[Bop(Sub,Var("v",F32),LW(8,32)),qVar"s"])), Apply (Call ("EnterHypMode",ATy(qTy,qTy), TP[Dest("CPSR",CTy"PSR",qVar"s"),Var("v",F32),LW(20,32)]), qVar"s")))) ; val WriteHSR_def = Def ("WriteHSR",TP[Var("ec",FTy 6),Var("HSRString",FTy 25)], Close (qVar"state", Let(Var("s0",F32),BFI(LN 31,LN 26,Var("ec",FTy 6),LW(0,32)), Let(Var("s0",F32), ITE(Bop(Or, Mop(Not, EQ(EX(Var("ec",FTy 6),LN 5,LN 3,FTy 3),LW(4,3))), Bop(And,Bop(Bit,Var("ec",FTy 6),LN 2), Bop(Bit,Var("HSRString",FTy 25),LN 24))), BFI(LN 25,LN 25, Mop(Cast F1, EQ(Apply (Call("ThisInstrLength",ATy(qTy,nTy),LU), qVar"state"),LN 32)),Var("s0",F32)), Var("s0",F32)), Let(Var("s",PTy(F32,qTy)), ITE(Bop(And, EQ(EX(Var("ec",FTy 6),LN 5,LN 4,FTy 2),LW(0,2)), Mop(Not, EQ(EX(Var("ec",FTy 6),LN 3,LN 0,F4),LW(0,4)))), ITE(EQ(Apply (Call ("CurrentInstrSet", ATy(qTy,CTy"InstrSet"),LU),qVar"state"), LC("InstrSet_ARM",CTy"InstrSet")), TP[BFI(LN 23,LN 20, Apply (Call("CurrentCond",ATy(qTy,F4),LU), qVar"state"), BFI(LN 24,LN 24,Mop(Cast F1,LT), Var("s0",F32))),qVar"state"], Let(Var("s0",F32), BFI(LN 24,LN 24,Mop(Cast F1,LX bTy), Var("s0",F32)), TP[BFI(LN 19,LN 0, EX(Var("HSRString",FTy 25),LN 19, LN 0,FTy 20), ITE(Bop(Bit,Var("s0",F32),LN 24), ITE(Apply (Call ("ConditionPassed", ATy(qTy,bTy),LU), qVar"state"), BFI(LN 23,LN 20, ITE(LX bTy, Apply (Call ("CurrentCond", ATy(qTy,F4),LU), qVar"state"), LW(14,4)), Var("s0",F32)), BFI(LN 23,LN 20, Apply (Call ("CurrentCond", ATy(qTy,F4),LU), qVar"state"), Var("s0",F32))), Var("s0",F32))),qVar"state"])), TP[BFI(LN 24,LN 0,Var("HSRString",FTy 25), Var("s0",F32)),qVar"state"]), Rupd ("CP15", TP[Mop(Snd,Var("s",PTy(F32,qTy))), Rupd ("HSR", TP[Dest ("CP15",CTy"CP15", Mop(Snd,Var("s",PTy(F32,qTy)))), Call ("write'reg'HSR",CTy"HSR", TP[Dest ("HSR",CTy"HSR", Dest ("CP15",CTy"CP15", Mop(Snd,Var("s",PTy(F32,qTy))))), Mop(Fst,Var("s",PTy(F32,qTy)))])])])))))) ; val CallSupervisor_def = Def ("CallSupervisor",Var("immediate",F16), Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), Apply (Call("TakeSVCException",ATy(qTy,qTy),LU), Let(TP[bVar"v",qVar"s"], ITB([(bVar"v",TP[LT,qVar"s"]), (Apply(Call("HaveVirtExt",ATy(qTy,bTy),LU),qVar"s"), ITE(Mop(Not, Apply (Call("IsSecure",ATy(qTy,bTy),LU),qVar"s")), Let(TP[bVar"v",qVar"s"], Apply (Call ("CurrentModeIsNotUser", ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"), TP[Bop(And,Mop(Not,bVar"v"), Dest ("TGE",bTy, Dest ("HCR",CTy"HCR", Dest("CP15",CTy"CP15",qVar"s")))), qVar"s"]),TP[LF,qVar"s"]))], TP[LF,qVar"s"]), ITE(bVar"v", Apply (Call ("WriteHSR",ATy(qTy,qTy), TP[LW(18,6), BFI(LN 15,LN 0, ITE(EQ(Apply (Call ("CurrentCond",ATy(qTy,F4), LU),qVar"s"),LW(14,4)), Var("immediate",F16),LX F16), LW(0,25))]),qVar"s"),qVar"s")))))) ; val CallHypervisor_def = Def ("CallHypervisor",Var("immediate",F16), Close (qVar"state", Apply (Call("TakeHVCException",ATy(qTy,qTy),LU), Apply (Call ("WriteHSR",ATy(qTy,qTy), TP[LW(18,6),CC[Var("immediate",F16),LW(0,9)]]),qVar"state")))) ; val BankedRegisterAccessValid_def = Def ("BankedRegisterAccessValid",TP[Var("SYSm",FTy 5),Var("mode",FTy 5)], Close (qVar"state", ITB([(EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2),LW(0,2)), ITB([(EQ(EX(Var("SYSm",FTy 5),LN 2,LN 0,FTy 3),LW(7,3)), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"BankedRegisterAccessValid")),qVar"state"))), (EQ(EX(Var("SYSm",FTy 5),LN 2,LN 0,FTy 3),LW(6,3)), ITE(Bop(In,Var("mode",FTy 5),SL[LW(26,5),LW(31,5)]), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"BankedRegisterAccessValid")), qVar"state")),qVar"state")), (EQ(EX(Var("SYSm",FTy 5),LN 2,LN 0,FTy 3),LW(5,3)), ITE(EQ(Var("mode",FTy 5),LW(31,5)), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"BankedRegisterAccessValid")), qVar"state")),qVar"state")), (Mop(Not,EQ(Var("mode",FTy 5),LW(17,5))), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"BankedRegisterAccessValid")),qVar"state")))], qVar"state")), (EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2),LW(1,2)), ITE(Bop(Or,EQ(EX(Var("SYSm",FTy 5),LN 2,LN 0,FTy 3),LW(7,3)), Bop(Or,EQ(Var("mode",FTy 5),LW(17,5)), Bop(And, Dest ("RFR",bTy, Dest ("NSACR",CTy"NSACR", Dest("CP15",CTy"CP15",qVar"state"))), Mop(Not, Apply (Call("IsSecure",ATy(qTy,bTy),LU), qVar"state"))))), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"BankedRegisterAccessValid")),qVar"state")), qVar"state")), (EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2),LW(3,2)), ITB([(Mop(Not,Bop(Bit,Var("SYSm",FTy 5),LN 2)), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"BankedRegisterAccessValid")),qVar"state"))), (Mop(Not,Bop(Bit,Var("SYSm",FTy 5),LN 1)), ITE(Bop(Or, Mop(Not, Apply (Call("IsSecure",ATy(qTy,bTy),LU), qVar"state")), EQ(Var("mode",FTy 5),LW(22,5))), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"BankedRegisterAccessValid")), qVar"state")),qVar"state")), (Mop(Not,EQ(Var("mode",FTy 5),LW(22,5))), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"BankedRegisterAccessValid")),qVar"state")))], qVar"state"))],qVar"state"))) ; val SPSRAccessValid_def = Def ("SPSRAccessValid",TP[Var("SYSm",FTy 5),Var("mode",FTy 5)], Close (qVar"state", CS(Var("SYSm",FTy 5), [(LW(14,5), ITE(Bop(Or, Bop(And, Mop(Not, Apply (Call("IsSecure",ATy(qTy,bTy),LU),qVar"state")), Dest ("RFR",bTy, Dest ("NSACR",CTy"NSACR", Dest("CP15",CTy"CP15",qVar"state")))), EQ(Var("mode",FTy 5),LW(17,5))), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"SPSRAccessValid")),qVar"state")), qVar"state")), (LW(16,5), ITE(EQ(Var("mode",FTy 5),LW(18,5)), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"SPSRAccessValid")),qVar"state")), qVar"state")), (LW(18,5), ITE(EQ(Var("mode",FTy 5),LW(19,5)), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"SPSRAccessValid")),qVar"state")), qVar"state")), (LW(20,5), ITE(EQ(Var("mode",FTy 5),LW(23,5)), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"SPSRAccessValid")),qVar"state")), qVar"state")), (LW(22,5), ITE(EQ(Var("mode",FTy 5),LW(27,5)), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"SPSRAccessValid")),qVar"state")), qVar"state")), (LW(28,5), ITE(Bop(Or,EQ(Var("mode",FTy 5),LW(22,5)), Mop(Not, Apply(Call("IsSecure",ATy(qTy,bTy),LU),qVar"state"))), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"SPSRAccessValid")),qVar"state")), qVar"state")), (LW(30,5), ITE(Mop(Not,EQ(Var("mode",FTy 5),LW(22,5))), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"SPSRAccessValid")),qVar"state")), qVar"state")), (AVar(FTy 5), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception",LS"SPSRAccessValid")), qVar"state")))]))) ; val rec'FPSCR_def = Def ("rec'FPSCR",Var("x",F32), Rec(CTy"FPSCR", [Bop(Bit,Var("x",F32),LN 26),Bop(Bit,Var("x",F32),LN 29), Bop(Bit,Var("x",F32),LN 25),Bop(Bit,Var("x",F32),LN 1), Bop(Bit,Var("x",F32),LN 9),Bop(Bit,Var("x",F32),LN 24), Bop(Bit,Var("x",F32),LN 7),Bop(Bit,Var("x",F32),LN 15), Bop(Bit,Var("x",F32),LN 0),Bop(Bit,Var("x",F32),LN 8), Bop(Bit,Var("x",F32),LN 4),Bop(Bit,Var("x",F32),LN 12), Bop(Bit,Var("x",F32),LN 31),Bop(Bit,Var("x",F32),LN 2), Bop(Bit,Var("x",F32),LN 10),Bop(Bit,Var("x",F32),LN 27), EX(Var("x",F32),LN 23,LN 22,FTy 2),Bop(Bit,Var("x",F32),LN 3), Bop(Bit,Var("x",F32),LN 11),Bop(Bit,Var("x",F32),LN 28), Bop(Bit,Var("x",F32),LN 30), CC[EX(Var("x",F32),LN 6,LN 5,FTy 2), EX(Var("x",F32),LN 14,LN 13,FTy 2), EX(Var("x",F32),LN 21,LN 16,FTy 6)]])) ; val reg'FPSCR_def = Def ("reg'FPSCR",Var("x",CTy"FPSCR"), CS(Var("x",CTy"FPSCR"), [(Rec(CTy"FPSCR", [bVar"AHP",bVar"C",bVar"DN",bVar"DZC",bVar"DZE",bVar"FZ", bVar"IDC",bVar"IDE",bVar"IOC",bVar"IOE",bVar"IXC",bVar"IXE", bVar"N",bVar"OFC",bVar"OFE",bVar"QC",Var("RMode",FTy 2), bVar"UFC",bVar"UFE",bVar"V",bVar"Z",Var("fpscr'rst",FTy 10)]), CC[Mop(Cast F1,bVar"N"),Mop(Cast F1,bVar"Z"),Mop(Cast F1,bVar"C"), Mop(Cast F1,bVar"V"),Mop(Cast F1,bVar"QC"), Mop(Cast F1,bVar"AHP"),Mop(Cast F1,bVar"DN"), Mop(Cast F1,bVar"FZ"),Var("RMode",FTy 2), EX(Var("fpscr'rst",FTy 10),LN 5,LN 0,FTy 6), Mop(Cast F1,bVar"IDE"), EX(Var("fpscr'rst",FTy 10),LN 7,LN 6,FTy 2), Mop(Cast F1,bVar"IXE"),Mop(Cast F1,bVar"UFE"), Mop(Cast F1,bVar"OFE"),Mop(Cast F1,bVar"DZE"), Mop(Cast F1,bVar"IOE"),Mop(Cast F1,bVar"IDC"), EX(Var("fpscr'rst",FTy 10),LN 9,LN 8,FTy 2), Mop(Cast F1,bVar"IXC"),Mop(Cast F1,bVar"UFC"), Mop(Cast F1,bVar"OFC"),Mop(Cast F1,bVar"DZC"), Mop(Cast F1,bVar"IOC")])])) ; val write'rec'FPSCR_def = Def ("write'rec'FPSCR",TP[AVar F32,Var("x",CTy"FPSCR")], Call("reg'FPSCR",F32,Var("x",CTy"FPSCR"))) ; val write'reg'FPSCR_def = Def ("write'reg'FPSCR",TP[AVar(CTy"FPSCR"),Var("x",F32)], Call("rec'FPSCR",CTy"FPSCR",Var("x",F32))) ; val RoundingMode_def = Def ("RoundingMode",qVar"state", CS(Dest ("RMode",FTy 2, Dest("FPSCR",CTy"FPSCR",Dest("FP",CTy"FP",qVar"state"))), [(LW(0,2),binary_ieeeSyntax.roundTiesToEven_tm), (LW(1,2),binary_ieeeSyntax.roundTowardPositive_tm), (LW(2,2),binary_ieeeSyntax.roundTowardNegative_tm), (LW(3,2),binary_ieeeSyntax.roundTowardZero_tm)])) ; val FPAdd32_def = Def ("FPAdd32",TP[Var("op1",F32),Var("op2",F32)], Close (qVar"state", Mop(FPAdd 32, TP[Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state"), Var("op1",F32),Var("op2",F32)]))) ; val FPSub32_def = Def ("FPSub32",TP[Var("op1",F32),Var("op2",F32)], Close (qVar"state", Mop(FPSub 32, TP[Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state"), Var("op1",F32),Var("op2",F32)]))) ; val FPMul32_def = Def ("FPMul32",TP[Var("op1",F32),Var("op2",F32)], Close (qVar"state", Mop(FPMul 32, TP[Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state"), Var("op1",F32),Var("op2",F32)]))) ; val FPAdd64_def = Def ("FPAdd64",TP[Var("op1",F64),Var("op2",F64)], Close (qVar"state", Mop(FPAdd 64, TP[Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state"), Var("op1",F64),Var("op2",F64)]))) ; val FPSub64_def = Def ("FPSub64",TP[Var("op1",F64),Var("op2",F64)], Close (qVar"state", Mop(FPSub 64, TP[Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state"), Var("op1",F64),Var("op2",F64)]))) ; val FPMul64_def = Def ("FPMul64",TP[Var("op1",F64),Var("op2",F64)], Close (qVar"state", Mop(FPMul 64, TP[Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state"), Var("op1",F64),Var("op2",F64)]))) ; val FPToFixed32_def = Def ("FPToFixed32", TP[Var("operand",F32),bVar"unsigned",bVar"round_towards_zero"], Close (qVar"state", CS(Mop(FPToInt 32, TP[ITE(bVar"round_towards_zero", binary_ieeeSyntax.roundTowardZero_tm, Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state")), Var("operand",F32)]), [(Mop(Some,iVar"i"), Let(TP[Var("v",PTy(F32,bTy)),qVar"s"], Apply (Call ("SatQ",ATy(qTy,PTy(PTy(F32,bTy),qTy)), TP[iVar"i",LN 32,bVar"unsigned"]),qVar"state"), Let(TP[Var("result",F32),bVar"overflow"], Var("v",PTy(F32,bTy)), ITE(bVar"overflow", Apply (Call ("raise'exception",ATy(qTy,PTy(F32,qTy)), Call ("VFP_EXCEPTION",CTy"exception", LS"FPToFixed32: overflow exception")), qVar"s"),TP[Var("result",F32),qVar"s"])))), (LO iTy, Apply (Call ("raise'exception",ATy(qTy,PTy(F32,qTy)), Call ("VFP_EXCEPTION",CTy"exception", LS"FPToFixed32: NaN or infinity")),qVar"state"))]))) ; val FPToFixed64_def = Def ("FPToFixed64", TP[Var("operand",F64),bVar"unsigned",bVar"round_towards_zero"], Close (qVar"state", CS(Mop(FPToInt 64, TP[ITE(bVar"round_towards_zero", binary_ieeeSyntax.roundTowardZero_tm, Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state")), Var("operand",F64)]), [(Mop(Some,iVar"i"), Let(TP[Var("v",PTy(F32,bTy)),qVar"s"], Apply (Call ("SatQ",ATy(qTy,PTy(PTy(F32,bTy),qTy)), TP[iVar"i",LN 32,bVar"unsigned"]),qVar"state"), Let(TP[Var("result",F32),bVar"overflow"], Var("v",PTy(F32,bTy)), ITE(bVar"overflow", Apply (Call ("raise'exception",ATy(qTy,PTy(F32,qTy)), Call ("VFP_EXCEPTION",CTy"exception", LS"FPToFixed64: overflow exception")), qVar"s"),TP[Var("result",F32),qVar"s"])))), (LO iTy, Apply (Call ("raise'exception",ATy(qTy,PTy(F32,qTy)), Call ("VFP_EXCEPTION",CTy"exception", LS"FPToFixed64: NaN or infinity")),qVar"state"))]))) ; val FixedToFP32_def = Def ("FixedToFP32", TP[Var("operand",F32),bVar"unsigned",bVar"round_to_nearest"], Close (qVar"state", Mop(FPFromInt 32, TP[ITE(bVar"round_to_nearest", binary_ieeeSyntax.roundTiesToEven_tm, Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state")), ITE(bVar"unsigned", Mop(Cast iTy,Mop(Cast nTy,Var("operand",F32))), Mop(Cast iTy,Var("operand",F32)))]))) ; val FixedToFP64_def = Def ("FixedToFP64", TP[Var("operand",F32),bVar"unsigned",bVar"round_to_nearest"], Close (qVar"state", Mop(FPFromInt 64, TP[ITE(bVar"round_to_nearest", binary_ieeeSyntax.roundTiesToEven_tm, Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state")), ITE(bVar"unsigned", Mop(Cast iTy,Mop(Cast nTy,Var("operand",F32))), Mop(Cast iTy,Var("operand",F32)))]))) ; val D_def = Def ("D",Var("n",FTy 5), Close (qVar"state", Apply (Dest("REG",ATy(FTy 5,F64),Dest("FP",CTy"FP",qVar"state")), Var("n",FTy 5)))) ; val write'D_def = Def ("write'D",TP[Var("value",F64),Var("n",FTy 5)], Close (qVar"state", Rupd ("FP", TP[qVar"state", Rupd ("REG", TP[Dest("FP",CTy"FP",qVar"state"), Fupd (Dest ("REG",ATy(FTy 5,F64), Dest("FP",CTy"FP",qVar"state")),Var("n",FTy 5), Var("value",F64))])]))) ; val S_def = Def ("S",Var("n",FTy 5), Close (qVar"state", ITE(Bop(Bit,Var("n",FTy 5),LN 0), EX(Apply (Call("D",ATy(qTy,F64),Bop(Div,Var("n",FTy 5),LW(2,5))), qVar"state"),LN 63,LN 32,F32), EX(Apply (Call("D",ATy(qTy,F64),Bop(Div,Var("n",FTy 5),LW(2,5))), qVar"state"),LN 31,LN 0,F32)))) ; val write'S_def = Def ("write'S",TP[Var("value",F32),Var("n",FTy 5)], Close (qVar"state", ITE(Bop(Bit,Var("n",FTy 5),LN 0), Let(Var("x",FTy 5),Bop(Div,Var("n",FTy 5),LW(2,5)), Apply (Call ("write'D",ATy(qTy,qTy), TP[BFI(LN 63,LN 32,Var("value",F32), Apply (Call("D",ATy(qTy,F64),Var("x",FTy 5)), qVar"state")),Var("x",FTy 5)]),qVar"state")), Let(Var("x",FTy 5),Bop(Div,Var("n",FTy 5),LW(2,5)), Apply (Call ("write'D",ATy(qTy,qTy), TP[BFI(LN 31,LN 0,Var("value",F32), Apply (Call("D",ATy(qTy,F64),Var("x",FTy 5)), qVar"state")),Var("x",FTy 5)]),qVar"state"))))) ; val VFPExpandImm_def = Def ("VFPExpandImm",TP[Var("imm8",F8),bVar"single"], ITE(bVar"single", Mop(Cast F64, CC[EX(Var("imm8",F8),LN 7,LN 7,F1), Mop(BNot,EX(Var("imm8",F8),LN 6,LN 6,F1)), REP(EX(Var("imm8",F8),LN 6,LN 6,F1),LN 5,FTy 5), EX(Var("imm8",F8),LN 5,LN 0,FTy 6),REP(LW(0,1),LN 19,FTy 19)]), CC[EX(Var("imm8",F8),LN 7,LN 7,F1), Mop(BNot,EX(Var("imm8",F8),LN 6,LN 6,F1)), REP(EX(Var("imm8",F8),LN 6,LN 6,F1),LN 8,F8), EX(Var("imm8",F8),LN 5,LN 0,FTy 6),REP(LW(0,1),LN 48,FTy 48)])) ; val FPCompare32_def = Def ("FPCompare32",TP[Var("op1",F32),Var("op2",F32)], ITB([(Bop(Or,Mop(FPIsNan 32,Var("op1",F32)), Mop(FPIsNan 32,Var("op2",F32))),LW(3,4)), (Mop(FPEq 32,TP[Var("op1",F32),Var("op2",F32)]),LW(6,4)), (Mop(FPLt 32,TP[Var("op1",F32),Var("op2",F32)]),LW(8,4))],LW(2,4))) ; val FPCompare64_def = Def ("FPCompare64",TP[Var("op1",F64),Var("op2",F64)], ITB([(Bop(Or,Mop(FPIsNan 64,Var("op1",F64)), Mop(FPIsNan 64,Var("op2",F64))),LW(3,4)), (Mop(FPEq 64,TP[Var("op1",F64),Var("op2",F64)]),LW(6,4)), (Mop(FPLt 64,TP[Var("op1",F64),Var("op2",F64)]),LW(8,4))],LW(2,4))) ; val FPZero32_def = Def ("FPZero32",Var("sign",F1),CC[Var("sign",F1),LW(0,31)]) ; val FPZero64_def = Def ("FPZero64",Var("sign",F1),CC[Var("sign",F1),LW(0,63)]) ; val dfn'vmov_imm_def = Def ("dfn'vmov_imm", TP[bVar"single_register",Var("d",FTy 5),Var("imm64",F64)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"single_register", Apply (Call ("write'S",ATy(qTy,qTy), TP[EX(Var("imm64",F64),LN 31,LN 0,F32),Var("d",FTy 5)]), qVar"state"), Apply (Call ("write'D",ATy(qTy,qTy), TP[Var("imm64",F64),Var("d",FTy 5)]),qVar"state"))))) ; val dfn'vmov_def = Def ("dfn'vmov",TP[bVar"single_register",Var("d",FTy 5),Var("m",FTy 5)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"single_register", Apply (Call ("write'S",ATy(qTy,qTy), TP[Apply (Call("S",ATy(qTy,F32),Var("m",FTy 5)),qVar"state"), Var("d",FTy 5)]),qVar"state"), Apply (Call ("write'D",ATy(qTy,qTy), TP[Apply (Call("D",ATy(qTy,F64),Var("m",FTy 5)),qVar"state"), Var("d",FTy 5)]),qVar"state"))))) ; val dfn'vmov_single_def = Def ("dfn'vmov_single",TP[bVar"to_arm_register",Var("t",F4),Var("n",FTy 5)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"to_arm_register", Apply (Call ("write'R",ATy(qTy,qTy), TP[Apply (Call("S",ATy(qTy,F32),Var("n",FTy 5)),qVar"state"), Var("t",F4)]),qVar"state"), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("t",F4)), qVar"state"), Apply (Call ("write'S",ATy(qTy,qTy), TP[Var("v",F32),Var("n",FTy 5)]),qVar"s")))))) ; val dfn'vmov_two_singles_def = Def ("dfn'vmov_two_singles", TP[bVar"to_arm_registers",Var("t",F4),Var("t2",F4),Var("m",FTy 5)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"to_arm_registers", Let(TP[Var("v",F32),qVar"s"], Let(qVar"s0", Apply (Call ("write'R",ATy(qTy,qTy), TP[Apply (Call("S",ATy(qTy,F32),Var("m",FTy 5)), qVar"state"),Var("t",F4)]),qVar"state"), TP[Apply (Call ("S",ATy(qTy,F32), Bop(Add,Var("m",FTy 5),LW(1,5))),qVar"s0"), qVar"s0"]), Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("v",F32),Var("t2",F4)]),qVar"s")), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("t",F4)), qVar"state"), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("t2",F4)), Apply (Call ("write'S",ATy(qTy,qTy), TP[Var("v",F32),Var("m",FTy 5)]),qVar"s")), Apply (Call ("write'S",ATy(qTy,qTy), TP[Var("v",F32),Bop(Add,Var("m",FTy 5),LW(1,5))]), qVar"s"))))))) ; val dfn'vmov_double_def = Def ("dfn'vmov_double", TP[bVar"to_arm_registers",Var("t",F4),Var("t2",F4),Var("m",FTy 5)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"to_arm_registers", Let(TP[Var("v",F64),qVar"s"], Let(qVar"s0", Apply (Call ("write'R",ATy(qTy,qTy), TP[EX(Apply (Call("D",ATy(qTy,F64),Var("m",FTy 5)), qVar"state"),LN 31,LN 0,F32), Var("t",F4)]),qVar"state"), TP[Apply (Call("D",ATy(qTy,F64),Var("m",FTy 5)),qVar"s0"), qVar"s0"]), Apply (Call ("write'R",ATy(qTy,qTy), TP[EX(Var("v",F64),LN 63,LN 32,F32),Var("t2",F4)]), qVar"s")), Let(TP[Var("v",F64),qVar"s"], Let(qVar"s0", Let(TP[Var("v0",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("t",F4)), qVar"state"), Apply (Call ("write'D",ATy(qTy,qTy), TP[BFI(LN 31,LN 0,Var("v0",F32), Apply (Call ("D",ATy(qTy,F64), Var("m",FTy 5)),qVar"state")), Var("m",FTy 5)]),qVar"s")), TP[Apply (Call("D",ATy(qTy,F64),Var("m",FTy 5)),qVar"s0"), qVar"s0"]), Let(TP[Var("v0",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("t2",F4)), qVar"s"), Apply (Call ("write'D",ATy(qTy,qTy), TP[BFI(LN 63,LN 32,Var("v0",F32),Var("v",F64)), Var("m",FTy 5)]),qVar"s"))))))) ; val dfn'vabs_def = Def ("dfn'vabs",TP[bVar"dp_operation",Var("d",FTy 5),Var("m",FTy 5)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"dp_operation", Apply (Call ("write'D",ATy(qTy,qTy), TP[Mop(FPAbs 64, Apply (Call("D",ATy(qTy,F64),Var("m",FTy 5)), qVar"state")),Var("d",FTy 5)]),qVar"state"), Apply (Call ("write'S",ATy(qTy,qTy), TP[Mop(FPAbs 32, Apply (Call("S",ATy(qTy,F32),Var("m",FTy 5)), qVar"state")),Var("d",FTy 5)]),qVar"state"))))) ; val dfn'vneg_def = Def ("dfn'vneg",TP[bVar"dp_operation",Var("d",FTy 5),Var("m",FTy 5)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"dp_operation", Apply (Call ("write'D",ATy(qTy,qTy), TP[Mop(FPNeg 64, Apply (Call("D",ATy(qTy,F64),Var("m",FTy 5)), qVar"state")),Var("d",FTy 5)]),qVar"state"), Apply (Call ("write'S",ATy(qTy,qTy), TP[Mop(FPNeg 32, Apply (Call("S",ATy(qTy,F32),Var("m",FTy 5)), qVar"state")),Var("d",FTy 5)]),qVar"state"))))) ; val dfn'vsqrt_def = Def ("dfn'vsqrt",TP[bVar"dp_operation",Var("d",FTy 5),Var("m",FTy 5)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"dp_operation", Apply (Call ("write'D",ATy(qTy,qTy), TP[Mop(FPSqrt 64, TP[Apply (Const("RoundingMode",ATy(qTy,rTy)), qVar"state"), Apply (Call("D",ATy(qTy,F64),Var("m",FTy 5)), qVar"state")]),Var("d",FTy 5)]), qVar"state"), Apply (Call ("write'S",ATy(qTy,qTy), TP[Mop(FPSqrt 32, TP[Apply (Const("RoundingMode",ATy(qTy,rTy)), qVar"state"), Apply (Call("S",ATy(qTy,F32),Var("m",FTy 5)), qVar"state")]),Var("d",FTy 5)]), qVar"state"))))) ; val dfn'vcvt_float_def = Def ("dfn'vcvt_float", TP[bVar"double_to_single",Var("d",FTy 5),Var("m",FTy 5)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"double_to_single", Apply (Call ("write'S",ATy(qTy,qTy), TP[Mop(FP64To32, TP[Apply (Const("RoundingMode",ATy(qTy,rTy)), qVar"state"), Apply (Call("D",ATy(qTy,F64),Var("m",FTy 5)), qVar"state")]),Var("d",FTy 5)]), qVar"state"), Apply (Call ("write'D",ATy(qTy,qTy), TP[Mop(FP32To64, Apply (Call("S",ATy(qTy,F32),Var("m",FTy 5)), qVar"state")),Var("d",FTy 5)]),qVar"state"))))) ; val dfn'vcvt_to_integer_def = Def ("dfn'vcvt_to_integer", TP[bVar"dp_operation",bVar"unsigned",bVar"round_zero",Var("d",FTy 5), Var("m",FTy 5)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"dp_operation", Let(TP[Var("v",PTy(F32,FTy 5)),qVar"s"], Let(TP[Var("v",F32),qVar"s"], Apply (Call ("FPToFixed64",ATy(qTy,PTy(F32,qTy)), TP[Apply (Call("D",ATy(qTy,F64),Var("m",FTy 5)), qVar"state"),bVar"unsigned", bVar"round_zero"]),qVar"state"), TP[TP[Var("v",F32),Var("d",FTy 5)],qVar"s"]), Apply (Call("write'S",ATy(qTy,qTy),Var("v",PTy(F32,FTy 5))), qVar"s")), Let(TP[Var("v",PTy(F32,FTy 5)),qVar"s"], Let(TP[Var("v",F32),qVar"s"], Apply (Call ("FPToFixed32",ATy(qTy,PTy(F32,qTy)), TP[Apply (Call("S",ATy(qTy,F32),Var("m",FTy 5)), qVar"state"),bVar"unsigned", bVar"round_zero"]),qVar"state"), TP[TP[Var("v",F32),Var("d",FTy 5)],qVar"s"]), Apply (Call("write'S",ATy(qTy,qTy),Var("v",PTy(F32,FTy 5))), qVar"s")))))) ; val dfn'vcvt_from_integer_def = Def ("dfn'vcvt_from_integer", TP[bVar"dp_operation",bVar"unsigned",Var("d",FTy 5),Var("m",FTy 5)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"dp_operation", Apply (Call ("write'D",ATy(qTy,qTy), TP[Apply (Call ("FixedToFP64",ATy(qTy,F64), TP[Apply (Call("S",ATy(qTy,F32),Var("m",FTy 5)), qVar"state"),bVar"unsigned",LF]), qVar"state"),Var("d",FTy 5)]),qVar"state"), Apply (Call ("write'S",ATy(qTy,qTy), TP[Apply (Call ("FixedToFP32",ATy(qTy,F32), TP[Apply (Call("S",ATy(qTy,F32),Var("m",FTy 5)), qVar"state"),bVar"unsigned",LF]), qVar"state"),Var("d",FTy 5)]),qVar"state"))))) ; val dfn'vcmp_def = Def ("dfn'vcmp", TP[bVar"dp_operation",Var("d",FTy 5),Var("m_with_zero",OTy(FTy 5))], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"dp_operation", Let(TP[Var("v",F64),qVar"s"], CS(Var("m_with_zero",OTy(FTy 5)), [(Mop(Some,Var("m",FTy 5)), TP[Apply (Call("D",ATy(qTy,F64),Var("m",FTy 5)), qVar"state"),qVar"state"]), (LO(FTy 5), TP[Call("FPZero64",F64,LW(0,1)),qVar"state"])]), Let(Var("v0",CTy"FPSCR"), Dest("FPSCR",CTy"FPSCR",Dest("FP",CTy"FP",qVar"s")), Rupd ("FP", TP[qVar"s", Rupd ("FPSCR", TP[Dest("FP",CTy"FP",qVar"s"), Call ("write'reg'FPSCR",CTy"FPSCR", TP[Var("v0",CTy"FPSCR"), BFI(LN 31,LN 28, Call ("FPCompare64",F4, TP[Apply (Call ("D",ATy(qTy,F64), Var("d",FTy 5)), qVar"s"),Var("v",F64)]), Call ("reg'FPSCR",F32, Var("v0",CTy"FPSCR")))])])]))), Let(TP[Var("v",F32),qVar"s"], CS(Var("m_with_zero",OTy(FTy 5)), [(Mop(Some,Var("m",FTy 5)), TP[Apply (Call("S",ATy(qTy,F32),Var("m",FTy 5)), qVar"state"),qVar"state"]), (LO(FTy 5), TP[Call("FPZero32",F32,LW(0,1)),qVar"state"])]), Let(Var("v0",CTy"FPSCR"), Dest("FPSCR",CTy"FPSCR",Dest("FP",CTy"FP",qVar"s")), Rupd ("FP", TP[qVar"s", Rupd ("FPSCR", TP[Dest("FP",CTy"FP",qVar"s"), Call ("write'reg'FPSCR",CTy"FPSCR", TP[Var("v0",CTy"FPSCR"), BFI(LN 31,LN 28, Call ("FPCompare32",F4, TP[Apply (Call ("S",ATy(qTy,F32), Var("d",FTy 5)), qVar"s"),Var("v",F32)]), Call ("reg'FPSCR",F32, Var("v0",CTy"FPSCR")))])])]))))))) ; val dfn'vmsr_def = Def ("dfn'vmsr",Var("t",F4), Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), Let(TP[Var("v",CTy"FP"),qVar"s"], Let(TP[Var("v",PTy(CTy"FP",CTy"FPSCR")),qVar"s"], Let(TP[Var("v0",F32),qVar"s0"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("t",F4)), qVar"state"), TP[TP[Dest("FP",CTy"FP",qVar"state"), Call ("write'reg'FPSCR",CTy"FPSCR", TP[Dest ("FPSCR",CTy"FPSCR", Dest("FP",CTy"FP",qVar"state")), Var("v0",F32)])],qVar"s0"]), TP[Rupd("FPSCR",Var("v",PTy(CTy"FP",CTy"FPSCR"))),qVar"s"]), Rupd("FP",TP[qVar"s",Var("v",CTy"FP")]))))) ; val dfn'vmrs_def = Def ("dfn'vmrs",Var("t",F4), Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(Mop(Not,EQ(Var("t",F4),LW(15,4))), Apply (Call ("write'R",ATy(qTy,qTy), TP[Call ("reg'FPSCR",F32, Dest ("FPSCR",CTy"FPSCR", Dest("FP",CTy"FP",qVar"state"))),Var("t",F4)]), qVar"state"), Let(qVar"s", Rupd ("CPSR", TP[qVar"state", Rupd ("N", TP[Dest("CPSR",CTy"PSR",qVar"state"), Dest ("N",bTy, Dest ("FPSCR",CTy"FPSCR", Dest("FP",CTy"FP",qVar"state")))])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("Z", TP[Dest("CPSR",CTy"PSR",qVar"s"), Dest ("Z",bTy, Dest ("FPSCR",CTy"FPSCR", Dest("FP",CTy"FP",qVar"s")))])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("C", TP[Dest("CPSR",CTy"PSR",qVar"s"), Dest ("C",bTy, Dest ("FPSCR",CTy"FPSCR", Dest("FP",CTy"FP",qVar"s")))])]), Rupd ("CPSR", TP[qVar"s", Rupd ("V", TP[Dest("CPSR",CTy"PSR",qVar"s"), Dest ("V",bTy, Dest ("FPSCR",CTy"FPSCR", Dest("FP",CTy"FP",qVar"s")))])])))))))) ; val dfn'vadd_def = Def ("dfn'vadd", TP[bVar"dp_operation",Var("d",FTy 5),Var("n",FTy 5),Var("m",FTy 5)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"dp_operation", Apply (Call ("write'D",ATy(qTy,qTy), TP[Apply (Call ("FPAdd64",ATy(qTy,F64), TP[Apply (Call("D",ATy(qTy,F64),Var("n",FTy 5)), qVar"state"), Apply (Call("D",ATy(qTy,F64),Var("m",FTy 5)), qVar"state")]),qVar"state"), Var("d",FTy 5)]),qVar"state"), Apply (Call ("write'S",ATy(qTy,qTy), TP[Apply (Call ("FPAdd32",ATy(qTy,F32), TP[Apply (Call("S",ATy(qTy,F32),Var("n",FTy 5)), qVar"state"), Apply (Call("S",ATy(qTy,F32),Var("m",FTy 5)), qVar"state")]),qVar"state"), Var("d",FTy 5)]),qVar"state"))))) ; val dfn'vsub_def = Def ("dfn'vsub", TP[bVar"dp_operation",Var("d",FTy 5),Var("n",FTy 5),Var("m",FTy 5)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"dp_operation", Apply (Call ("write'D",ATy(qTy,qTy), TP[Apply (Call ("FPSub64",ATy(qTy,F64), TP[Apply (Call("D",ATy(qTy,F64),Var("n",FTy 5)), qVar"state"), Apply (Call("D",ATy(qTy,F64),Var("m",FTy 5)), qVar"state")]),qVar"state"), Var("d",FTy 5)]),qVar"state"), Apply (Call ("write'S",ATy(qTy,qTy), TP[Apply (Call ("FPSub32",ATy(qTy,F32), TP[Apply (Call("S",ATy(qTy,F32),Var("n",FTy 5)), qVar"state"), Apply (Call("S",ATy(qTy,F32),Var("m",FTy 5)), qVar"state")]),qVar"state"), Var("d",FTy 5)]),qVar"state"))))) ; val dfn'vmul_def = Def ("dfn'vmul", TP[bVar"dp_operation",Var("d",FTy 5),Var("n",FTy 5),Var("m",FTy 5)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"dp_operation", Apply (Call ("write'D",ATy(qTy,qTy), TP[Apply (Call ("FPMul64",ATy(qTy,F64), TP[Apply (Call("D",ATy(qTy,F64),Var("n",FTy 5)), qVar"state"), Apply (Call("D",ATy(qTy,F64),Var("m",FTy 5)), qVar"state")]),qVar"state"), Var("d",FTy 5)]),qVar"state"), Apply (Call ("write'S",ATy(qTy,qTy), TP[Apply (Call ("FPMul32",ATy(qTy,F32), TP[Apply (Call("S",ATy(qTy,F32),Var("n",FTy 5)), qVar"state"), Apply (Call("S",ATy(qTy,F32),Var("m",FTy 5)), qVar"state")]),qVar"state"), Var("d",FTy 5)]),qVar"state"))))) ; val dfn'vdiv_def = Def ("dfn'vdiv", TP[bVar"dp_operation",Var("d",FTy 5),Var("n",FTy 5),Var("m",FTy 5)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"dp_operation", Apply (Call ("write'D",ATy(qTy,qTy), TP[Mop(FPDiv 64, TP[Apply (Const("RoundingMode",ATy(qTy,rTy)), qVar"state"), Apply (Call("D",ATy(qTy,F64),Var("n",FTy 5)), qVar"state"), Apply (Call("D",ATy(qTy,F64),Var("m",FTy 5)), qVar"state")]),Var("d",FTy 5)]), qVar"state"), Apply (Call ("write'S",ATy(qTy,qTy), TP[Mop(FPDiv 32, TP[Apply (Const("RoundingMode",ATy(qTy,rTy)), qVar"state"), Apply (Call("S",ATy(qTy,F32),Var("n",FTy 5)), qVar"state"), Apply (Call("S",ATy(qTy,F32),Var("m",FTy 5)), qVar"state")]),Var("d",FTy 5)]), qVar"state"))))) ; val dfn'vmla_vmls_def = Def ("dfn'vmla_vmls", TP[bVar"dp_operation",bVar"add",Var("d",FTy 5),Var("n",FTy 5), Var("m",FTy 5)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"dp_operation", Let(Var("v",F64), Apply (Call ("FPMul64",ATy(qTy,F64), TP[Apply (Call("D",ATy(qTy,F64),Var("n",FTy 5)), qVar"state"), Apply (Call("D",ATy(qTy,F64),Var("m",FTy 5)), qVar"state")]),qVar"state"), Apply (Call ("write'D",ATy(qTy,qTy), TP[Apply (Call ("FPAdd64",ATy(qTy,F64), TP[Apply (Call ("D",ATy(qTy,F64),Var("n",FTy 5)), qVar"state"), ITE(bVar"add",Var("v",F64), Mop(FPNeg 64,Var("v",F64)))]), qVar"state"),Var("d",FTy 5)]),qVar"state")), Let(Var("v",F32), Apply (Call ("FPMul32",ATy(qTy,F32), TP[Apply (Call("S",ATy(qTy,F32),Var("n",FTy 5)), qVar"state"), Apply (Call("S",ATy(qTy,F32),Var("m",FTy 5)), qVar"state")]),qVar"state"), Apply (Call ("write'S",ATy(qTy,qTy), TP[Apply (Call ("FPAdd32",ATy(qTy,F32), TP[Apply (Call ("S",ATy(qTy,F32),Var("n",FTy 5)), qVar"state"), ITE(bVar"add",Var("v",F32), Mop(FPNeg 32,Var("v",F32)))]), qVar"state"),Var("d",FTy 5)]),qVar"state")))))) ; val dfn'vfma_vfms_def = Def ("dfn'vfma_vfms", TP[bVar"dp_operation",bVar"add",Var("d",FTy 5),Var("n",FTy 5), Var("m",FTy 5)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"dp_operation", Let(Var("v",F64), Apply(Call("D",ATy(qTy,F64),Var("n",FTy 5)),qVar"state"), Apply (Call ("write'D",ATy(qTy,qTy), TP[Mop(FPMulAdd 64, TP[Apply (Const("RoundingMode",ATy(qTy,rTy)), qVar"state"), ITE(bVar"add",Var("v",F64), Mop(FPNeg 64,Var("v",F64))), Apply (Call("D",ATy(qTy,F64),Var("m",FTy 5)), qVar"state"), Apply (Call("D",ATy(qTy,F64),Var("d",FTy 5)), qVar"state")]),Var("d",FTy 5)]), qVar"state")), Let(Var("v",F32), Apply(Call("S",ATy(qTy,F32),Var("n",FTy 5)),qVar"state"), Apply (Call ("write'S",ATy(qTy,qTy), TP[Mop(FPMulAdd 32, TP[Apply (Const("RoundingMode",ATy(qTy,rTy)), qVar"state"), ITE(bVar"add",Var("v",F32), Mop(FPNeg 32,Var("v",F32))), Apply (Call("S",ATy(qTy,F32),Var("m",FTy 5)), qVar"state"), Apply (Call("S",ATy(qTy,F32),Var("d",FTy 5)), qVar"state")]),Var("d",FTy 5)]), qVar"state")))))) ; val dfn'vfnma_vfnms_def = Def ("dfn'vfnma_vfnms", TP[bVar"dp_operation",bVar"add",Var("d",FTy 5),Var("n",FTy 5), Var("m",FTy 5)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"dp_operation", Let(Var("v",F64), Apply(Call("D",ATy(qTy,F64),Var("n",FTy 5)),qVar"state"), Apply (Call ("write'D",ATy(qTy,qTy), TP[Mop(FPMulAdd 64, TP[Apply (Const("RoundingMode",ATy(qTy,rTy)), qVar"state"), ITE(bVar"add",Var("v",F64), Mop(FPNeg 64,Var("v",F64))), Apply (Call("D",ATy(qTy,F64),Var("m",FTy 5)), qVar"state"), Mop(FPNeg 64, Apply (Call ("D",ATy(qTy,F64),Var("d",FTy 5)), qVar"state"))]),Var("d",FTy 5)]), qVar"state")), Let(Var("v",F32), Apply(Call("S",ATy(qTy,F32),Var("n",FTy 5)),qVar"state"), Apply (Call ("write'S",ATy(qTy,qTy), TP[Mop(FPMulAdd 32, TP[Apply (Const("RoundingMode",ATy(qTy,rTy)), qVar"state"), ITE(bVar"add",Var("v",F32), Mop(FPNeg 32,Var("v",F32))), Apply (Call("S",ATy(qTy,F32),Var("m",FTy 5)), qVar"state"), Mop(FPNeg 32, Apply (Call ("S",ATy(qTy,F32),Var("d",FTy 5)), qVar"state"))]),Var("d",FTy 5)]), qVar"state")))))) ; val dfn'vneg_mul_def = Def ("dfn'vneg_mul", TP[bVar"dp_operation",Var("typ",CTy"VFPNegMul"),Var("d",FTy 5), Var("n",FTy 5),Var("m",FTy 5)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"dp_operation", Let(Var("v",F64), Apply (Call ("FPMul64",ATy(qTy,F64), TP[Apply (Call("D",ATy(qTy,F64),Var("n",FTy 5)), qVar"state"), Apply (Call("D",ATy(qTy,F64),Var("m",FTy 5)), qVar"state")]),qVar"state"), CS(Var("typ",CTy"VFPNegMul"), [(LC("VFPNegMul_VNMLA",CTy"VFPNegMul"), Apply (Call ("write'D",ATy(qTy,qTy), TP[Apply (Call ("FPAdd64",ATy(qTy,F64), TP[Mop(FPNeg 64, Apply (Call ("D",ATy(qTy,F64), Var("d",FTy 5)), qVar"state")), Mop(FPNeg 64,Var("v",F64))]), qVar"state"),Var("d",FTy 5)]), qVar"state")), (LC("VFPNegMul_VNMLS",CTy"VFPNegMul"), Apply (Call ("write'D",ATy(qTy,qTy), TP[Apply (Call ("FPAdd64",ATy(qTy,F64), TP[Mop(FPNeg 64, Apply (Call ("D",ATy(qTy,F64), Var("d",FTy 5)), qVar"state")),Var("v",F64)]), qVar"state"),Var("d",FTy 5)]), qVar"state")), (LC("VFPNegMul_VNMUL",CTy"VFPNegMul"), Apply (Call ("write'D",ATy(qTy,qTy), TP[Mop(FPNeg 64,Var("v",F64)),Var("d",FTy 5)]), qVar"state"))])), Let(Var("v",F32), Apply (Call ("FPMul32",ATy(qTy,F32), TP[Apply (Call("S",ATy(qTy,F32),Var("n",FTy 5)), qVar"state"), Apply (Call("S",ATy(qTy,F32),Var("m",FTy 5)), qVar"state")]),qVar"state"), CS(Var("typ",CTy"VFPNegMul"), [(LC("VFPNegMul_VNMLA",CTy"VFPNegMul"), Apply (Call ("write'S",ATy(qTy,qTy), TP[Apply (Call ("FPAdd32",ATy(qTy,F32), TP[Mop(FPNeg 32, Apply (Call ("S",ATy(qTy,F32), Var("d",FTy 5)), qVar"state")), Mop(FPNeg 32,Var("v",F32))]), qVar"state"),Var("d",FTy 5)]), qVar"state")), (LC("VFPNegMul_VNMLS",CTy"VFPNegMul"), Apply (Call ("write'S",ATy(qTy,qTy), TP[Apply (Call ("FPAdd32",ATy(qTy,F32), TP[Mop(FPNeg 32, Apply (Call ("S",ATy(qTy,F32), Var("d",FTy 5)), qVar"state")),Var("v",F32)]), qVar"state"),Var("d",FTy 5)]), qVar"state")), (LC("VFPNegMul_VNMUL",CTy"VFPNegMul"), Apply (Call ("write'S",ATy(qTy,qTy), TP[Mop(FPNeg 32,Var("v",F32)),Var("d",FTy 5)]), qVar"state"))])))))) ; val dfn'vldr_def = Def ("dfn'vldr", TP[bVar"single_reg",bVar"add",Var("d",FTy 5),Var("n",F4), Var("imm32",F32)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], ITE(EQ(Var("n",F4),LW(15,4)), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), TP[Call("Align",F32,TP[Var("v",F32),LN 4]),qVar"s"]), Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state")), Let(Var("address",F32), ITE(bVar"add",Bop(Add,Var("v",F32),Var("imm32",F32)), Bop(Sub,Var("v",F32),Var("imm32",F32))), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"single_reg", Let(TP[Var("v",F32),qVar"s"], Apply (Call ("MemA",ATy(qTy,PTy(F32,qTy)), TP[Var("address",F32),LN 4]),qVar"s"), Apply (Call ("write'S",ATy(qTy,qTy), TP[Var("v",F32),Var("d",FTy 5)]),qVar"s")), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("MemA",ATy(qTy,PTy(F32,qTy)), TP[Var("address",F32),LN 4]),qVar"s"), Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("MemA",ATy(qTy,PTy(F32,qTy)), TP[Bop(Add,Var("address",F32),LW(4,32)), LN 4]),qVar"s"), Apply (Call ("write'D",ATy(qTy,qTy), TP[ITE(Apply (Call ("BigEndian",ATy(qTy,bTy), LU),qVar"s"), CC[Var("v",F32),Var("v0",F32)], CC[Var("v0",F32),Var("v",F32)]), Var("d",FTy 5)]),qVar"s"))))))))) ; val dfn'vstr_def = Def ("dfn'vstr", TP[bVar"single_reg",bVar"add",Var("d",FTy 5),Var("n",F4), Var("imm32",F32)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], ITE(bVar"add", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"state"), TP[Bop(Add,Var("v",F32),Var("imm32",F32)),qVar"s"]), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"state"), TP[Bop(Sub,Var("v",F32),Var("imm32",F32)),qVar"s"])), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"single_reg", Apply (Call ("write'MemA",ATy(qTy,qTy), TP[Apply (Call("S",ATy(qTy,F32),Var("d",FTy 5)),qVar"s"), Var("v",F32),LN 4]),qVar"s"), Let(Var("v0",F64), Apply(Call("D",ATy(qTy,F64),Var("d",FTy 5)),qVar"s"), Let(TP[bVar"v1",qVar"s"], Let(qVar"s0", Apply (Call ("write'MemA",ATy(qTy,qTy), TP[ITE(Apply (Call ("BigEndian",ATy(qTy,bTy), LU),qVar"s"), EX(Var("v0",F64),LN 63,LN 32,F32), EX(Var("v0",F64),LN 31,LN 0,F32)), Var("v",F32),LN 4]),qVar"s"), TP[Apply (Call("BigEndian",ATy(qTy,bTy),LU), qVar"s0"),qVar"s0"]), Apply (Call ("write'MemA",ATy(qTy,qTy), TP[ITE(bVar"v1", EX(Var("v0",F64),LN 31,LN 0,F32), EX(Var("v0",F64),LN 63,LN 32,F32)), Bop(Add,Var("v",F32),LW(4,32)),LN 4]), qVar"s")))))))) ; val dfn'vldm_def = Def ("dfn'vldm", TP[bVar"single_regs",bVar"add",bVar"wback",Var("d",FTy 5),Var("n",F4), Var("imm8",F8)], Close (qVar"state", Let(Var("imm32",F32),Mop(Cast F32,CC[Var("imm8",F8),LW(0,2)]), Let(TP[Var("v",F32),qVar"s"], ITE(bVar"add", Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"state"), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"state"), TP[Bop(Sub,Var("v",F32),Var("imm32",F32)),qVar"s"])), Let(Var("s",PTy(F32,qTy)), Mop(Snd, Apply (For(TP[LN 0, Bop(Sub, ITE(bVar"single_regs", Mop(Cast nTy,Var("imm8",F8)), Bop(Div, Mop(Cast nTy,Var("imm8",F8)), LN 2)),LN 1), Close (nVar"r", Close (Var("state",PTy(F32,qTy)), ITE(bVar"single_regs", Let(Var("s",PTy(F32,qTy)), Let(TP[Var("v", PTy(F32,FTy 5)), Var("s",PTy(F32,qTy))], Let(TP[Var("v",F32), Var("s", PTy(F32,qTy))], CS(Apply (Call ("MemA", ATy(qTy, PTy(F32, qTy)), TP[Mop(Fst, Var("state", PTy(F32, qTy))), LN 4]), Mop(Snd, Var("state", PTy(F32, qTy)))), [(TP[Var("v",F32), qVar"s3"], TP[Var("v",F32), Mop(Fst, Var("state", PTy(F32, qTy))), qVar"s3"])]), TP[TP[Var("v",F32), Bop(Add, Var("d", FTy 5), Mop(Cast (FTy 5), nVar"r"))], Var("s", PTy(F32,qTy))]), TP[Mop(Fst, Var("s", PTy(F32,qTy))), Apply (Call ("write'S", ATy(qTy,qTy), Var("v", PTy(F32, FTy 5))), Mop(Snd, Var("s", PTy(F32, qTy))))]), TP[LU, Bop(Add, Mop(Fst, Var("s", PTy(F32,qTy))), LW(4,32)), Mop(Snd, Var("s",PTy(F32,qTy)))]), Let(TP[Var("v",F32), Var("s",PTy(F32,qTy))], CS(Apply (Call ("MemA", ATy(qTy, PTy(F32,qTy)), TP[Mop(Fst, Var("state", PTy(F32, qTy))), LN 4]), Mop(Snd, Var("state", PTy(F32,qTy)))), [(TP[Var("v",F32), qVar"s3"], TP[Var("v",F32), Mop(Fst, Var("state", PTy(F32,qTy))), qVar"s3"])]), Let(TP[Var("v0",F32), Var("s",PTy(F32,qTy))], CS(Apply (Call ("MemA", ATy(qTy, PTy(F32,qTy)), TP[Bop(Add, Mop(Fst, Var("s", PTy(F32, qTy))), LW(4,32)), LN 4]), Mop(Snd, Var("s", PTy(F32, qTy)))), [(TP[Var("v",F32), qVar"s3"], TP[Var("v",F32), Mop(Fst, Var("s", PTy(F32, qTy))), qVar"s3"])]), Let(qVar"s1", Mop(Snd, Var("s", PTy(F32,qTy))), TP[LU, Bop(Add, Mop(Fst, Var("s", PTy(F32, qTy))), LW(8,32)), Apply (Call ("write'D", ATy(qTy,qTy), TP[ITE(Apply (Call ("BigEndian", ATy(qTy, bTy), LU), qVar"s1"), CC[Var("v", F32), Var("v0", F32)], CC[Var("v0", F32), Var("v", F32)]), Bop(Add, Var("d", FTy 5), Mop(Cast (FTy 5), nVar"r"))]), qVar"s1")]))))))]), TP[Var("v",F32),qVar"s"])), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"wback", Let(TP[Var("v",F32),Var("s",PTy(F32,qTy))], ITE(bVar"add", Let(TP[Var("v",F32),Var("s",PTy(F32,qTy))], CS(Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("n",F4)), Mop(Snd,Var("s",PTy(F32,qTy)))), [(TP[Var("v",F32),qVar"s3"], TP[Var("v",F32), Mop(Fst,Var("s",PTy(F32,qTy))), qVar"s3"])]), TP[Bop(Add,Var("v",F32), Var("imm32",F32)), Var("s",PTy(F32,qTy))]), Let(TP[Var("v",F32),Var("s",PTy(F32,qTy))], CS(Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("n",F4)), Mop(Snd,Var("s",PTy(F32,qTy)))), [(TP[Var("v",F32),qVar"s3"], TP[Var("v",F32), Mop(Fst,Var("s",PTy(F32,qTy))), qVar"s3"])]), TP[Bop(Sub,Var("v",F32), Var("imm32",F32)), Var("s",PTy(F32,qTy))])), Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("v",F32),Var("n",F4)]), Mop(Snd,Var("s",PTy(F32,qTy))))), Mop(Snd,Var("s",PTy(F32,qTy)))))))))) ; val dfn'vstm_def = Def ("dfn'vstm", TP[bVar"single_regs",bVar"add",bVar"wback",Var("d",FTy 5),Var("n",F4), Var("imm8",F8)], Close (qVar"state", Let(Var("imm32",F32),Mop(Cast F32,CC[Var("imm8",F8),LW(0,2)]), Let(TP[Var("v",F32),qVar"s"], ITE(bVar"add", Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"state"), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"state"), TP[Bop(Sub,Var("v",F32),Var("imm32",F32)),qVar"s"])), Let(Var("s",PTy(F32,qTy)), Mop(Snd, Apply (For(TP[LN 0, Bop(Sub, ITE(bVar"single_regs", Mop(Cast nTy,Var("imm8",F8)), Bop(Div, Mop(Cast nTy,Var("imm8",F8)), LN 2)),LN 1), Close (nVar"r", Close (Var("state",PTy(F32,qTy)), ITE(bVar"single_regs", TP[LU, Bop(Add, Mop(Fst, Var("state", PTy(F32,qTy))), LW(4,32)), Apply (Call ("write'MemA", ATy(qTy,qTy), TP[Apply (Call ("S", ATy(qTy,F32), Bop(Add, Var("d", FTy 5), Mop(Cast (FTy 5), nVar"r"))), Mop(Snd, Var("state", PTy(F32, qTy)))), Mop(Fst, Var("state", PTy(F32,qTy))), LN 4]), Mop(Snd, Var("state", PTy(F32,qTy))))], Let(Var("v",F64), Apply (Call ("D",ATy(qTy,F64), Bop(Add, Var("d",FTy 5), Mop(Cast(FTy 5), nVar"r"))), Mop(Snd, Var("state", PTy(F32,qTy)))), Let(TP[Var("s0",F32), qVar"s1"], TP[Mop(Fst, Var("state", PTy(F32,qTy))), Apply (Call ("write'MemA", ATy(qTy,qTy), TP[ITE(Apply (Call ("BigEndian", ATy(qTy, bTy), LU), Mop(Snd, Var("state", PTy(F32, qTy)))), EX(Var("v", F64), LN 63, LN 32, F32), EX(Var("v", F64), LN 31, LN 0, F32)), Mop(Fst, Var("state", PTy(F32, qTy))), LN 4]), Mop(Snd, Var("state", PTy(F32, qTy))))], TP[LU, Bop(Add, Var("s0",F32), LW(8,32)), Apply (Call ("write'MemA", ATy(qTy,qTy), TP[ITE(Apply (Call ("BigEndian", ATy(qTy, bTy), LU), qVar"s1"), EX(Var("v", F64), LN 31, LN 0, F32), EX(Var("v", F64), LN 63, LN 32, F32)), Bop(Add, Var("s0", F32), LW(4,32)), LN 4]), qVar"s1")])))))]), TP[Var("v",F32),qVar"s"])), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"wback", Let(TP[Var("v",F32),Var("s",PTy(F32,qTy))], ITE(bVar"add", Let(TP[Var("v",F32),Var("s",PTy(F32,qTy))], CS(Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("n",F4)), Mop(Snd,Var("s",PTy(F32,qTy)))), [(TP[Var("v",F32),qVar"s3"], TP[Var("v",F32), Mop(Fst,Var("s",PTy(F32,qTy))), qVar"s3"])]), TP[Bop(Add,Var("v",F32), Var("imm32",F32)), Var("s",PTy(F32,qTy))]), Let(TP[Var("v",F32),Var("s",PTy(F32,qTy))], CS(Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("n",F4)), Mop(Snd,Var("s",PTy(F32,qTy)))), [(TP[Var("v",F32),qVar"s3"], TP[Var("v",F32), Mop(Fst,Var("s",PTy(F32,qTy))), qVar"s3"])]), TP[Bop(Sub,Var("v",F32), Var("imm32",F32)), Var("s",PTy(F32,qTy))])), Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("v",F32),Var("n",F4)]), Mop(Snd,Var("s",PTy(F32,qTy))))), Mop(Snd,Var("s",PTy(F32,qTy)))))))))) ; val dfn'BranchTarget_def = Def ("dfn'BranchTarget",Var("imm32",F32), Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), Apply (Call ("BranchWritePC",ATy(qTy,qTy), Bop(Add,Var("v",F32),Var("imm32",F32))),qVar"s")))) ; val dfn'BranchExchange_def = Def ("dfn'BranchExchange",Var("m",F4), Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"), Apply(Call("BXWritePC",ATy(qTy,qTy),Var("v",F32)),qVar"s")))) ; val dfn'BranchLinkExchangeImmediate_def = Def ("dfn'BranchLinkExchangeImmediate", TP[Var("targetInstrSet",CTy"InstrSet"),Var("imm32",F32)], Close (qVar"state", Let(qVar"s", ITE(EQ(Apply (Call("CurrentInstrSet",ATy(qTy,CTy"InstrSet"),LU), qVar"state"),LC("InstrSet_ARM",CTy"InstrSet")), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), Apply (Call ("write'LR",ATy(qTy,qTy), Bop(Sub,Var("v",F32),LW(4,32))),qVar"s")), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), Apply (Call ("write'LR",ATy(qTy,qTy), CC[EX(Var("v",F32),LN 31,LN 1,FTy 31),LW(1,1)]), qVar"s"))), Let(TP[Var("v",F32),qVar"s"], ITE(EQ(Var("targetInstrSet",CTy"InstrSet"), LC("InstrSet_ARM",CTy"InstrSet")), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"), TP[Bop(Add,Call("Align",F32,TP[Var("v",F32),LN 4]), Var("imm32",F32)),qVar"s"]), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"), TP[Bop(Add,Var("v",F32),Var("imm32",F32)),qVar"s"])), Apply (Call("BranchWritePC",ATy(qTy,qTy),Var("v",F32)), Apply (Call ("SelectInstrSet",ATy(qTy,qTy), Var("targetInstrSet",CTy"InstrSet")),qVar"s")))))) ; val dfn'BranchLinkExchangeRegister_def = Def ("dfn'BranchLinkExchangeRegister",Var("m",F4), Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"), Apply (Call("BXWritePC",ATy(qTy,qTy),Var("v",F32)), ITE(EQ(Apply (Call("CurrentInstrSet",ATy(qTy,CTy"InstrSet"),LU), qVar"s"),LC("InstrSet_ARM",CTy"InstrSet")), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"), Apply (Call ("write'LR",ATy(qTy,qTy), Bop(Sub,Var("v",F32),LW(4,32))),qVar"s")), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"), Apply (Call ("write'LR",ATy(qTy,qTy), CC[EX(Bop(Sub,Var("v",F32),LW(2,32)),LN 31, LN 1,FTy 31),LW(1,1)]),qVar"s"))))))) ; val dfn'CompareBranch_def = Def ("dfn'CompareBranch",TP[bVar"nonzero",Var("n",F4),Var("imm32",F32)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"), ITE(Mop(Not,EQ(bVar"nonzero",EQ(Var("v",F32),LW(0,32)))), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"), Apply (Call ("BranchWritePC",ATy(qTy,qTy), Bop(Add,Var("v",F32),Var("imm32",F32))),qVar"s")), Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"s"))))) ; val dfn'TableBranchByte_def = Def ("dfn'TableBranchByte",TP[bVar"is_tbh",Var("m",F4),Var("n",F4)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F16),qVar"s"], ITE(bVar"is_tbh", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"s"), Let(TP[Var("v",PTy(F32,nTy)),qVar"s"], Let(TP[Var("v",F32),qVar"s"], Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("m",F4)),qVar"s"), Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("LSL", ATy(qTy,PTy(F32,qTy)), TP[Var("v0",F32),LN 1]), qVar"s"), TP[Bop(Add,Var("v",F32), Var("v0",F32)),qVar"s"])), TP[TP[Var("v",F32),LN 2],qVar"s"]), Apply (Call ("MemU",ATy(qTy,PTy(F16,qTy)), Var("v",PTy(F32,nTy))),qVar"s"))), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"s"), Let(TP[Var("v",PTy(F32,nTy)),qVar"s"], Let(TP[Var("v",F32),qVar"s"], Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("m",F4)),qVar"s"), TP[Bop(Add,Var("v",F32), Var("v0",F32)),qVar"s"]), TP[TP[Var("v",F32),LN 1],qVar"s"]), Apply (Call ("MemU",ATy(qTy,PTy(F16,qTy)), Var("v",PTy(F32,nTy))),qVar"s")))), Let(TP[Var("v0",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"), Apply (Call ("BranchWritePC",ATy(qTy,qTy), Bop(Add,Var("v0",F32), Bop(Mul,LW(2,32), Mop(Cast F32,Var("v",F16))))),qVar"s"))), qVar"s")))) ; val dfn'CheckArray_def = Def ("dfn'CheckArray",TP[Var("m",F4),Var("n",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"), Let(TP[bVar"v",qVar"s"], Let(TP[Var("v0",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"), TP[Bop(Ule,Var("v",F32),Var("v0",F32)),qVar"s"]), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"), Let(qVar"s", Apply (Call("write'ITSTATE",ATy(qTy,qTy),LW(0,8)), Apply (Call ("write'LR",ATy(qTy,qTy), CC[EX(Var("v",F32),LN 31,LN 1,FTy 31), LW(1,1)]),qVar"s")), Apply (Call ("BranchWritePC",ATy(qTy,qTy), Bop(Sub, Dest ("TEEHBR",F32, Dest("CP14",CTy"CP14",qVar"s")), LW(8,32))),qVar"s"))), Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"s")))))) ; val dfn'HandlerBranchLink_def = Def ("dfn'HandlerBranchLink", TP[bVar"generate_link",Var("handler_offset",F32)], Close (qVar"state", Let(qVar"s", ITE(bVar"generate_link", Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), Apply (Call ("write'LR",ATy(qTy,qTy), CC[EX(Bop(Sub,Var("v",F32),LW(2,32)),LN 31,LN 1, FTy 31),LW(1,1)]),qVar"s")),qVar"state"), Apply (Call ("BranchWritePC",ATy(qTy,qTy), Bop(Add,Dest("TEEHBR",F32,Dest("CP14",CTy"CP14",qVar"s")), Var("handler_offset",F32))),qVar"s")))) ; val dfn'HandlerBranchLinkParameter_def = Def ("dfn'HandlerBranchLinkParameter", TP[Var("imm32",F32),Var("handler_offset",F32)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply (Const("PC",ATy(qTy,PTy(F32,qTy))), Apply (Call("write'R",ATy(qTy,qTy),TP[Var("imm32",F32),LW(8,4)]), qVar"state")), Let(qVar"s", Apply (Call ("write'LR",ATy(qTy,qTy), CC[EX(Bop(Sub,Var("v",F32),LW(2,32)),LN 31,LN 1,FTy 31), LW(1,1)]),qVar"s"), Apply (Call ("BranchWritePC",ATy(qTy,qTy), Bop(Add, Dest("TEEHBR",F32,Dest("CP14",CTy"CP14",qVar"s")), Var("handler_offset",F32))),qVar"s"))))) ; val dfn'HandlerBranchParameter_def = Def ("dfn'HandlerBranchParameter", TP[Var("imm32",F32),Var("handler_offset",F32)], Close (qVar"state", Let(qVar"s", Apply (Call("write'R",ATy(qTy,qTy),TP[Var("imm32",F32),LW(8,4)]), qVar"state"), Apply (Call ("BranchWritePC",ATy(qTy,qTy), Bop(Add,Dest("TEEHBR",F32,Dest("CP14",CTy"CP14",qVar"s")), Var("handler_offset",F32))),qVar"s")))) ; val dfn'EnterxLeavex_def = Def ("dfn'EnterxLeavex",bVar"is_enterx", Close (qVar"state", ITE(bVar"is_enterx", Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU), qVar"state"), ITE(bVar"v", Apply (Call("TakeUndefInstrException",ATy(qTy,qTy),LU), qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("SelectInstrSet",ATy(qTy,qTy), LC("InstrSet_ThumbEE",CTy"InstrSet")),qVar"s")))), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("SelectInstrSet",ATy(qTy,qTy), LC("InstrSet_Thumb",CTy"InstrSet")),qVar"state"))))) ; val dfn'IfThen_def = Def ("dfn'IfThen",TP[Var("firstcond",F4),Var("mask",F4)], Close (qVar"state", Rupd ("Encoding", TP[Apply (Call("IncPC",ATy(qTy,qTy),LU), Rupd ("CPSR", TP[qVar"state", Rupd ("IT", TP[Dest("CPSR",CTy"PSR",qVar"state"), CC[Var("firstcond",F4),Var("mask",F4)]])])), LC("Encoding_ARM",CTy"Encoding")]))) ; val dfn'CountLeadingZeroes_def = Def ("dfn'CountLeadingZeroes",TP[Var("d",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[Mop(Cast F32, Call("CountLeadingZeroBits",nTy,Var("v",F32))), Var("d",F4)]),qVar"s"))))) ; val dfn'MoveHalfword_def = Def ("dfn'MoveHalfword",TP[bVar"high",Var("d",F4),Var("imm16",F16)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"high", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("d",F4)), qVar"state"), Apply (Call ("write'R",ATy(qTy,qTy), TP[BFI(LN 31,LN 16,Var("imm16",F16),Var("v",F32)), Var("d",F4)]),qVar"s")), Apply (Call ("write'R",ATy(qTy,qTy), TP[Mop(Cast F32,Var("imm16",F16)),Var("d",F4)]), qVar"state"))))) ; val DataProcessing_def = Def ("DataProcessing", TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4), Var("imm32",F32),bVar"C"], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], ITB([(Bop(Or,EQ(Var("opc",F4),LW(13,4)), Bop(And,EQ(Var("opc",F4),LW(15,4)), EQ(Var("n",F4),LW(15,4)))), TP[LW(0,32),qVar"state"]), (Bop(And,Bop(In,Var("opc",F4),SL[LW(4,4),LW(2,4)]), Bop(And,EQ(Var("n",F4),LW(15,4)), Mop(Not,bVar"setflags"))), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), TP[Call("Align",F32,TP[Var("v",F32),LN 4]),qVar"s"]))], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state")), Let(TP[Var("result",F32),bVar"carry",bVar"overflow"], Call ("DataProcessingALU",PTy(F32,PTy(bTy,bTy)), TP[Var("opc",F4),Var("v",F32),Var("imm32",F32), Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"s"))]), Let(qVar"s", ITE(Mop(Not, EQ(EX(Var("opc",F4),LN 3,LN 2,FTy 2),LW(2,2))), Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("result",F32),Var("d",F4)]),qVar"s"), qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"setflags", Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("N", TP[Dest("CPSR",CTy"PSR",qVar"s"), Bop(Bit,Var("result",F32),LN 31)])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("Z", TP[Dest("CPSR",CTy"PSR",qVar"s"), EQ(Var("result",F32),LW(0,32))])]), ITE(Call ("ArithmeticOpcode",bTy, Var("opc",F4)), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("C", TP[Dest ("CPSR",CTy"PSR", qVar"s"), bVar"carry"])]), Rupd ("CPSR", TP[qVar"s", Rupd ("V", TP[Dest ("CPSR",CTy"PSR", qVar"s"), bVar"overflow"])])), Rupd ("CPSR", TP[qVar"s", Rupd ("C", TP[Dest ("CPSR",CTy"PSR", qVar"s"),bVar"C"])])))), qVar"s"))))))) ; val DataProcessingPC_def = Def ("DataProcessingPC", TP[Var("opc",F4),bVar"setflags",Var("n",F4),Var("imm32",F32)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], ITB([(Bop(Or,EQ(Var("opc",F4),LW(13,4)), Bop(And,EQ(Var("opc",F4),LW(15,4)), EQ(Var("n",F4),LW(15,4)))), TP[LW(0,32),qVar"state"]), (Bop(And,Bop(In,Var("opc",F4),SL[LW(4,4),LW(2,4)]), Bop(And,EQ(Var("n",F4),LW(15,4)), Mop(Not,bVar"setflags"))), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"), TP[Call("Align",F32,TP[Var("v",F32),LN 4]),qVar"s"]))], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state")), Let(TP[Var("result",F32),AVar bTy,AVar bTy], Call ("DataProcessingALU",PTy(F32,PTy(bTy,bTy)), TP[Var("opc",F4),Var("v",F32),Var("imm32",F32), Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"s"))]), ITE(bVar"setflags", Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU), qVar"s"), ITE(bVar"v", Apply (Call ("TakeUndefInstrException",ATy(qTy,qTy),LU), qVar"s"), Let(TP[bVar"v",qVar"s"], Apply (Call ("CurrentModeIsUserOrSystem", ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"), ITE(bVar"v", Mop(Snd, Apply (Call ("raise'exception", ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE", CTy"exception", LS"DataProcessingPC")), qVar"s")), Let(TP[Var("v",CTy"PSR"),qVar"s"], Apply (Const ("SPSR", ATy(qTy,PTy(CTy"PSR",qTy))), qVar"s"), Let(qVar"s", Apply (Call ("CPSRWriteByInstr", ATy(qTy,qTy), TP[Call ("reg'PSR",F32, Var("v",CTy"PSR")), LW(15,4),LT]),qVar"s"), ITE(Bop(And, EQ(Dest ("M",FTy 5, Dest ("CPSR", CTy"PSR", qVar"s")), LW(26,5)), EQ(Apply (Call ("CurrentInstrSet", ATy(qTy, CTy"InstrSet"), LU),qVar"s"), LC("InstrSet_ThumbEE", CTy"InstrSet"))), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy, PTy(uTy,qTy)), Call ("UNPREDICTABLE", CTy"exception", LS "DataProcessingPC")), qVar"s")), Apply (Call ("BranchWritePC", ATy(qTy,qTy), Var("result",F32)), qVar"s")))))))), Apply (Call("ALUWritePC",ATy(qTy,qTy),Var("result",F32)), qVar"s")))))) ; val dfn'Move_def = Def ("dfn'Move", TP[bVar"setflags",bVar"negate",Var("d",F4),Var("imm12",FTy 12)], Close (qVar"state", Let(Var("opc",F4),CC[LW(3,2),Mop(Cast F1,bVar"negate"),LW(1,1)], Let(TP[Var("v",PTy(F32,bTy)),qVar"s"], Apply (Call ("ExpandImm_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)), TP[Var("imm12",FTy 12), Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"state"))]), qVar"state"), Let(TP[Var("imm32",F32),bVar"carry"],Var("v",PTy(F32,bTy)), ITE(EQ(Var("d",F4),LW(15,4)), Apply (Call ("DataProcessingPC",ATy(qTy,qTy), TP[Var("opc",F4),bVar"setflags",LW(15,4), Var("imm32",F32)]),qVar"s"), Apply (Call ("DataProcessing",ATy(qTy,qTy), TP[Var("opc",F4),bVar"setflags",Var("d",F4), LW(15,4),Var("imm32",F32),bVar"carry"]), qVar"s"))))))) ; val dfn'TestCompareImmediate_def = Def ("dfn'TestCompareImmediate", TP[Var("op",FTy 2),Var("n",F4),Var("imm12",FTy 12)], Close (qVar"state", Let(TP[Var("v",PTy(F32,bTy)),qVar"s"], Apply (Call ("ExpandImm_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)), TP[Var("imm12",FTy 12), Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"state"))]), qVar"state"), Let(TP[Var("imm32",F32),bVar"carry"],Var("v",PTy(F32,bTy)), Apply (Call ("DataProcessing",ATy(qTy,qTy), TP[CC[LW(2,2),Var("op",FTy 2)],LT,LX F4,Var("n",F4), Var("imm32",F32),bVar"carry"]),qVar"s"))))) ; val dfn'ArithLogicImmediate_def = Def ("dfn'ArithLogicImmediate", TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4), Var("imm12",FTy 12)], Close (qVar"state", Let(TP[Var("v",PTy(F32,bTy)),qVar"s"], Apply (Call ("ExpandImm_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)), TP[Var("imm12",FTy 12), Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"state"))]), qVar"state"), Let(TP[Var("imm32",F32),bVar"carry"],Var("v",PTy(F32,bTy)), ITE(EQ(Var("d",F4),LW(15,4)), Apply (Call ("DataProcessingPC",ATy(qTy,qTy), TP[Var("opc",F4),bVar"setflags",Var("n",F4), Var("imm32",F32)]),qVar"s"), Apply (Call ("DataProcessing",ATy(qTy,qTy), TP[Var("opc",F4),bVar"setflags",Var("d",F4), Var("n",F4),Var("imm32",F32),bVar"carry"]), qVar"s")))))) ; val doRegister_def = Def ("doRegister", TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),Var("m",F4), Var("shift_t",CTy"SRType"),nVar"shift_n"], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"), Let(TP[Var("v",PTy(F32,bTy)),qVar"s"], Apply (Call ("Shift_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)), TP[Var("v",F32),Var("shift_t",CTy"SRType"), nVar"shift_n", Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"s"))]), qVar"s"), Let(TP[Var("shifted",F32),bVar"carry"], Var("v",PTy(F32,bTy)), ITE(EQ(Var("d",F4),LW(15,4)), Apply (Call ("DataProcessingPC",ATy(qTy,qTy), TP[Var("opc",F4),bVar"setflags",Var("n",F4), Var("shifted",F32)]),qVar"s"), Apply (Call ("DataProcessing",ATy(qTy,qTy), TP[Var("opc",F4),bVar"setflags",Var("d",F4), Var("n",F4),Var("shifted",F32),bVar"carry"]), qVar"s"))))))) ; val dfn'Register_def = Def ("dfn'Register", TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),Var("m",F4), Var("shift_t",CTy"SRType"),nVar"shift_n"], Close (qVar"state", Apply (Call ("doRegister",ATy(qTy,qTy), TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4), Var("m",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"]), qVar"state"))) ; val dfn'TestCompareRegister_def = Def ("dfn'TestCompareRegister", TP[Var("opc",FTy 2),Var("n",F4),Var("m",F4),Var("shift_t",CTy"SRType"), nVar"shift_n"], Close (qVar"state", Apply (Call ("doRegister",ATy(qTy,qTy), TP[CC[LW(2,2),Var("opc",FTy 2)],LT,LW(0,4),Var("n",F4), Var("m",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"]), qVar"state"))) ; val dfn'ShiftImmediate_def = Def ("dfn'ShiftImmediate", TP[bVar"negate",bVar"setflags",Var("d",F4),Var("m",F4), Var("shift_t",CTy"SRType"),nVar"shift_n"], Close (qVar"state", ITE(bVar"negate", Apply (Call ("doRegister",ATy(qTy,qTy), TP[LW(15,4),bVar"setflags",Var("d",F4),LW(15,4), Var("m",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"]), qVar"state"), Apply (Call ("doRegister",ATy(qTy,qTy), TP[LW(13,4),bVar"setflags",Var("d",F4),LX F4,Var("m",F4), Var("shift_t",CTy"SRType"),nVar"shift_n"]),qVar"state")))) ; val doRegisterShiftedRegister_def = Def ("doRegisterShiftedRegister", TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),Var("m",F4), Var("shift_t",CTy"SRType"),Var("s",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s0"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"), Let(TP[Var("v",PTy(F32,bTy)),qVar"s"], Let(TP[Var("v",PTy(F32,PTy(CTy"SRType",PTy(nTy,bTy)))), qVar"s"], Let(TP[Var("v0",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("s",F4)), qVar"s0"), TP[TP[Var("v",F32),Var("shift_t",CTy"SRType"), Mop(Cast nTy,EX(Var("v0",F32),LN 7,LN 0,F8)), Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"s"))], qVar"s"]), Apply (Call ("Shift_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)), Var("v",PTy(F32,PTy(CTy"SRType",PTy(nTy,bTy))))), qVar"s")), Let(TP[Var("shifted",F32),bVar"carry"], Var("v",PTy(F32,bTy)), Apply (Call ("DataProcessing",ATy(qTy,qTy), TP[Var("opc",F4),bVar"setflags",Var("d",F4), Var("n",F4),Var("shifted",F32),bVar"carry"]), qVar"s")))))) ; val dfn'RegisterShiftedRegister_def = Def ("dfn'RegisterShiftedRegister", TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),Var("m",F4), Var("shift_t",CTy"SRType"),Var("s",F4)], Close (qVar"state", Apply (Call ("doRegisterShiftedRegister",ATy(qTy,qTy), TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4), Var("m",F4),Var("shift_t",CTy"SRType"),Var("s",F4)]), qVar"state"))) ; val dfn'ShiftRegister_def = Def ("dfn'ShiftRegister", TP[bVar"negate",bVar"setflags",Var("d",F4),Var("n",F4), Var("shift_t",CTy"SRType"),Var("m",F4)], Close (qVar"state", ITE(bVar"negate", Apply (Call ("doRegisterShiftedRegister",ATy(qTy,qTy), TP[LW(15,4),bVar"setflags",Var("d",F4),LW(15,4), Var("n",F4),Var("shift_t",CTy"SRType"),Var("m",F4)]), qVar"state"), Apply (Call ("doRegisterShiftedRegister",ATy(qTy,qTy), TP[LW(13,4),bVar"setflags",Var("d",F4),LX F4,Var("n",F4), Var("shift_t",CTy"SRType"),Var("m",F4)]),qVar"state")))) ; val dfn'AddSub_def = Def ("dfn'AddSub",TP[bVar"sub",Var("d",F4),Var("n",F4),Var("imm12",FTy 12)], Close (qVar"state", Apply (Call ("DataProcessing",ATy(qTy,qTy), TP[ITE(bVar"sub",LW(2,4),LW(4,4)),LF,Var("d",F4),Var("n",F4), Mop(Cast F32,Var("imm12",FTy 12)),LX bTy]),qVar"state"))) ; val dfn'SaturatingAddSubtract_def = Def ("dfn'SaturatingAddSubtract", TP[Var("opc",FTy 2),Var("d",F4),Var("m",F4),Var("n",F4)], Close (qVar"state", Let(Var("s",PTy(bTy,PTy(F32,qTy))), CS(Var("opc",FTy 2), [(LW(0,2), Let(TP[Var("v",F32),Var("s",PTy(bTy,PTy(F32,qTy)))], Let(TP[Var("v",F32),Var("s3",PTy(F32,qTy))], Let(TP[Var("v",F32),qVar"s3"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"state"), TP[Var("v",F32),LX F32,qVar"s3"]), TP[Var("v",F32),LX bTy,Var("s3",PTy(F32,qTy))]), Let(TP[Var("v",PTy(F32,bTy)), Var("s",PTy(bTy,PTy(F32,qTy)))], Let(TP[Var("v",PTy(iTy,nTy)), Var("s",PTy(bTy,PTy(F32,qTy)))], Let(TP[iVar"v",Var("s",PTy(bTy,PTy(F32,qTy)))], Let(TP[Var("v0",F32), Var("s",PTy(bTy,PTy(F32,qTy)))], Let(TP[Var("v",F32), Var("s3",PTy(F32,qTy))], Let(TP[Var("v",F32),qVar"s3"], Apply (Call ("R", ATy(qTy,PTy(F32,qTy)), Var("n",F4)), Mop(Snd, Mop(Snd, Var("s", PTy(bTy, PTy(F32,qTy)))))), TP[Var("v",F32), Mop(Fst, Mop(Snd, Var("s", PTy(bTy, PTy(F32,qTy))))), qVar"s3"]), TP[Var("v",F32), Mop(Fst, Var("s", PTy(bTy,PTy(F32,qTy)))), Var("s3",PTy(F32,qTy))]), TP[Bop(Add,Mop(Cast iTy,Var("v",F32)), Mop(Cast iTy,Var("v0",F32))), Var("s",PTy(bTy,PTy(F32,qTy)))]), TP[TP[iVar"v",LN 32], Var("s",PTy(bTy,PTy(F32,qTy)))]), Let(TP[Var("v",PTy(F32,bTy)), Var("s3",PTy(F32,qTy))], Let(TP[Var("v",PTy(F32,bTy)),qVar"s3"], Apply (Call ("SignedSatQ", ATy(qTy,PTy(PTy(F32,bTy),qTy)), Var("v",PTy(iTy,nTy))), Mop(Snd, Mop(Snd, Var("s", PTy(bTy,PTy(F32,qTy)))))), TP[Var("v",PTy(F32,bTy)), Mop(Fst, Mop(Snd, Var("s", PTy(bTy,PTy(F32,qTy))))), qVar"s3"]), TP[Var("v",PTy(F32,bTy)), Mop(Fst,Var("s",PTy(bTy,PTy(F32,qTy)))), Var("s3",PTy(F32,qTy))])), Let(TP[Var("r",F32),bVar"s0"], Var("v",PTy(F32,bTy)), TP[bVar"s0",Var("r",F32), Mop(Snd, Mop(Snd,Var("s",PTy(bTy,PTy(F32,qTy)))))])))), (LW(1,2), Let(TP[Var("v",F32),Var("s",PTy(bTy,PTy(F32,qTy)))], Let(TP[Var("v",F32),Var("s3",PTy(F32,qTy))], Let(TP[Var("v",F32),qVar"s3"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"state"), TP[Var("v",F32),LX F32,qVar"s3"]), TP[Var("v",F32),LX bTy,Var("s3",PTy(F32,qTy))]), Let(TP[Var("v",PTy(F32,bTy)), Var("s",PTy(bTy,PTy(F32,qTy)))], Let(TP[Var("v",PTy(iTy,nTy)), Var("s",PTy(bTy,PTy(F32,qTy)))], Let(TP[iVar"v",Var("s",PTy(bTy,PTy(F32,qTy)))], Let(TP[Var("v0",F32), Var("s",PTy(bTy,PTy(F32,qTy)))], Let(TP[Var("v",F32), Var("s3",PTy(F32,qTy))], Let(TP[Var("v",F32),qVar"s3"], Apply (Call ("R", ATy(qTy,PTy(F32,qTy)), Var("n",F4)), Mop(Snd, Mop(Snd, Var("s", PTy(bTy, PTy(F32,qTy)))))), TP[Var("v",F32), Mop(Fst, Mop(Snd, Var("s", PTy(bTy, PTy(F32,qTy))))), qVar"s3"]), TP[Var("v",F32), Mop(Fst, Var("s", PTy(bTy,PTy(F32,qTy)))), Var("s3",PTy(F32,qTy))]), TP[Bop(Sub,Mop(Cast iTy,Var("v",F32)), Mop(Cast iTy,Var("v0",F32))), Var("s",PTy(bTy,PTy(F32,qTy)))]), TP[TP[iVar"v",LN 32], Var("s",PTy(bTy,PTy(F32,qTy)))]), Let(TP[Var("v",PTy(F32,bTy)), Var("s3",PTy(F32,qTy))], Let(TP[Var("v",PTy(F32,bTy)),qVar"s3"], Apply (Call ("SignedSatQ", ATy(qTy,PTy(PTy(F32,bTy),qTy)), Var("v",PTy(iTy,nTy))), Mop(Snd, Mop(Snd, Var("s", PTy(bTy,PTy(F32,qTy)))))), TP[Var("v",PTy(F32,bTy)), Mop(Fst, Mop(Snd, Var("s", PTy(bTy,PTy(F32,qTy))))), qVar"s3"]), TP[Var("v",PTy(F32,bTy)), Mop(Fst,Var("s",PTy(bTy,PTy(F32,qTy)))), Var("s3",PTy(F32,qTy))])), Let(TP[Var("r",F32),bVar"s0"], Var("v",PTy(F32,bTy)), TP[bVar"s0",Var("r",F32), Mop(Snd, Mop(Snd,Var("s",PTy(bTy,PTy(F32,qTy)))))])))), (LW(2,2), Let(TP[Var("v",F32),Var("s",PTy(bTy,PTy(F32,qTy)))], Let(TP[Var("v",F32),Var("s3",PTy(F32,qTy))], Let(TP[Var("v",F32),qVar"s3"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"state"), TP[Var("v",F32),LX F32,qVar"s3"]), TP[Var("v",F32),LX bTy,Var("s3",PTy(F32,qTy))]), Let(TP[Var("v",PTy(F32,bTy)), Var("s",PTy(bTy,PTy(F32,qTy)))], Let(TP[Var("v",PTy(F32,bTy)),Var("s3",PTy(F32,qTy))], Let(TP[Var("v",PTy(F32,bTy)),qVar"s3"], Apply (Call ("SignedSatQ", ATy(qTy,PTy(PTy(F32,bTy),qTy)), TP[Bop(Mul,LI 2, Mop(Cast iTy,Var("v",F32))), LN 32]), Mop(Snd, Mop(Snd, Var("s",PTy(bTy,PTy(F32,qTy)))))), TP[Var("v",PTy(F32,bTy)), Mop(Fst, Mop(Snd, Var("s",PTy(bTy,PTy(F32,qTy))))), qVar"s3"]), TP[Var("v",PTy(F32,bTy)), Mop(Fst,Var("s",PTy(bTy,PTy(F32,qTy)))), Var("s3",PTy(F32,qTy))]), Let(TP[Var("doubled",F32),bVar"sat1"], Var("v",PTy(F32,bTy)), Let(TP[Var("v",F32), Var("s",PTy(bTy,PTy(F32,qTy)))], Let(TP[Var("v",F32),Var("s3",PTy(F32,qTy))], Let(TP[Var("v",F32),qVar"s3"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("m",F4)), Mop(Snd, Mop(Snd, Var("s", PTy(bTy,PTy(F32,qTy)))))), TP[Var("v",F32), Mop(Fst, Mop(Snd, Var("s", PTy(bTy,PTy(F32,qTy))))), qVar"s3"]), TP[Var("v",F32), Mop(Fst, Var("s",PTy(bTy,PTy(F32,qTy)))), Var("s3",PTy(F32,qTy))]), Let(TP[Var("v",PTy(F32,bTy)), Var("s",PTy(bTy,PTy(F32,qTy)))], Let(TP[Var("v",PTy(F32,bTy)), Var("s3",PTy(F32,qTy))], Let(TP[Var("v",PTy(F32,bTy)), qVar"s3"], Apply (Call ("SignedSatQ", ATy(qTy, PTy(PTy(F32,bTy),qTy)), TP[Bop(Add, Mop(Cast iTy, Var("v",F32)), Mop(Cast iTy, Var("doubled", F32))), LN 32]), Mop(Snd, Mop(Snd, Var("s", PTy(bTy, PTy(F32,qTy)))))), TP[Var("v",PTy(F32,bTy)), Mop(Fst, Mop(Snd, Var("s", PTy(bTy, PTy(F32,qTy))))), qVar"s3"]), TP[Var("v",PTy(F32,bTy)), Mop(Fst, Var("s", PTy(bTy,PTy(F32,qTy)))), Var("s3",PTy(F32,qTy))]), Let(TP[Var("r",F32),bVar"sat2"], Var("v",PTy(F32,bTy)), TP[Bop(Or,bVar"sat1",bVar"sat2"), Var("r",F32), Mop(Snd, Mop(Snd, Var("s", PTy(bTy,PTy(F32,qTy)))))]))))))), (LW(3,2), Let(TP[Var("v",F32),Var("s",PTy(bTy,PTy(F32,qTy)))], Let(TP[Var("v",F32),Var("s3",PTy(F32,qTy))], Let(TP[Var("v",F32),qVar"s3"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"state"), TP[Var("v",F32),LX F32,qVar"s3"]), TP[Var("v",F32),LX bTy,Var("s3",PTy(F32,qTy))]), Let(TP[Var("v",PTy(F32,bTy)), Var("s",PTy(bTy,PTy(F32,qTy)))], Let(TP[Var("v",PTy(F32,bTy)),Var("s3",PTy(F32,qTy))], Let(TP[Var("v",PTy(F32,bTy)),qVar"s3"], Apply (Call ("SignedSatQ", ATy(qTy,PTy(PTy(F32,bTy),qTy)), TP[Bop(Mul,LI 2, Mop(Cast iTy,Var("v",F32))), LN 32]), Mop(Snd, Mop(Snd, Var("s",PTy(bTy,PTy(F32,qTy)))))), TP[Var("v",PTy(F32,bTy)), Mop(Fst, Mop(Snd, Var("s",PTy(bTy,PTy(F32,qTy))))), qVar"s3"]), TP[Var("v",PTy(F32,bTy)), Mop(Fst,Var("s",PTy(bTy,PTy(F32,qTy)))), Var("s3",PTy(F32,qTy))]), Let(TP[Var("doubled",F32),bVar"sat1"], Var("v",PTy(F32,bTy)), Let(TP[Var("v",F32), Var("s",PTy(bTy,PTy(F32,qTy)))], Let(TP[Var("v",F32),Var("s3",PTy(F32,qTy))], Let(TP[Var("v",F32),qVar"s3"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("m",F4)), Mop(Snd, Mop(Snd, Var("s", PTy(bTy,PTy(F32,qTy)))))), TP[Var("v",F32), Mop(Fst, Mop(Snd, Var("s", PTy(bTy,PTy(F32,qTy))))), qVar"s3"]), TP[Var("v",F32), Mop(Fst, Var("s",PTy(bTy,PTy(F32,qTy)))), Var("s3",PTy(F32,qTy))]), Let(TP[Var("v",PTy(F32,bTy)), Var("s",PTy(bTy,PTy(F32,qTy)))], Let(TP[Var("v",PTy(F32,bTy)), Var("s3",PTy(F32,qTy))], Let(TP[Var("v",PTy(F32,bTy)), qVar"s3"], Apply (Call ("SignedSatQ", ATy(qTy, PTy(PTy(F32,bTy),qTy)), TP[Bop(Sub, Mop(Cast iTy, Var("v",F32)), Mop(Cast iTy, Var("doubled", F32))), LN 32]), Mop(Snd, Mop(Snd, Var("s", PTy(bTy, PTy(F32,qTy)))))), TP[Var("v",PTy(F32,bTy)), Mop(Fst, Mop(Snd, Var("s", PTy(bTy, PTy(F32,qTy))))), qVar"s3"]), TP[Var("v",PTy(F32,bTy)), Mop(Fst, Var("s", PTy(bTy,PTy(F32,qTy)))), Var("s3",PTy(F32,qTy))]), Let(TP[Var("r",F32),bVar"sat2"], Var("v",PTy(F32,bTy)), TP[Bop(Or,bVar"sat1",bVar"sat2"), Var("r",F32), Mop(Snd, Mop(Snd, Var("s", PTy(bTy,PTy(F32,qTy)))))])))))))]), Let(qVar"s2", Apply (Call ("write'R",ATy(qTy,qTy), TP[Mop(Fst,Mop(Snd,Var("s",PTy(bTy,PTy(F32,qTy))))), Var("d",F4)]), Mop(Snd,Mop(Snd,Var("s",PTy(bTy,PTy(F32,qTy)))))), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(Mop(Fst,Var("s",PTy(bTy,PTy(F32,qTy)))), Rupd ("CPSR", TP[qVar"s2", Rupd("Q",TP[Dest("CPSR",CTy"PSR",qVar"s2"),LT])]), qVar"s2")))))) ; val dfn'Multiply32_def = Def ("dfn'Multiply32", TP[bVar"setflags",Var("d",F4),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"), Let(TP[Var("v0",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"), Let(Var("result",F32),Bop(Mul,Var("v",F32),Var("v0",F32)), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("result",F32),Var("d",F4)]),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"setflags", Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("N", TP[Dest("CPSR",CTy"PSR",qVar"s"), Bop(Bit,Var("result",F32), LN 31)])]), Let(TP[nVar"v1",qVar"s"], Let(qVar"s0", Rupd ("CPSR", TP[qVar"s", Rupd ("Z", TP[Dest ("CPSR",CTy"PSR", qVar"s"), EQ(Var("result",F32), LW(0,32))])]), TP[Apply (Call ("ArchVersion", ATy(qTy,nTy),LU), qVar"s0"),qVar"s0"]), ITE(EQ(nVar"v1",LN 4), Rupd ("CPSR", TP[qVar"s", Rupd ("C", TP[Dest ("CPSR",CTy"PSR", qVar"s"), Apply (LX(ATy(PTy(F32, PTy(F32, bTy)), bTy)), TP[Var("v",F32), Var("v0",F32), Dest ("C",bTy, Dest ("CPSR", CTy"PSR", qVar"s"))])])]), qVar"s"))),qVar"s")))))))) ; val dfn'MultiplyAccumulate_def = Def ("dfn'MultiplyAccumulate", TP[bVar"setflags",Var("d",F4),Var("n",F4),Var("m",F4),Var("a",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"), Let(TP[Var("v0",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"), Let(TP[Var("v1",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4)),qVar"s"), Let(Var("result",F32), Bop(Add,Bop(Mul,Var("v",F32),Var("v0",F32)), Var("v1",F32)), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("result",F32),Var("d",F4)]),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"setflags", Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("N", TP[Dest ("CPSR",CTy"PSR", qVar"s"), Bop(Bit, Var("result",F32), LN 31)])]), Let(TP[nVar"v2",qVar"s"], Let(qVar"s0", Rupd ("CPSR", TP[qVar"s", Rupd ("Z", TP[Dest ("CPSR", CTy"PSR", qVar"s"), EQ(Var("result", F32), LW(0,32))])]), TP[Apply (Call ("ArchVersion", ATy(qTy,nTy),LU), qVar"s0"),qVar"s0"]), ITE(EQ(nVar"v2",LN 4), Rupd ("CPSR", TP[qVar"s", Rupd ("C", TP[Dest ("CPSR", CTy"PSR", qVar"s"), Apply (LX(ATy(PTy(F32, PTy(F32, PTy(F32, bTy))), bTy)), TP[Var("v",F32), Var("v0", F32), Var("v1", F32), Dest ("C",bTy, Dest ("CPSR", CTy"PSR", qVar"s"))])])]), qVar"s"))),qVar"s"))))))))) ; val dfn'MultiplyLong_def = Def ("dfn'MultiplyLong", TP[bVar"accumulate",bVar"signed",bVar"setflags",Var("dhi",F4), Var("dlo",F4),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"), Let(TP[Var("v0",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"), Let(TP[Var("v1",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("dhi",F4)),qVar"s"), Let(TP[Var("v2",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("dlo",F4)), qVar"s"), Let(Var("result",F64), Bop(Add, ITE(bVar"signed", Bop(Mul,Mop(SE F64,Var("v",F32)), Mop(SE F64,Var("v0",F32))), Bop(Mul,Mop(Cast F64,Var("v",F32)), Mop(Cast F64,Var("v0",F32)))), ITE(bVar"accumulate", CC[Var("v1",F32),Var("v2",F32)],LW(0,64))), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[EX(Var("result",F64),LN 31,LN 0,F32), Var("dlo",F4)]), Apply (Call ("write'R",ATy(qTy,qTy), TP[EX(Var("result",F64),LN 63, LN 32,F32),Var("dhi",F4)]), qVar"s")), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"setflags", Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("N", TP[Dest ("CPSR",CTy"PSR", qVar"s"), Bop(Bit, Var("result",F64), LN 63)])]), Let(TP[nVar"v3",qVar"s"], Let(qVar"s0", Rupd ("CPSR", TP[qVar"s", Rupd ("Z", TP[Dest ("CPSR", CTy"PSR", qVar"s"), EQ(Var("result", F64), LW(0,64))])]), TP[Apply (Call ("ArchVersion", ATy(qTy,nTy),LU), qVar"s0"),qVar"s0"]), ITE(EQ(nVar"v3",LN 4), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("C", TP[Dest ("CPSR", CTy"PSR", qVar"s"), Apply (LX(ATy(PTy(F32, PTy(F32, PTy(F32, PTy(F32, bTy)))), bTy)), TP[Var("v", F32), Var("v0", F32), Var("v1", F32), Var("v2", F32), Dest ("C", bTy, Dest ("CPSR", CTy"PSR", qVar"s"))])])]), Rupd ("CPSR", TP[qVar"s", Rupd ("V", TP[Dest ("CPSR", CTy"PSR", qVar"s"), Apply (LX(ATy(PTy(F32, PTy(F32, PTy(F32, PTy(F32, bTy)))), bTy)), TP[Var("v", F32), Var("v0", F32), Var("v1", F32), Var("v2", F32), Dest ("V", bTy, Dest ("CPSR", CTy"PSR", qVar"s"))])])])), qVar"s"))),qVar"s")))))))))) ; val dfn'MultiplyAccumulateAccumulate_def = Def ("dfn'MultiplyAccumulateAccumulate", TP[Var("dhi",F4),Var("dlo",F4),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"), Let(TP[Var("v",F64),qVar"s"], Let(TP[Var("v",F64),qVar"s"], Let(TP[Var("v",F64),qVar"s"], Let(TP[Var("v0",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), TP[Bop(Mul,Mop(Cast F64,Var("v",F32)), Mop(Cast F64,Var("v0",F32))),qVar"s"]), Let(TP[Var("v0",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("dhi",F4)), qVar"s"), TP[Bop(Add,Var("v",F64), Mop(Cast F64,Var("v0",F32))),qVar"s"])), Let(TP[Var("v0",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("dlo",F4)), qVar"s"), TP[Bop(Add,Var("v",F64),Mop(Cast F64,Var("v0",F32))), qVar"s"])), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[EX(Var("v",F64),LN 31,LN 0,F32),Var("dlo",F4)]), Apply (Call ("write'R",ATy(qTy,qTy), TP[EX(Var("v",F64),LN 63,LN 32,F32), Var("dhi",F4)]),qVar"s"))))))) ; val dfn'MultiplySubtract_def = Def ("dfn'MultiplySubtract", TP[Var("d",F4),Var("n",F4),Var("m",F4),Var("a",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4)),qVar"state"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Let(TP[Var("v",PTy(F32,F4)),qVar"s"], Let(TP[Var("v",F32),qVar"s"], Let(TP[Var("v0",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), Let(TP[Var("v0",F32),qVar"s"], Let(TP[Var("v1",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("n",F4)),qVar"s"), TP[Bop(Mul,Var("v0",F32),Var("v1",F32)), qVar"s"]), TP[Bop(Sub,Var("v",F32),Var("v0",F32)), qVar"s"])), TP[TP[Var("v",F32),Var("d",F4)],qVar"s"]), Apply (Call("write'R",ATy(qTy,qTy),Var("v",PTy(F32,F4))), qVar"s")))))) ; val dfn'Signed16Multiply32Accumulate_def = Def ("dfn'Signed16Multiply32Accumulate", TP[bVar"m_high",bVar"n_high",Var("d",F4),Var("n",F4),Var("m",F4), Var("a",F4)], Close (qVar"state", Let(TP[Var("v",F16),qVar"s"], ITE(bVar"n_high", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"state"), TP[EX(Var("v",F32),LN 31,LN 16,F16),qVar"s"]), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"state"), TP[EX(Var("v",F32),LN 15,LN 0,F16),qVar"s"])), Let(TP[Var("v0",F16),qVar"s"], ITE(bVar"m_high", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), TP[EX(Var("v",F32),LN 31,LN 16,F16),qVar"s"]), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), TP[EX(Var("v",F32),LN 15,LN 0,F16),qVar"s"])), Let(TP[Var("v1",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4)),qVar"s"), Let(iVar"v", Bop(Add, Bop(Mul,Mop(Cast iTy,Var("v",F16)), Mop(Cast iTy,Var("v0",F16))), Mop(Cast iTy,Var("v1",F32))), Let(Var("result32",F32),Mop(Cast F32,iVar"v"), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("result32",F32),Var("d",F4)]), qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(Mop(Not, EQ(iVar"v", Mop(Cast iTy, Var("result32",F32)))), Rupd ("CPSR", TP[qVar"s", Rupd ("Q", TP[Dest ("CPSR",CTy"PSR", qVar"s"),LT])]), qVar"s")))))))))) ; val dfn'Signed16Multiply32Result_def = Def ("dfn'Signed16Multiply32Result", TP[bVar"m_high",bVar"n_high",Var("d",F4),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",F16),qVar"s"], ITE(bVar"n_high", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"state"), TP[EX(Var("v",F32),LN 31,LN 16,F16),qVar"s"]), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"state"), TP[EX(Var("v",F32),LN 15,LN 0,F16),qVar"s"])), Let(TP[Var("v0",F16),qVar"s"], ITE(bVar"m_high", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), TP[EX(Var("v",F32),LN 31,LN 16,F16),qVar"s"]), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), TP[EX(Var("v",F32),LN 15,LN 0,F16),qVar"s"])), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[Mop(Cast F32, Bop(Mul,Mop(Cast iTy,Var("v",F16)), Mop(Cast iTy,Var("v0",F16)))), Var("d",F4)]),qVar"s")))))) ; val dfn'Signed16x32Multiply32Accumulate_def = Def ("dfn'Signed16x32Multiply32Accumulate", TP[bVar"m_high",Var("d",F4),Var("n",F4),Var("m",F4),Var("a",F4)], Close (qVar"state", Let(TP[Var("v",F16),qVar"s"], ITE(bVar"m_high", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"state"), TP[EX(Var("v",F32),LN 31,LN 16,F16),qVar"s"]), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"state"), TP[EX(Var("v",F32),LN 15,LN 0,F16),qVar"s"])), Let(iVar"sh16",Bop(Exp,LI 2,LN 16), Let(TP[Var("v0",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[iVar"v",qVar"s"], Let(TP[iVar"v",qVar"s"], Let(TP[Var("v1",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4)), qVar"s"), TP[Bop(Add, Bop(Mul,Mop(Cast iTy,Var("v0",F32)), Mop(Cast iTy,Var("v",F16))), Bop(Mul,Mop(Cast iTy,Var("v1",F32)), iVar"sh16")),qVar"s"]), TP[Bop(Div,iVar"v",iVar"sh16"),qVar"s"]), Let(Var("result32",F32),Mop(Cast F32,iVar"v"), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("result32",F32),Var("d",F4)]), qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(Mop(Not, EQ(iVar"v", Mop(Cast iTy, Var("result32",F32)))), Rupd ("CPSR", TP[qVar"s", Rupd ("Q", TP[Dest ("CPSR",CTy"PSR", qVar"s"),LT])]), qVar"s")))))))))) ; val dfn'Signed16x32Multiply32Result_def = Def ("dfn'Signed16x32Multiply32Result", TP[bVar"m_high",Var("d",F4),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",F16),qVar"s"], ITE(bVar"m_high", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"state"), TP[EX(Var("v",F32),LN 31,LN 16,F16),qVar"s"]), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"state"), TP[EX(Var("v",F32),LN 15,LN 0,F16),qVar"s"])), Let(TP[Var("v0",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[Mop(Cast F32, Bop(Div, Bop(Mul,Mop(Cast iTy,Var("v0",F32)), Mop(Cast iTy,Var("v",F16))), Bop(Exp,LI 2,LN 16))),Var("d",F4)]), qVar"s")))))) ; val dfn'Signed16Multiply64Accumulate_def = Def ("dfn'Signed16Multiply64Accumulate", TP[bVar"m_high",bVar"n_high",Var("dhi",F4),Var("dlo",F4),Var("n",F4), Var("m",F4)], Close (qVar"state", Let(TP[Var("v",F16),qVar"s"], ITE(bVar"n_high", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"state"), TP[EX(Var("v",F32),LN 31,LN 16,F16),qVar"s"]), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"state"), TP[EX(Var("v",F32),LN 15,LN 0,F16),qVar"s"])), Let(TP[Var("v0",F16),qVar"s"], ITE(bVar"m_high", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), TP[EX(Var("v",F32),LN 31,LN 16,F16),qVar"s"]), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), TP[EX(Var("v",F32),LN 15,LN 0,F16),qVar"s"])), Let(TP[Var("v1",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("dhi",F4)),qVar"s"), Let(TP[iVar"v",qVar"s"], Let(TP[iVar"v1",qVar"s"], Let(TP[Var("v",F64),qVar"s"], Let(TP[Var("v2",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("dlo",F4)),qVar"s"), TP[CC[Var("v1",F32),Var("v2",F32)], qVar"s"]), TP[Mop(Cast iTy,Var("v",F64)),qVar"s"]), TP[Bop(Add, Bop(Mul,Mop(Cast iTy,Var("v",F16)), Mop(Cast iTy,Var("v0",F16))),iVar"v1"), qVar"s"]), Let(Var("result64",F64),Mop(Cast F64,iVar"v"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[EX(Var("result64",F64),LN 31,LN 0, F32),Var("dlo",F4)]), Apply (Call ("write'R",ATy(qTy,qTy), TP[EX(Var("result64",F64),LN 63, LN 32,F32),Var("dhi",F4)]), qVar"s")))))))))) ; val dfn'SignedMultiplyDual_def = Def ("dfn'SignedMultiplyDual", TP[bVar"sub",bVar"m_swap",Var("d",F4),Var("n",F4),Var("m",F4), Var("a",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], ITE(bVar"m_swap", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"state"), Apply (Call ("ROR",ATy(qTy,PTy(F32,qTy)),TP[Var("v",F32),LN 16]), qVar"s")), Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state")), Let(TP[Var("v0",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(iVar"v0", Bop(Mul,Mop(Cast iTy,EX(Var("v0",F32),LN 15,LN 0,F16)), Mop(Cast iTy,EX(Var("v",F32),LN 15,LN 0,F16))), Let(TP[Var("v1",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"s"), Let(iVar"v1", Bop(Mul, Mop(Cast iTy, EX(Var("v1",F32),LN 31,LN 16,F16)), Mop(Cast iTy, EX(Var("v",F32),LN 31,LN 16,F16))), Let(TP[Var("v2",F32),qVar"s"], ITE(EQ(Var("a",F4),LW(15,4)), TP[LW(0,32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("a",F4)),qVar"s")), Let(iVar"result", ITE(bVar"sub", Bop(Add,Bop(Sub,iVar"v0",iVar"v1"), Mop(Cast iTy,Var("v2",F32))), Bop(Add,Bop(Add,iVar"v0",iVar"v1"), Mop(Cast iTy,Var("v2",F32)))), Let(Var("result32",F32), Mop(Cast F32,iVar"result"), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("result32",F32), Var("d",F4)]),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(Mop(Not, EQ(iVar"result", Mop(Cast iTy, Var("result32", F32)))), Rupd ("CPSR", TP[qVar"s", Rupd ("Q", TP[Dest ("CPSR", CTy"PSR", qVar"s"), LT])]), qVar"s"))))))))))))) ; val dfn'SignedMultiplyLongDual_def = Def ("dfn'SignedMultiplyLongDual", TP[bVar"sub",bVar"m_swap",Var("dhi",F4),Var("dlo",F4),Var("n",F4), Var("m",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"), Let(TP[Var("v0",F32),qVar"s"], ITE(bVar"m_swap", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), Apply (Call ("ROR",ATy(qTy,PTy(F32,qTy)), TP[Var("v",F32),LN 16]),qVar"s")), Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s")), Let(iVar"product1", Bop(Mul,Mop(Cast iTy,EX(Var("v",F32),LN 15,LN 0,F16)), Mop(Cast iTy,EX(Var("v0",F32),LN 15,LN 0,F16))), Let(iVar"product2", Bop(Mul, Mop(Cast iTy,EX(Var("v",F32),LN 31,LN 16,F16)), Mop(Cast iTy,EX(Var("v0",F32),LN 31,LN 16,F16))), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("dhi",F4)), qVar"s"), Let(TP[Var("v",F64),qVar"s"], Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("dlo",F4)),qVar"s"), TP[CC[Var("v",F32),Var("v0",F32)], qVar"s"]), Let(Var("result64",F64), Mop(Cast F64, ITE(bVar"sub", Bop(Add, Bop(Sub,iVar"product1", iVar"product2"), Mop(Cast iTy,Var("v",F64))), Bop(Add, Bop(Add,iVar"product1", iVar"product2"), Mop(Cast iTy,Var("v",F64))))), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[EX(Var("result64",F64), LN 31,LN 0,F32), Var("dlo",F4)]), Apply (Call ("write'R",ATy(qTy,qTy), TP[EX(Var("result64",F64), LN 63,LN 32,F32), Var("dhi",F4)]),qVar"s")))))))))))) ; val dfn'SignedMostSignificantMultiply_def = Def ("dfn'SignedMostSignificantMultiply", TP[bVar"round",Var("d",F4),Var("n",F4),Var("m",F4),Var("a",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], ITE(EQ(Var("a",F4),LW(15,4)),TP[LW(0,32),qVar"state"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4)),qVar"state")), Let(TP[Var("v0",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[iVar"v",qVar"s"], Let(TP[iVar"v0",qVar"s"], Let(TP[Var("v1",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), TP[Bop(Mul,Mop(Cast iTy,Var("v0",F32)), Mop(Cast iTy,Var("v1",F32))),qVar"s"]), TP[Bop(Add, Mop(Cast iTy, Bop(Lsl,Mop(Cast F64,Var("v",F32)),LN 32)), iVar"v0"),qVar"s"]), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[EX(Mop(Cast F64, ITE(bVar"round", Bop(Add,iVar"v",LI 2147483648), iVar"v")),LN 63,LN 32,F32), Var("d",F4)]),qVar"s"))))))) ; val dfn'SignedMostSignificantMultiplySubtract_def = Def ("dfn'SignedMostSignificantMultiplySubtract", TP[bVar"round",Var("d",F4),Var("n",F4),Var("m",F4),Var("a",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4)),qVar"state"), Let(TP[iVar"v",qVar"s"], Let(TP[Var("v0",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[iVar"v0",qVar"s"], Let(TP[Var("v1",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), TP[Bop(Mul,Mop(Cast iTy,Var("v0",F32)), Mop(Cast iTy,Var("v1",F32))),qVar"s"]), TP[Bop(Sub, Mop(Cast iTy, Bop(Lsl,Mop(Cast F64,Var("v",F32)),LN 32)), iVar"v0"),qVar"s"])), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[EX(Mop(Cast F64, ITE(bVar"round", Bop(Add,iVar"v",LI 2147483648), iVar"v")),LN 63,LN 32,F32), Var("d",F4)]),qVar"s")))))) ; val SignedParallelAddSub16_def = Def ("SignedParallelAddSub16",TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"), Let(TP[Var("v0",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"), TP[CS(Var("op",FTy 2), [(LW(0,2), TP[Bop(Add, Mop(Cast iTy,EX(Var("v",F32),LN 15,LN 0,F16)), Mop(Cast iTy,EX(Var("v0",F32),LN 15,LN 0,F16))), Bop(Add, Mop(Cast iTy,EX(Var("v",F32),LN 31,LN 16,F16)), Mop(Cast iTy, EX(Var("v0",F32),LN 31,LN 16,F16)))]), (LW(1,2), TP[Bop(Sub, Mop(Cast iTy,EX(Var("v",F32),LN 15,LN 0,F16)), Mop(Cast iTy, EX(Var("v0",F32),LN 31,LN 16,F16))), Bop(Add, Mop(Cast iTy,EX(Var("v",F32),LN 31,LN 16,F16)), Mop(Cast iTy,EX(Var("v0",F32),LN 15,LN 0,F16)))]), (LW(2,2), TP[Bop(Add, Mop(Cast iTy,EX(Var("v",F32),LN 15,LN 0,F16)), Mop(Cast iTy, EX(Var("v0",F32),LN 31,LN 16,F16))), Bop(Sub, Mop(Cast iTy,EX(Var("v",F32),LN 31,LN 16,F16)), Mop(Cast iTy,EX(Var("v0",F32),LN 15,LN 0,F16)))]), (LW(3,2), TP[Bop(Sub, Mop(Cast iTy,EX(Var("v",F32),LN 15,LN 0,F16)), Mop(Cast iTy,EX(Var("v0",F32),LN 15,LN 0,F16))), Bop(Sub, Mop(Cast iTy,EX(Var("v",F32),LN 31,LN 16,F16)), Mop(Cast iTy, EX(Var("v0",F32),LN 31,LN 16,F16)))])]), qVar"s"])))) ; val dfn'SignedAddSub16_def = Def ("dfn'SignedAddSub16", TP[Var("op",FTy 2),Var("d",F4),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",PTy(iTy,iTy)),qVar"s"], Apply (Call ("SignedParallelAddSub16",ATy(qTy,PTy(PTy(iTy,iTy),qTy)), TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)]),qVar"state"), Let(TP[iVar"res1",iVar"res2"],Var("v",PTy(iTy,iTy)), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[CC[Mop(Cast F16,iVar"res2"), Mop(Cast F16,iVar"res1")],Var("d",F4)]), qVar"s"), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("GE", TP[Dest("CPSR",CTy"PSR",qVar"s"), BFI(LN 1,LN 0, ITE(Bop(Ge,iVar"res1",LI 0),LW(3,2), LW(0,2)), Dest ("GE",F4, Dest("CPSR",CTy"PSR",qVar"s")))])]), Apply (Call("IncPC",ATy(qTy,qTy),LU), Rupd ("CPSR", TP[qVar"s", Rupd ("GE", TP[Dest("CPSR",CTy"PSR",qVar"s"), BFI(LN 3,LN 2, ITE(Bop(Ge,iVar"res2",LI 0), LW(3,2),LW(0,2)), Dest ("GE",F4, Dest("CPSR",CTy"PSR",qVar"s")))])])))))))) ; val dfn'SignedSaturatingAddSub16_def = Def ("dfn'SignedSaturatingAddSub16", TP[Var("op",FTy 2),Var("d",F4),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",PTy(iTy,iTy)),qVar"s"], Apply (Call ("SignedParallelAddSub16",ATy(qTy,PTy(PTy(iTy,iTy),qTy)), TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)]),qVar"state"), Let(TP[iVar"res1",iVar"res2"],Var("v",PTy(iTy,iTy)), Let(TP[Var("v",F16),qVar"s"], Apply (Call ("SignedSat",ATy(qTy,PTy(F16,qTy)), TP[iVar"res2",LN 16]),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Let(TP[Var("v",PTy(F32,F4)),qVar"s"], Let(TP[Var("v",F32),qVar"s"], Let(TP[Var("v0",F16),qVar"s"], Apply (Call ("SignedSat",ATy(qTy,PTy(F16,qTy)), TP[iVar"res1",LN 16]),qVar"s"), TP[CC[Var("v",F16),Var("v0",F16)],qVar"s"]), TP[TP[Var("v",F32),Var("d",F4)],qVar"s"]), Apply (Call ("write'R",ATy(qTy,qTy),Var("v",PTy(F32,F4))), qVar"s")))))))) ; val dfn'SignedHalvingAddSub16_def = Def ("dfn'SignedHalvingAddSub16", TP[Var("op",FTy 2),Var("d",F4),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",PTy(iTy,iTy)),qVar"s"], Apply (Call ("SignedParallelAddSub16",ATy(qTy,PTy(PTy(iTy,iTy),qTy)), TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)]),qVar"state"), Let(TP[iVar"res1",iVar"res2"],Var("v",PTy(iTy,iTy)), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[CC[Mop(Cast F16,Bop(Div,iVar"res2",LI 2)), Mop(Cast F16,Bop(Div,iVar"res1",LI 2))], Var("d",F4)]),qVar"s")))))) ; val SignedParallelAddSub8_def = Def ("SignedParallelAddSub8",TP[bVar"sub",Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"), Let(TP[Var("v0",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"), TP[ITE(bVar"sub", TP[Bop(Sub, Mop(Cast iTy,EX(Var("v",F32),LN 7,LN 0,F8)), Mop(Cast iTy,EX(Var("v0",F32),LN 7,LN 0,F8))), Bop(Sub, Mop(Cast iTy,EX(Var("v",F32),LN 15,LN 8,F8)), Mop(Cast iTy,EX(Var("v0",F32),LN 15,LN 8,F8))), Bop(Sub, Mop(Cast iTy,EX(Var("v",F32),LN 23,LN 16,F8)), Mop(Cast iTy,EX(Var("v0",F32),LN 23,LN 16,F8))), Bop(Sub, Mop(Cast iTy,EX(Var("v",F32),LN 31,LN 24,F8)), Mop(Cast iTy,EX(Var("v0",F32),LN 31,LN 24,F8)))], TP[Bop(Add, Mop(Cast iTy,EX(Var("v",F32),LN 7,LN 0,F8)), Mop(Cast iTy,EX(Var("v0",F32),LN 7,LN 0,F8))), Bop(Add, Mop(Cast iTy,EX(Var("v",F32),LN 15,LN 8,F8)), Mop(Cast iTy,EX(Var("v0",F32),LN 15,LN 8,F8))), Bop(Add, Mop(Cast iTy,EX(Var("v",F32),LN 23,LN 16,F8)), Mop(Cast iTy,EX(Var("v0",F32),LN 23,LN 16,F8))), Bop(Add, Mop(Cast iTy,EX(Var("v",F32),LN 31,LN 24,F8)), Mop(Cast iTy,EX(Var("v0",F32),LN 31,LN 24,F8)))]), qVar"s"])))) ; val dfn'SignedAddSub8_def = Def ("dfn'SignedAddSub8",TP[bVar"sub",Var("d",F4),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),qVar"s"], Apply (Call ("SignedParallelAddSub8", ATy(qTy,PTy(PTy(iTy,PTy(iTy,PTy(iTy,iTy))),qTy)), TP[bVar"sub",Var("n",F4),Var("m",F4)]),qVar"state"), Let(TP[iVar"res1",iVar"res2",iVar"res3",iVar"res4"], Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[CC[Mop(Cast F8,iVar"res4"), Mop(Cast F8,iVar"res3"), Mop(Cast F8,iVar"res2"), Mop(Cast F8,iVar"res1")],Var("d",F4)]), qVar"s"), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("GE", TP[Dest("CPSR",CTy"PSR",qVar"s"), BFI(LN 0,LN 0, Mop(Cast F1,Bop(Ge,iVar"res1",LI 0)), Dest ("GE",F4, Dest("CPSR",CTy"PSR",qVar"s")))])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("GE", TP[Dest("CPSR",CTy"PSR",qVar"s"), BFI(LN 1,LN 1, Mop(Cast F1, Bop(Ge,iVar"res2",LI 0)), Dest ("GE",F4, Dest("CPSR",CTy"PSR",qVar"s")))])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("GE", TP[Dest("CPSR",CTy"PSR",qVar"s"), BFI(LN 2,LN 2, Mop(Cast F1, Bop(Ge,iVar"res3",LI 0)), Dest ("GE",F4, Dest ("CPSR",CTy"PSR", qVar"s")))])]), Apply (Call("IncPC",ATy(qTy,qTy),LU), Rupd ("CPSR", TP[qVar"s", Rupd ("GE", TP[Dest("CPSR",CTy"PSR",qVar"s"), BFI(LN 3,LN 3, Mop(Cast F1, Bop(Ge,iVar"res4", LI 0)), Dest ("GE",F4, Dest ("CPSR",CTy"PSR", qVar"s")))])])))))))))) ; val dfn'SignedSaturatingAddSub8_def = Def ("dfn'SignedSaturatingAddSub8", TP[bVar"sub",Var("d",F4),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),qVar"s"], Apply (Call ("SignedParallelAddSub8", ATy(qTy,PTy(PTy(iTy,PTy(iTy,PTy(iTy,iTy))),qTy)), TP[bVar"sub",Var("n",F4),Var("m",F4)]),qVar"state"), Let(TP[iVar"res1",iVar"res2",iVar"res3",iVar"res4"], Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))), Let(TP[Var("v",F8),qVar"s"], Apply (Call ("SignedSat",ATy(qTy,PTy(F8,qTy)), TP[iVar"res4",LN 8]),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Let(TP[Var("v",PTy(F32,F4)),qVar"s"], Let(TP[Var("v",F32),qVar"s"], Let(TP[Var("v0",F8),qVar"s"], Apply (Call ("SignedSat",ATy(qTy,PTy(F8,qTy)), TP[iVar"res3",LN 8]),qVar"s"), Let(TP[Var("v0",FTy 24),qVar"s"], Let(TP[Var("v1",F8),qVar"s"], Apply (Call ("SignedSat", ATy(qTy,PTy(F8,qTy)), TP[iVar"res2",LN 8]), qVar"s"), Let(TP[Var("v1",F16),qVar"s"], Let(TP[Var("v2",F8),qVar"s"], Apply (Call ("SignedSat", ATy(qTy,PTy(F8,qTy)), TP[iVar"res1",LN 8]), qVar"s"), TP[CC[Var("v1",F8), Var("v2",F8)], qVar"s"]), TP[CC[Var("v0",F8), Var("v1",F16)],qVar"s"])), TP[CC[Var("v",F8),Var("v0",FTy 24)], qVar"s"])), TP[TP[Var("v",F32),Var("d",F4)],qVar"s"]), Apply (Call ("write'R",ATy(qTy,qTy),Var("v",PTy(F32,F4))), qVar"s")))))))) ; val dfn'SignedHalvingAddSub8_def = Def ("dfn'SignedHalvingAddSub8", TP[bVar"sub",Var("d",F4),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),qVar"s"], Apply (Call ("SignedParallelAddSub8", ATy(qTy,PTy(PTy(iTy,PTy(iTy,PTy(iTy,iTy))),qTy)), TP[bVar"sub",Var("n",F4),Var("m",F4)]),qVar"state"), Let(TP[iVar"res1",iVar"res2",iVar"res3",iVar"res4"], Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[CC[Mop(Cast F8,Bop(Div,iVar"res4",LI 2)), Mop(Cast F8,Bop(Div,iVar"res3",LI 2)), Mop(Cast F8,Bop(Div,iVar"res2",LI 2)), Mop(Cast F8,Bop(Div,iVar"res1",LI 2))], Var("d",F4)]),qVar"s")))))) ; val UnsignedParallelAddSub16_def = Def ("UnsignedParallelAddSub16",TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"), Let(TP[Var("v0",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"), TP[CS(Var("op",FTy 2), [(LW(0,2), TP[Bop(Add, Call ("UInt",iTy,EX(Var("v",F32),LN 15,LN 0,F16)), Call ("UInt",iTy, EX(Var("v0",F32),LN 15,LN 0,F16))), Bop(Add, Call ("UInt",iTy, EX(Var("v",F32),LN 31,LN 16,F16)), Call ("UInt",iTy, EX(Var("v0",F32),LN 31,LN 16,F16)))]), (LW(1,2), TP[Bop(Sub, Call ("UInt",iTy,EX(Var("v",F32),LN 15,LN 0,F16)), Call ("UInt",iTy, EX(Var("v0",F32),LN 31,LN 16,F16))), Bop(Add, Call ("UInt",iTy, EX(Var("v",F32),LN 31,LN 16,F16)), Call ("UInt",iTy, EX(Var("v0",F32),LN 15,LN 0,F16)))]), (LW(2,2), TP[Bop(Add, Call ("UInt",iTy,EX(Var("v",F32),LN 15,LN 0,F16)), Call ("UInt",iTy, EX(Var("v0",F32),LN 31,LN 16,F16))), Bop(Sub, Call ("UInt",iTy, EX(Var("v",F32),LN 31,LN 16,F16)), Call ("UInt",iTy, EX(Var("v0",F32),LN 15,LN 0,F16)))]), (LW(3,2), TP[Bop(Sub, Call ("UInt",iTy,EX(Var("v",F32),LN 15,LN 0,F16)), Call ("UInt",iTy, EX(Var("v0",F32),LN 15,LN 0,F16))), Bop(Sub, Call ("UInt",iTy, EX(Var("v",F32),LN 31,LN 16,F16)), Call ("UInt",iTy, EX(Var("v0",F32),LN 31,LN 16,F16)))])]), qVar"s"])))) ; val dfn'UnsignedAddSub16_def = Def ("dfn'UnsignedAddSub16", TP[Var("op",FTy 2),Var("d",F4),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",PTy(iTy,iTy)),qVar"s"], Apply (Call ("UnsignedParallelAddSub16",ATy(qTy,PTy(PTy(iTy,iTy),qTy)), TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)]),qVar"state"), Let(TP[iVar"res1",iVar"res2"],Var("v",PTy(iTy,iTy)), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[CC[Mop(Cast F16,iVar"res2"), Mop(Cast F16,iVar"res1")],Var("d",F4)]), qVar"s"), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("GE", TP[Dest("CPSR",CTy"PSR",qVar"s"), BFI(LN 1,LN 0, ITE(Bop(Ge,iVar"res1", ITE(Bop(In,Var("op",FTy 2), SL[LW(1,2),LW(3,2)]), LI 0,LI 65536)),LW(3,2), LW(0,2)), Dest ("GE",F4, Dest("CPSR",CTy"PSR",qVar"s")))])]), Apply (Call("IncPC",ATy(qTy,qTy),LU), Rupd ("CPSR", TP[qVar"s", Rupd ("GE", TP[Dest("CPSR",CTy"PSR",qVar"s"), BFI(LN 3,LN 2, ITE(Bop(Ge,iVar"res2", ITE(Bop(In, Var("op",FTy 2), SL[LW(2,2), LW(3,2)]), LI 0,LI 65536)), LW(3,2),LW(0,2)), Dest ("GE",F4, Dest("CPSR",CTy"PSR",qVar"s")))])])))))))) ; val dfn'UnsignedSaturatingAddSub16_def = Def ("dfn'UnsignedSaturatingAddSub16", TP[Var("op",FTy 2),Var("d",F4),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",PTy(iTy,iTy)),qVar"s"], Apply (Call ("UnsignedParallelAddSub16",ATy(qTy,PTy(PTy(iTy,iTy),qTy)), TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)]),qVar"state"), Let(TP[iVar"res1",iVar"res2"],Var("v",PTy(iTy,iTy)), Let(TP[Var("v",F16),qVar"s"], Apply (Call ("UnsignedSat",ATy(qTy,PTy(F16,qTy)), TP[iVar"res2",LN 16]),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Let(TP[Var("v",PTy(F32,F4)),qVar"s"], Let(TP[Var("v",F32),qVar"s"], Let(TP[Var("v0",F16),qVar"s"], Apply (Call ("UnsignedSat", ATy(qTy,PTy(F16,qTy)), TP[iVar"res1",LN 16]),qVar"s"), TP[CC[Var("v",F16),Var("v0",F16)],qVar"s"]), TP[TP[Var("v",F32),Var("d",F4)],qVar"s"]), Apply (Call ("write'R",ATy(qTy,qTy),Var("v",PTy(F32,F4))), qVar"s")))))))) ; val dfn'UnsignedHalvingAddSub16_def = Def ("dfn'UnsignedHalvingAddSub16", TP[Var("op",FTy 2),Var("d",F4),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",PTy(iTy,iTy)),qVar"s"], Apply (Call ("UnsignedParallelAddSub16",ATy(qTy,PTy(PTy(iTy,iTy),qTy)), TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)]),qVar"state"), Let(TP[iVar"res1",iVar"res2"],Var("v",PTy(iTy,iTy)), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[CC[Mop(Cast F16,Bop(Div,iVar"res2",LI 2)), Mop(Cast F16,Bop(Div,iVar"res1",LI 2))], Var("d",F4)]),qVar"s")))))) ; val UnsignedParallelAddSub8_def = Def ("UnsignedParallelAddSub8",TP[bVar"sub",Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"), Let(TP[Var("v0",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"), TP[ITE(bVar"sub", TP[Bop(Sub, Call("UInt",iTy,EX(Var("v",F32),LN 7,LN 0,F8)), Call ("UInt",iTy,EX(Var("v0",F32),LN 7,LN 0,F8))), Bop(Sub, Call ("UInt",iTy,EX(Var("v",F32),LN 15,LN 8,F8)), Call ("UInt",iTy,EX(Var("v0",F32),LN 15,LN 8,F8))), Bop(Sub, Call ("UInt",iTy,EX(Var("v",F32),LN 23,LN 16,F8)), Call ("UInt",iTy,EX(Var("v0",F32),LN 23,LN 16,F8))), Bop(Sub, Call ("UInt",iTy,EX(Var("v",F32),LN 31,LN 24,F8)), Call ("UInt",iTy,EX(Var("v0",F32),LN 31,LN 24,F8)))], TP[Bop(Add, Call("UInt",iTy,EX(Var("v",F32),LN 7,LN 0,F8)), Call ("UInt",iTy,EX(Var("v0",F32),LN 7,LN 0,F8))), Bop(Add, Call ("UInt",iTy,EX(Var("v",F32),LN 15,LN 8,F8)), Call ("UInt",iTy,EX(Var("v0",F32),LN 15,LN 8,F8))), Bop(Add, Call ("UInt",iTy,EX(Var("v",F32),LN 23,LN 16,F8)), Call ("UInt",iTy,EX(Var("v0",F32),LN 23,LN 16,F8))), Bop(Add, Call ("UInt",iTy,EX(Var("v",F32),LN 31,LN 24,F8)), Call ("UInt",iTy,EX(Var("v0",F32),LN 31,LN 24,F8)))]), qVar"s"])))) ; val dfn'UnsignedAddSub8_def = Def ("dfn'UnsignedAddSub8", TP[bVar"sub",Var("d",F4),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),qVar"s"], Apply (Call ("UnsignedParallelAddSub8", ATy(qTy,PTy(PTy(iTy,PTy(iTy,PTy(iTy,iTy))),qTy)), TP[bVar"sub",Var("n",F4),Var("m",F4)]),qVar"state"), Let(TP[iVar"res1",iVar"res2",iVar"res3",iVar"res4"], Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[CC[Mop(Cast F8,iVar"res4"), Mop(Cast F8,iVar"res3"), Mop(Cast F8,iVar"res2"), Mop(Cast F8,iVar"res1")],Var("d",F4)]), qVar"s"), Let(iVar"ge_lim",ITE(bVar"sub",LI 0,LI 256), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("GE", TP[Dest("CPSR",CTy"PSR",qVar"s"), BFI(LN 0,LN 0, Mop(Cast F1, Bop(Ge,iVar"res1", iVar"ge_lim")), Dest ("GE",F4, Dest("CPSR",CTy"PSR",qVar"s")))])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("GE", TP[Dest("CPSR",CTy"PSR",qVar"s"), BFI(LN 1,LN 1, Mop(Cast F1, Bop(Ge,iVar"res2", iVar"ge_lim")), Dest ("GE",F4, Dest ("CPSR",CTy"PSR", qVar"s")))])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd ("GE", TP[Dest ("CPSR",CTy"PSR",qVar"s"), BFI(LN 2,LN 2, Mop(Cast F1, Bop(Ge,iVar"res3", iVar"ge_lim")), Dest ("GE",F4, Dest ("CPSR",CTy"PSR", qVar"s")))])]), Apply (Call("IncPC",ATy(qTy,qTy),LU), Rupd ("CPSR", TP[qVar"s", Rupd ("GE", TP[Dest ("CPSR",CTy"PSR", qVar"s"), BFI(LN 3,LN 3, Mop(Cast F1, Bop(Ge, iVar"res4", iVar"ge_lim")), Dest ("GE",F4, Dest ("CPSR", CTy"PSR", qVar"s")))])]))))))))))) ; val dfn'UnsignedSaturatingAddSub8_def = Def ("dfn'UnsignedSaturatingAddSub8", TP[bVar"sub",Var("d",F4),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),qVar"s"], Apply (Call ("UnsignedParallelAddSub8", ATy(qTy,PTy(PTy(iTy,PTy(iTy,PTy(iTy,iTy))),qTy)), TP[bVar"sub",Var("n",F4),Var("m",F4)]),qVar"state"), Let(TP[iVar"res1",iVar"res2",iVar"res3",iVar"res4"], Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))), Let(TP[Var("v",F8),qVar"s"], Apply (Call ("UnsignedSat",ATy(qTy,PTy(F8,qTy)), TP[iVar"res4",LN 8]),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Let(TP[Var("v",PTy(F32,F4)),qVar"s"], Let(TP[Var("v",F32),qVar"s"], Let(TP[Var("v0",F8),qVar"s"], Apply (Call ("UnsignedSat",ATy(qTy,PTy(F8,qTy)), TP[iVar"res3",LN 8]),qVar"s"), Let(TP[Var("v0",FTy 24),qVar"s"], Let(TP[Var("v1",F8),qVar"s"], Apply (Call ("UnsignedSat", ATy(qTy,PTy(F8,qTy)), TP[iVar"res2",LN 8]), qVar"s"), Let(TP[Var("v1",F16),qVar"s"], Let(TP[Var("v2",F8),qVar"s"], Apply (Call ("UnsignedSat", ATy(qTy,PTy(F8,qTy)), TP[iVar"res1",LN 8]), qVar"s"), TP[CC[Var("v1",F8), Var("v2",F8)], qVar"s"]), TP[CC[Var("v0",F8), Var("v1",F16)],qVar"s"])), TP[CC[Var("v",F8),Var("v0",FTy 24)], qVar"s"])), TP[TP[Var("v",F32),Var("d",F4)],qVar"s"]), Apply (Call ("write'R",ATy(qTy,qTy),Var("v",PTy(F32,F4))), qVar"s")))))))) ; val dfn'UnsignedHalvingAddSub8_def = Def ("dfn'UnsignedHalvingAddSub8", TP[bVar"sub",Var("d",F4),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),qVar"s"], Apply (Call ("UnsignedParallelAddSub8", ATy(qTy,PTy(PTy(iTy,PTy(iTy,PTy(iTy,iTy))),qTy)), TP[bVar"sub",Var("n",F4),Var("m",F4)]),qVar"state"), Let(TP[iVar"res1",iVar"res2",iVar"res3",iVar"res4"], Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[CC[Mop(Cast F8,Bop(Div,iVar"res4",LI 2)), Mop(Cast F8,Bop(Div,iVar"res3",LI 2)), Mop(Cast F8,Bop(Div,iVar"res2",LI 2)), Mop(Cast F8,Bop(Div,iVar"res1",LI 2))], Var("d",F4)]),qVar"s")))))) ; val dfn'UnsignedSumAbsoluteDifferences_def = Def ("dfn'UnsignedSumAbsoluteDifferences", TP[Var("d",F4),Var("n",F4),Var("m",F4),Var("a",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], ITE(EQ(Var("a",F4),LW(15,4)),TP[LW(0,32),qVar"state"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4)),qVar"state")), Let(TP[Var("v0",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v1",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[Mop(Cast F32, Bop(Add, Bop(Add, Bop(Add, Bop(Add, Call ("UInt",iTy, Var("v",F32)), Mop(Abs, Bop(Sub, Call ("UInt",iTy, EX(Var("v0", F32), LN 7,LN 0, F8)), Call ("UInt",iTy, EX(Var("v1", F32), LN 7,LN 0, F8))))), Mop(Abs, Bop(Sub, Call ("UInt",iTy, EX(Var("v0",F32), LN 15,LN 8,F8)), Call ("UInt",iTy, EX(Var("v1",F32), LN 15,LN 8,F8))))), Mop(Abs, Bop(Sub, Call ("UInt",iTy, EX(Var("v0",F32), LN 23,LN 16,F8)), Call ("UInt",iTy, EX(Var("v1",F32), LN 23,LN 16,F8))))), Mop(Abs, Bop(Sub, Call ("UInt",iTy, EX(Var("v0",F32),LN 31, LN 24,F8)), Call ("UInt",iTy, EX(Var("v1",F32),LN 31, LN 24,F8)))))), Var("d",F4)]),qVar"s"))))))) ; val GenerateIntegerZeroDivide_def = Def ("GenerateIntegerZeroDivide",AVar uTy, Close (qVar"state", Apply(Call("TakeUndefInstrException",ATy(qTy,qTy),LU),qVar"state"))) ; val dfn'Divide_def = Def ("dfn'Divide",TP[bVar"unsigned",Var("d",F4),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"), ITE(EQ(Var("v",F32),LW(0,32)), ITE(Apply (Call ("IntegerZeroDivideTrappingEnabled",ATy(qTy,bTy),LU), qVar"s"), Apply (Call("GenerateIntegerZeroDivide",ATy(qTy,qTy),LU), qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy),TP[LW(0,32),Var("d",F4)]), qVar"s"))), Let(TP[Var("v",F32),qVar"s"], ITE(bVar"unsigned", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"s"), Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), TP[Bop(Div,Var("v",F32),Var("v0",F32)), qVar"s"])), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"s"), Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), TP[Bop(Quot,Var("v",F32),Var("v0",F32)), qVar"s"]))), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("v",F32),Var("d",F4)]),qVar"s"))))))) ; val dfn'PackHalfword_def = Def ("dfn'PackHalfword", TP[Var("shift_t",CTy"SRType"),nVar"shift_n",bVar"tbform",Var("d",F4), Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("Shift",ATy(qTy,PTy(F32,qTy)), TP[Var("v",F32),Var("shift_t",CTy"SRType"), nVar"shift_n", Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"s"))]), qVar"s"), Let(TP[Var("v0",F16),qVar"s"], ITE(bVar"tbform", TP[EX(Var("v",F32),LN 15,LN 0,F16),qVar"s"], Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"s"), TP[EX(Var("v",F32),LN 15,LN 0,F16),qVar"s"])), Let(TP[Var("v1",F16),qVar"s"], ITE(bVar"tbform", Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"s"), TP[EX(Var("v",F32),LN 31,LN 16,F16),qVar"s"]), TP[EX(Var("v",F32),LN 31,LN 16,F16),qVar"s"]), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[CC[Var("v1",F16),Var("v0",F16)], Var("d",F4)]),qVar"s")))))))) ; val dfn'Saturate_def = Def ("dfn'Saturate", TP[Var("shift_t",CTy"SRType"),nVar"shift_n",nVar"saturate_to", bVar"unsigned",Var("d",F4),Var("n",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("Shift",ATy(qTy,PTy(F32,qTy)), TP[Var("v",F32),Var("shift_t",CTy"SRType"), nVar"shift_n", Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"s"))]), qVar"s"), Let(TP[Var("v",PTy(F32,bTy)),qVar"s"], ITE(bVar"unsigned", Apply (Call ("UnsignedSatQ",ATy(qTy,PTy(PTy(F32,bTy),qTy)), TP[Mop(Cast iTy,Var("v",F32)), nVar"saturate_to"]),qVar"s"), Apply (Call ("SignedSatQ",ATy(qTy,PTy(PTy(F32,bTy),qTy)), TP[Mop(Cast iTy,Var("v",F32)), nVar"saturate_to"]),qVar"s")), Let(TP[Var("result",F32),bVar"sat"], Var("v",PTy(F32,bTy)), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[ITE(bVar"unsigned",Var("result",F32), Call ("SignExtendFrom",F32, TP[Var("result",F32), nVar"saturate_to"])), Var("d",F4)]),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"sat", Rupd ("CPSR", TP[qVar"s", Rupd ("Q", TP[Dest("CPSR",CTy"PSR",qVar"s"), LT])]),qVar"s"))))))))) ; val dfn'Saturate16_def = Def ("dfn'Saturate16", TP[nVar"saturate_to",bVar"unsigned",Var("d",F4),Var("n",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"), Let(TP[Var("v",PTy(PTy(F16,bTy),PTy(F16,bTy))),qVar"s"], ITE(bVar"unsigned", Let(TP[Var("v0",PTy(F16,bTy)),qVar"s"], Apply (Call ("UnsignedSatQ",ATy(qTy,PTy(PTy(F16,bTy),qTy)), TP[Mop(Cast iTy, EX(Var("v",F32),LN 15,LN 0,F16)), nVar"saturate_to"]),qVar"s"), Let(TP[Var("v1",PTy(F16,bTy)),qVar"s"], Apply (Call ("UnsignedSatQ", ATy(qTy,PTy(PTy(F16,bTy),qTy)), TP[Mop(Cast iTy, EX(Var("v",F32),LN 31,LN 16,F16)), nVar"saturate_to"]),qVar"s"), TP[TP[Var("v0",PTy(F16,bTy)), Var("v1",PTy(F16,bTy))],qVar"s"])), Let(TP[Var("v0",PTy(F16,bTy)),qVar"s"], Apply (Call ("SignedSatQ",ATy(qTy,PTy(PTy(F16,bTy),qTy)), TP[Mop(Cast iTy, EX(Var("v",F32),LN 15,LN 0,F16)), nVar"saturate_to"]),qVar"s"), Let(TP[Var("v1",PTy(F16,bTy)),qVar"s"], Apply (Call ("SignedSatQ", ATy(qTy,PTy(PTy(F16,bTy),qTy)), TP[Mop(Cast iTy, EX(Var("v",F32),LN 31,LN 16,F16)), nVar"saturate_to"]),qVar"s"), TP[TP[Var("v0",PTy(F16,bTy)), Var("v1",PTy(F16,bTy))],qVar"s"]))), Let(TP[TP[Var("result1",F16),bVar"sat1"],Var("result2",F16), bVar"sat2"],Var("v",PTy(PTy(F16,bTy),PTy(F16,bTy))), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[ITE(bVar"unsigned", CC[Var("result2",F16), Var("result1",F16)], CC[Call ("SignExtendFrom",F16, TP[Var("result2",F16), nVar"saturate_to"]), Call ("SignExtendFrom",F16, TP[Var("result1",F16), nVar"saturate_to"])]), Var("d",F4)]),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(Bop(Or,bVar"sat1",bVar"sat2"), Rupd ("CPSR", TP[qVar"s", Rupd ("Q", TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]), qVar"s")))))))) ; val dfn'ExtendByte_def = Def ("dfn'ExtendByte", TP[bVar"unsigned",Var("d",F4),Var("n",F4),Var("m",F4),nVar"rotation"], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], ITE(EQ(Var("n",F4),LW(15,4)),TP[LW(0,32),qVar"state"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state")), Let(TP[Var("v0",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"), Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("ROR",ATy(qTy,PTy(F32,qTy)), TP[Var("v0",F32),nVar"rotation"]),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[Bop(Add,Var("v",F32), Call ("Extend",F32, TP[bVar"unsigned", EX(Var("v0",F32),LN 7,LN 0,F8)])), Var("d",F4)]),qVar"s"))))))) ; val dfn'ExtendByte16_def = Def ("dfn'ExtendByte16", TP[bVar"unsigned",Var("d",F4),Var("n",F4),Var("m",F4),nVar"rotation"], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], ITE(EQ(Var("n",F4),LW(15,4)),TP[LW(0,32),qVar"state"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state")), Let(TP[Var("v0",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"), Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("ROR",ATy(qTy,PTy(F32,qTy)), TP[Var("v0",F32),nVar"rotation"]),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[CC[Bop(Add,EX(Var("v",F32),LN 31,LN 16,F16), Call ("Extend",F16, TP[bVar"unsigned", EX(Var("v0",F32),LN 23,LN 16,F8)])), Bop(Add,EX(Var("v",F32),LN 15,LN 0,F16), Call ("Extend",F16, TP[bVar"unsigned", EX(Var("v0",F32),LN 7,LN 0,F8)]))], Var("d",F4)]),qVar"s"))))))) ; val dfn'ExtendHalfword_def = Def ("dfn'ExtendHalfword", TP[bVar"unsigned",Var("d",F4),Var("n",F4),Var("m",F4),nVar"rotation"], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], ITE(EQ(Var("n",F4),LW(15,4)),TP[LW(0,32),qVar"state"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state")), Let(TP[Var("v0",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"), Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("ROR",ATy(qTy,PTy(F32,qTy)), TP[Var("v0",F32),nVar"rotation"]),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[Bop(Add,Var("v",F32), Call ("Extend",F32, TP[bVar"unsigned", EX(Var("v0",F32),LN 15,LN 0,F16)])), Var("d",F4)]),qVar"s"))))))) ; val dfn'SelectBytes_def = Def ("dfn'SelectBytes",TP[Var("d",F4),Var("n",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"), Let(TP[Var("v0",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[CC[ITE(Bop(Bit, Dest ("GE",F4, Dest("CPSR",CTy"PSR",qVar"s")), LN 3), EX(Var("v",F32),LN 31,LN 24,F8), EX(Var("v0",F32),LN 31,LN 24,F8)), ITE(Bop(Bit, Dest ("GE",F4, Dest("CPSR",CTy"PSR",qVar"s")), LN 2), EX(Var("v",F32),LN 23,LN 16,F8), EX(Var("v0",F32),LN 23,LN 16,F8)), ITE(Bop(Bit, Dest ("GE",F4, Dest("CPSR",CTy"PSR",qVar"s")), LN 1),EX(Var("v",F32),LN 15,LN 8,F8), EX(Var("v0",F32),LN 15,LN 8,F8)), ITE(Bop(Bit, Dest ("GE",F4, Dest("CPSR",CTy"PSR",qVar"s")), LN 0),EX(Var("v",F32),LN 7,LN 0,F8), EX(Var("v0",F32),LN 7,LN 0,F8))], Var("d",F4)]),qVar"s")))))) ; val dfn'ByteReverse_def = Def ("dfn'ByteReverse",TP[Var("d",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[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)],Var("d",F4)]), qVar"s"))))) ; val dfn'ByteReversePackedHalfword_def = Def ("dfn'ByteReversePackedHalfword",TP[Var("d",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[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)],Var("d",F4)]), qVar"s"))))) ; val dfn'ByteReverseSignedHalfword_def = Def ("dfn'ByteReverseSignedHalfword",TP[Var("d",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[CC[Mop(SE(FTy 24),EX(Var("v",F32),LN 7,LN 0,F8)), EX(Var("v",F32),LN 15,LN 8,F8)],Var("d",F4)]), qVar"s"))))) ; val dfn'ReverseBits_def = Def ("dfn'ReverseBits",TP[Var("d",F4),Var("m",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[Mop(Rev,Var("v",F32)),Var("d",F4)]),qVar"s"))))) ; val dfn'BitFieldExtract_def = Def ("dfn'BitFieldExtract", TP[bVar"unsigned",Var("d",F4),Var("n",F4),nVar"lsbit",nVar"widthminus1"], Close (qVar"state", Let(nVar"msbit",Bop(Add,nVar"lsbit",nVar"widthminus1"), Let(TP[Var("v",F32),qVar"s"], ITE(bVar"unsigned", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"state"), TP[EX(Var("v",F32),nVar"msbit",nVar"lsbit",F32), qVar"s"]), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"state"), TP[Call ("SignExtendFrom",F32, TP[EX(Var("v",F32),nVar"msbit",nVar"lsbit",F32), nVar"widthminus1"]),qVar"s"])), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy),TP[Var("v",F32),Var("d",F4)]), qVar"s")))))) ; val dfn'BitFieldClearOrInsert_def = Def ("dfn'BitFieldClearOrInsert", TP[Var("d",F4),Var("n",F4),nVar"lsbit",nVar"msbit"], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], ITE(EQ(Var("n",F4),LW(15,4)),TP[LW(0,32),qVar"state"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state")), Let(TP[Var("v0",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("d",F4)),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[Mop(Cast F32, BFI(nVar"msbit",nVar"lsbit", EX(Mop(Cast vTy,Var("v",F32)), Bop(Sub,nVar"msbit",nVar"lsbit"), LN 0,vTy),Mop(Cast vTy,Var("v0",F32)))), Var("d",F4)]),qVar"s")))))) ; val dfn'LoadWord_def = Def ("dfn'LoadWord", TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4), Var("m",CTy"offset1")], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v0",F32),qVar"s"], CS(Var("m",CTy"offset1"), [(Call ("register_form1",CTy"offset1", TP[Var("m",F4),Var("shift_t",CTy"SRType"), nVar"shift_n"]), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), Apply (Call ("Shift",ATy(qTy,PTy(F32,qTy)), TP[Var("v",F32), Var("shift_t",CTy"SRType"), nVar"shift_n", Dest ("C",bTy, Dest("CPSR",CTy"PSR",qVar"s"))]), qVar"s"))), (Call ("immediate_form1",CTy"offset1", Var("imm32",F32)), TP[Var("imm32",F32),qVar"s"])]), Let(Var("offset_addr",F32), ITE(bVar"add", Bop(Add,Var("v",F32),Var("v0",F32)), Bop(Sub,Var("v",F32),Var("v0",F32))), Let(Var("address",F32), ITE(bVar"index",Var("offset_addr",F32), Var("v",F32)), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("MemU",ATy(qTy,PTy(F32,qTy)), TP[Var("address",F32),LN 4]), qVar"s"), Let(qVar"s", ITE(bVar"wback", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("offset_addr",F32), Var("n",F4)]),qVar"s"), qVar"s"), ITE(EQ(Var("t",F4),LW(15,4)), ITE(Call ("Aligned",bTy, TP[Var("address",F32), LN 4]), Apply (Call ("LoadWritePC", ATy(qTy,qTy), Var("v",F32)),qVar"s"), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy, PTy(uTy,qTy)), Call ("UNPREDICTABLE", CTy"exception", LS"Load")), qVar"s"))), Apply (Call("IncPC",ATy(qTy,qTy),LU), Let(TP[Var("v",PTy(F32,F4)), qVar"s"], Let(TP[Var("v",F32), qVar"s"], ITB([(Bop(Or, Apply (Call ("UnalignedSupport", ATy(qTy, bTy), LU), qVar"s"), Call ("Aligned", bTy, TP[Var("address", F32), LN 4])), TP[Var("v",F32), qVar"s"]), (EQ(Dest ("Encoding", CTy"Encoding", qVar"s"), LC("Encoding_ARM", CTy"Encoding")), Apply (Call ("ROR", ATy(qTy, PTy(F32, qTy)), TP[Var("v", F32), Bop(Mul, LN 8, Mop(Cast nTy, EX(Var("address", F32), LN 1, LN 0, FTy 2)))]), qVar"s"))], TP[LX F32,qVar"s"]), TP[TP[Var("v",F32), Var("t",F4)], qVar"s"]), Apply (Call ("write'R", ATy(qTy,qTy), Var("v",PTy(F32,F4))), qVar"s")))))))))), qVar"s")))) ; val dfn'LoadLiteral_def = Def ("dfn'LoadLiteral",TP[bVar"add",Var("t",F4),Var("imm32",F32)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),LW(15,4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"), Let(Var("v",F32), Call("Align",F32,TP[Var("v",F32),LN 4]), Let(Var("address",F32), ITE(bVar"add", Bop(Add,Var("v",F32),Var("imm32",F32)), Bop(Sub,Var("v",F32),Var("imm32",F32))), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("MemU",ATy(qTy,PTy(F32,qTy)), TP[Var("address",F32),LN 4]),qVar"s"), ITE(EQ(Var("t",F4),LW(15,4)), ITE(Call ("Aligned",bTy, TP[Var("address",F32),LN 4]), Apply (Call ("LoadWritePC",ATy(qTy,qTy), Var("v",F32)),qVar"s"), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE", CTy"exception", LS"LoadLiteral")), qVar"s"))), Apply (Call("IncPC",ATy(qTy,qTy),LU), Let(TP[Var("v",PTy(F32,F4)),qVar"s"], Let(TP[Var("v",F32),qVar"s"], ITB([(Bop(Or, Apply (Call ("UnalignedSupport", ATy(qTy,bTy), LU),qVar"s"), Call ("Aligned",bTy, TP[Var("address", F32),LN 4])), TP[Var("v",F32),qVar"s"]), (EQ(Dest ("Encoding", CTy"Encoding", qVar"s"), LC("Encoding_ARM", CTy"Encoding")), Apply (Call ("ROR", ATy(qTy, PTy(F32,qTy)), TP[Var("v",F32), Bop(Mul,LN 8, Mop(Cast nTy, EX(Var("address", F32), LN 1, LN 0, FTy 2)))]), qVar"s"))], TP[LX F32,qVar"s"]), TP[TP[Var("v",F32), Var("t",F4)],qVar"s"]), Apply (Call ("write'R",ATy(qTy,qTy), Var("v",PTy(F32,F4))), qVar"s")))))))),qVar"s")))) ; val dfn'LoadUnprivileged_def = Def ("dfn'LoadUnprivileged", TP[bVar"add",bVar"postindex",Var("t",F4),Var("n",F4), Var("m",CTy"offset1")], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v0",F32),qVar"s"], CS(Var("m",CTy"offset1"), [(Call ("register_form1",CTy"offset1", TP[Var("m",F4),Var("shift_t",CTy"SRType"), nVar"shift_n"]), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), Apply (Call ("Shift",ATy(qTy,PTy(F32,qTy)), TP[Var("v",F32), Var("shift_t",CTy"SRType"), nVar"shift_n", Dest ("C",bTy, Dest("CPSR",CTy"PSR",qVar"s"))]), qVar"s"))), (Call ("immediate_form1",CTy"offset1", Var("imm32",F32)), TP[Var("imm32",F32),qVar"s"])]), Let(Var("offset_addr",F32), ITE(bVar"add", Bop(Add,Var("v",F32),Var("v0",F32)), Bop(Sub,Var("v",F32),Var("v0",F32))), Let(Var("address",F32), ITE(bVar"postindex",Var("v",F32), Var("offset_addr",F32)), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("MemU_unpriv", ATy(qTy,PTy(F32,qTy)), TP[Var("address",F32),LN 4]), qVar"s"), Let(TP[bVar"v0",qVar"s"], Let(qVar"s0", ITE(bVar"postindex", Apply (Call ("write'R", ATy(qTy,qTy), TP[Var("offset_addr", F32), Var("n",F4)]), qVar"s"),qVar"s"), TP[Apply (Call ("UnalignedSupport", ATy(qTy,bTy),LU), qVar"s0"),qVar"s0"]), Apply (Call("IncPC",ATy(qTy,qTy),LU), Let(TP[Var("v",PTy(F32,F4)), qVar"s"], Let(TP[Var("v",F32),qVar"s"], ITB([(Bop(Or,bVar"v0", Call ("Aligned", bTy, TP[Var("address", F32), LN 4])), TP[Var("v",F32), qVar"s"]), (EQ(Dest ("Encoding", CTy"Encoding", qVar"s"), LC("Encoding_ARM", CTy"Encoding")), Apply (Call ("ROR", ATy(qTy, PTy(F32, qTy)), TP[Var("v", F32), Bop(Mul, LN 8, Mop(Cast nTy, EX(Var("address", F32), LN 1, LN 0, FTy 2)))]), qVar"s"))], TP[LX F32,qVar"s"]), TP[TP[Var("v",F32), Var("t",F4)], qVar"s"]), Apply (Call ("write'R",ATy(qTy,qTy), Var("v",PTy(F32,F4))), qVar"s"))))))))),qVar"s")))) ; val dfn'LoadByte_def = Def ("dfn'LoadByte", TP[bVar"unsigned",bVar"add",bVar"index",bVar"wback",Var("t",F4), Var("n",F4),Var("m",CTy"offset1")], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v0",F32),qVar"s"], CS(Var("m",CTy"offset1"), [(Call ("register_form1",CTy"offset1", TP[Var("m",F4),Var("shift_t",CTy"SRType"), nVar"shift_n"]), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), Apply (Call ("Shift",ATy(qTy,PTy(F32,qTy)), TP[Var("v",F32), Var("shift_t",CTy"SRType"), nVar"shift_n", Dest ("C",bTy, Dest("CPSR",CTy"PSR",qVar"s"))]), qVar"s"))), (Call ("immediate_form1",CTy"offset1", Var("imm32",F32)), TP[Var("imm32",F32),qVar"s"])]), Let(Var("offset_addr",F32), ITE(bVar"add", Bop(Add,Var("v",F32),Var("v0",F32)), Bop(Sub,Var("v",F32),Var("v0",F32))), Let(TP[Var("v",F8),qVar"s"], Apply (Call ("MemU",ATy(qTy,PTy(F8,qTy)), TP[ITE(bVar"index", Var("offset_addr",F32), Var("v",F32)),LN 1]),qVar"s"), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[Call ("Extend",F32, TP[bVar"unsigned", Var("v",F8)]),Var("t",F4)]), qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"wback", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("offset_addr",F32), Var("n",F4)]),qVar"s"), qVar"s"))))))),qVar"s")))) ; val dfn'LoadByteLiteral_def = Def ("dfn'LoadByteLiteral", TP[bVar"unsigned",bVar"add",Var("t",F4),Var("imm32",F32)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),LW(15,4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"), Let(Var("v",F32), Call("Align",F32,TP[Var("v",F32),LN 4]), Let(TP[Var("v",F8),qVar"s"], Apply (Call ("MemU",ATy(qTy,PTy(F8,qTy)), TP[ITE(bVar"add", Bop(Add,Var("v",F32), Var("imm32",F32)), Bop(Sub,Var("v",F32), Var("imm32",F32))),LN 1]), qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[Call ("Extend",F32, TP[bVar"unsigned",Var("v",F8)]), Var("t",F4)]),qVar"s"))))),qVar"s")))) ; val dfn'LoadByteUnprivileged_def = Def ("dfn'LoadByteUnprivileged", TP[bVar"add",bVar"postindex",Var("t",F4),Var("n",F4), Var("m",CTy"offset1")], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v0",F32),qVar"s"], CS(Var("m",CTy"offset1"), [(Call ("register_form1",CTy"offset1", TP[Var("m",F4),Var("shift_t",CTy"SRType"), nVar"shift_n"]), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), Apply (Call ("Shift",ATy(qTy,PTy(F32,qTy)), TP[Var("v",F32), Var("shift_t",CTy"SRType"), nVar"shift_n", Dest ("C",bTy, Dest("CPSR",CTy"PSR",qVar"s"))]), qVar"s"))), (Call ("immediate_form1",CTy"offset1", Var("imm32",F32)), TP[Var("imm32",F32),qVar"s"])]), Let(Var("offset_addr",F32), ITE(bVar"add", Bop(Add,Var("v",F32),Var("v0",F32)), Bop(Sub,Var("v",F32),Var("v0",F32))), Let(TP[Var("v",F8),qVar"s"], Apply (Call ("MemU_unpriv",ATy(qTy,PTy(F8,qTy)), TP[ITE(bVar"postindex",Var("v",F32), Var("offset_addr",F32)),LN 1]), qVar"s"), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[Mop(Cast F32,Var("v",F8)), Var("t",F4)]),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"postindex", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("offset_addr",F32), Var("n",F4)]),qVar"s"), qVar"s"))))))),qVar"s")))) ; val dfn'LoadSignedByteUnprivileged_def = Def ("dfn'LoadSignedByteUnprivileged", TP[bVar"add",bVar"postindex",Var("t",F4),Var("n",F4), Var("m",CTy"offset2")], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v0",F32),qVar"s"], CS(Var("m",CTy"offset2"), [(Call("register_form2",CTy"offset2",Var("m",F4)), Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s")), (Call ("immediate_form2",CTy"offset2", Var("imm32",F32)), TP[Var("imm32",F32),qVar"s"])]), Let(Var("offset_addr",F32), ITE(bVar"add", Bop(Add,Var("v",F32),Var("v0",F32)), Bop(Sub,Var("v",F32),Var("v0",F32))), Let(TP[Var("v",F8),qVar"s"], Apply (Call ("MemU_unpriv",ATy(qTy,PTy(F8,qTy)), TP[ITE(bVar"postindex",Var("v",F32), Var("offset_addr",F32)),LN 1]), qVar"s"), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[Mop(SE F32,Var("v",F8)), Var("t",F4)]),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"postindex", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("offset_addr",F32), Var("n",F4)]),qVar"s"), qVar"s"))))))),qVar"s")))) ; val dfn'LoadHalf_def = Def ("dfn'LoadHalf", TP[bVar"unsigned",bVar"add",bVar"index",bVar"wback",Var("t",F4), Var("n",F4),Var("m",CTy"offset1")], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v0",F32),qVar"s"], CS(Var("m",CTy"offset1"), [(Call ("register_form1",CTy"offset1", TP[Var("m",F4),Var("shift_t",CTy"SRType"), nVar"shift_n"]), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), Apply (Call ("Shift",ATy(qTy,PTy(F32,qTy)), TP[Var("v",F32), Var("shift_t",CTy"SRType"), nVar"shift_n", Dest ("C",bTy, Dest("CPSR",CTy"PSR",qVar"s"))]), qVar"s"))), (Call ("immediate_form1",CTy"offset1", Var("imm32",F32)), TP[Var("imm32",F32),qVar"s"])]), Let(Var("offset_addr",F32), ITE(bVar"add", Bop(Add,Var("v",F32),Var("v0",F32)), Bop(Sub,Var("v",F32),Var("v0",F32))), Let(Var("address",F32), ITE(bVar"index",Var("offset_addr",F32), Var("v",F32)), Let(TP[Var("v",F16),qVar"s"], Apply (Call ("MemU",ATy(qTy,PTy(F16,qTy)), TP[Var("address",F32),LN 2]), qVar"s"), Let(TP[bVar"v0",qVar"s"], Let(qVar"s0", ITE(bVar"wback", Apply (Call ("write'R", ATy(qTy,qTy), TP[Var("offset_addr", F32), Var("n",F4)]), qVar"s"),qVar"s"), TP[Apply (Call ("UnalignedSupport", ATy(qTy,bTy),LU), qVar"s0"),qVar"s0"]), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[ITE(Bop(Or,bVar"v0", Call ("Aligned", bTy, TP[Var("address", F32), LN 2])), Call ("Extend",F32, TP[bVar"unsigned", Var("v",F16)]), LX F32),Var("t",F4)]), qVar"s")))))))),qVar"s")))) ; val dfn'LoadHalfLiteral_def = Def ("dfn'LoadHalfLiteral", TP[bVar"unsigned",bVar"add",Var("t",F4),Var("imm32",F32)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),LW(15,4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"), Let(Var("v",F32), Call("Align",F32,TP[Var("v",F32),LN 4]), Let(Var("address",F32), ITE(bVar"add", Bop(Add,Var("v",F32),Var("imm32",F32)), Bop(Sub,Var("v",F32),Var("imm32",F32))), Let(TP[Var("v",F16),qVar"s"], Apply (Call ("MemU",ATy(qTy,PTy(F16,qTy)), TP[Var("address",F32),LN 2]),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[ITE(Bop(Or, Apply (Call ("UnalignedSupport", ATy(qTy,bTy),LU), qVar"s"), Call ("Aligned",bTy, TP[Var("address",F32), LN 2])), Call ("Extend",F32, TP[bVar"unsigned", Var("v",F16)]),LX F32), Var("t",F4)]),qVar"s")))))), qVar"s")))) ; val dfn'LoadHalfUnprivileged_def = Def ("dfn'LoadHalfUnprivileged", TP[bVar"unsigned",bVar"add",bVar"postindex",Var("t",F4),Var("n",F4), Var("m",CTy"offset2")], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v0",F32),qVar"s"], CS(Var("m",CTy"offset2"), [(Call("register_form2",CTy"offset2",Var("m",F4)), Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s")), (Call ("immediate_form2",CTy"offset2", Var("imm32",F32)), TP[Var("imm32",F32),qVar"s"])]), Let(Var("offset_addr",F32), ITE(bVar"add", Bop(Add,Var("v",F32),Var("v0",F32)), Bop(Sub,Var("v",F32),Var("v0",F32))), Let(Var("address",F32), ITE(bVar"postindex",Var("v",F32), Var("offset_addr",F32)), Let(TP[Var("v",F16),qVar"s"], Apply (Call ("MemU_unpriv", ATy(qTy,PTy(F16,qTy)), TP[Var("address",F32),LN 2]), qVar"s"), Let(TP[bVar"v0",qVar"s"], Let(qVar"s0", ITE(bVar"postindex", Apply (Call ("write'R", ATy(qTy,qTy), TP[Var("offset_addr", F32), Var("n",F4)]), qVar"s"),qVar"s"), TP[Apply (Call ("UnalignedSupport", ATy(qTy,bTy),LU), qVar"s0"),qVar"s0"]), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[ITE(Bop(Or,bVar"v0", Call ("Aligned", bTy, TP[Var("address", F32), LN 2])), Call ("Extend",F32, TP[bVar"unsigned", Var("v",F16)]), LX F32),Var("t",F4)]), qVar"s")))))))),qVar"s")))) ; val dfn'LoadMultiple_def = Def ("dfn'LoadMultiple", TP[bVar"increment",bVar"index",bVar"wback",Var("n",F4), Var("registers",F16)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(Var("length",F32), Bop(Mul,LW(4,32), Mop(Cast F32, Call("BitCount",nTy,Var("registers",F16)))), Let(Var("s",PTy(F32,qTy)), Mop(Snd, Apply (For(TP[LN 0,LN 14, Close (nVar"i", Close (Var("state",PTy(F32,qTy)), ITE(Bop(Bit, Var("registers",F16), nVar"i"), Let(Var("s",PTy(F32,qTy)), Let(TP[Var("v", PTy(F32, F4)), Var("s", PTy(F32, qTy))], Let(TP[Var("v", F32), Var("s", PTy(F32, qTy))], CS(Apply (Call ("MemA", ATy(qTy, PTy(F32, qTy)), TP[Mop(Fst, Var("state", PTy(F32, qTy))), LN 4]), Mop(Snd, Var("state", PTy(F32, qTy)))), [(TP[Var("v", F32), qVar"s3"], TP[Var("v", F32), Mop(Fst, Var("state", PTy(F32, qTy))), qVar"s3"])]), TP[TP[Var("v", F32), Mop(Cast F4, nVar"i")], Var("s", PTy(F32, qTy))]), TP[Mop(Fst, Var("s", PTy(F32, qTy))), Apply (Call ("write'R", ATy(qTy, qTy), Var("v", PTy(F32, F4))), Mop(Snd, Var("s", PTy(F32, qTy))))]), TP[LU, Bop(Add, Mop(Fst, Var("s", PTy(F32, qTy))), LW(4,32)), Mop(Snd, Var("s", PTy(F32, qTy)))]), TP[LU, Var("state", PTy(F32,qTy))])))]), TP[ITB([(EQ(bVar"index",bVar"increment"), Bop(Add, ITE(bVar"increment", Var("v",F32), Bop(Sub,Var("v",F32), Var("length",F32))), LW(4,32))), (bVar"increment",Var("v",F32))], Bop(Sub,Var("v",F32), Var("length",F32))),qVar"s"])), Let(Var("s",PTy(F32,qTy)), ITE(Bop(Bit,Var("registers",F16),LN 15), Let(TP[Var("v",F32), Var("s",PTy(F32,qTy))], CS(Apply (Call ("MemA", ATy(qTy,PTy(F32,qTy)), TP[Mop(Fst, Var("s",PTy(F32,qTy))), LN 4]), Mop(Snd,Var("s",PTy(F32,qTy)))), [(TP[Var("v",F32),qVar"s3"], TP[Var("v",F32), Mop(Fst, Var("s",PTy(F32,qTy))), qVar"s3"])]), TP[Mop(Fst,Var("s",PTy(F32,qTy))), Apply (Call ("LoadWritePC",ATy(qTy,qTy), Var("v",F32)), Mop(Snd,Var("s",PTy(F32,qTy))))]), TP[Mop(Fst,Var("s",PTy(F32,qTy))), Apply (Call("IncPC",ATy(qTy,qTy),LU), Mop(Snd,Var("s",PTy(F32,qTy))))]), ITE(bVar"wback", ITE(Bop(Bit,Var("registers",F16), Mop(Cast nTy,Var("n",F4))), Apply (Call ("write'R",ATy(qTy,qTy), TP[LX F32,Var("n",F4)]), Mop(Snd,Var("s",PTy(F32,qTy)))), Apply (Call ("write'R",ATy(qTy,qTy), TP[ITE(bVar"increment", Bop(Add,Var("v",F32), Var("length",F32)), Bop(Sub,Var("v",F32), Var("length",F32))), Var("n",F4)]), Mop(Snd,Var("s",PTy(F32,qTy))))), Mop(Snd,Var("s",PTy(F32,qTy)))))))), qVar"s")))) ; val dfn'LoadMultipleExceptionReturn_def = Def ("dfn'LoadMultipleExceptionReturn", TP[bVar"increment",bVar"wordhigher",bVar"wback",Var("n",F4), Var("registers",FTy 15)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)),LU), ITE(bVar"v", Apply (Call("TakeUndefInstrException",ATy(qTy,qTy),LU), qVar"s"),qVar"s")), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), ITE(bVar"v", Mop(Snd, Apply (Call ("raise'exception", ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"LoadMultipleExceptionReturn")), qVar"s")),qVar"s")), Let(Var("length",F32), Bop(Add, Bop(Mul,LW(4,32), Mop(Cast F32, Call ("BitCount",nTy, Var("registers",FTy 15)))),LW(4,32)), Let(Var("s",PTy(F32,qTy)), Mop(Snd, Apply (For(TP[LN 0,LN 14, Close (nVar"i", Close (Var("state",PTy(F32,qTy)), ITE(Bop(Bit, Var("registers", FTy 15),nVar"i"), Let(Var("s",PTy(F32,qTy)), Let(TP[Var("v", PTy(F32, F4)), Var("s", PTy(F32, qTy))], Let(TP[Var("v", F32), Var("s", PTy(F32, qTy))], CS(Apply (Call ("MemA", ATy(qTy, PTy(F32, qTy)), TP[Mop(Fst, Var("state", PTy(F32, qTy))), LN 4]), Mop(Snd, Var("state", PTy(F32, qTy)))), [(TP[Var("v", F32), qVar"s3"], TP[Var("v", F32), Mop(Fst, Var("state", PTy(F32, qTy))), qVar"s3"])]), TP[TP[Var("v", F32), Mop(Cast F4, nVar"i")], Var("s", PTy(F32, qTy))]), TP[Mop(Fst, Var("s", PTy(F32, qTy))), Apply (Call ("write'R", ATy(qTy, qTy), Var("v", PTy(F32, F4))), Mop(Snd, Var("s", PTy(F32, qTy))))]), TP[LU, Bop(Add, Mop(Fst, Var("s", PTy(F32, qTy))), LW(4,32)), Mop(Snd, Var("s", PTy(F32, qTy)))]), TP[LU, Var("state", PTy(F32,qTy))])))]), TP[ITB([(bVar"wordhigher", Bop(Add, ITE(bVar"increment", Var("v",F32), Bop(Sub,Var("v",F32), Var("length",F32))), LW(4,32))), (bVar"increment",Var("v",F32))], Bop(Sub,Var("v",F32), Var("length",F32))),qVar"s"])), Let(TP[Var("v0",F32),Var("s",PTy(F32,qTy))], CS(Apply (Call ("MemA",ATy(qTy,PTy(F32,qTy)), TP[Mop(Fst,Var("s",PTy(F32,qTy))), LN 4]), Mop(Snd,Var("s",PTy(F32,qTy)))), [(TP[Var("v",F32),qVar"s3"], TP[Var("v",F32), Mop(Fst,Var("s",PTy(F32,qTy))), qVar"s3"])]), Let(Var("s",PTy(F32,qTy)), ITE(bVar"wback", TP[Mop(Fst,Var("s",PTy(F32,qTy))), ITE(Bop(Bit, Var("registers",FTy 15), Mop(Cast nTy,Var("n",F4))), Apply (Call ("write'R",ATy(qTy,qTy), TP[LX F32,Var("n",F4)]), Mop(Snd, Var("s",PTy(F32,qTy)))), Apply (Call ("write'R",ATy(qTy,qTy), TP[ITE(bVar"increment", Bop(Add, Var("v",F32), Var("length", F32)), Bop(Sub, Var("v",F32), Var("length", F32))), Var("n",F4)]), Mop(Snd, Var("s",PTy(F32,qTy)))))], Var("s",PTy(F32,qTy))), Let(TP[Var("v1",CTy"PSR"), Var("s",PTy(F32,qTy))], Let(TP[Var("v",CTy"PSR"),qVar"s3"], Apply (Const ("SPSR", ATy(qTy,PTy(CTy"PSR",qTy))), Mop(Snd,Var("s",PTy(F32,qTy)))), TP[Var("v",CTy"PSR"), Mop(Fst,Var("s",PTy(F32,qTy))), qVar"s3"]), Apply (Call ("BranchWritePC",ATy(qTy,qTy), Var("v0",F32)), Apply (Call ("CPSRWriteByInstr", ATy(qTy,qTy), TP[Call ("reg'PSR",F32, Var("v1",CTy"PSR")), LW(15,4),LT]), Mop(Snd,Var("s",PTy(F32,qTy))))))))))))))) ; val dfn'LoadMultipleUserRegisters_def = Def ("dfn'LoadMultipleUserRegisters", TP[bVar"increment",bVar"wordhigher",Var("n",F4),Var("registers",FTy 15)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)),LU), ITE(bVar"v", Apply (Call("TakeUndefInstrException",ATy(qTy,qTy),LU), qVar"s"),qVar"s")), Let(qVar"s", ITE(bVar"v", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"LoadMultipleUserRegisters")),qVar"s")), qVar"s"), Let(TP[Var("v",F32),qVar"s"], ITE(bVar"increment", Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"s"), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"s"), TP[Bop(Sub,Var("v",F32), Bop(Mul,LW(4,32), Mop(Cast F32, Call ("BitCount",nTy, Var("registers",FTy 15))))), qVar"s"])), Apply (Call("IncPC",ATy(qTy,qTy),LU), Mop(Snd, Mop(Snd, Apply (For(TP[LN 0,LN 14, Close (nVar"i", Close (Var("state",PTy(F32,qTy)), ITE(Bop(Bit, Var("registers", FTy 15), nVar"i"), Let(Var("s", PTy(F32,qTy)), Let(TP[Var("v", PTy(F32, PTy(F4, FTy 5))), Var("s", PTy(F32, qTy))], Let(TP[Var("v", F32), Var("s", PTy(F32, qTy))], CS(Apply (Call ("MemA", ATy(qTy, PTy(F32, qTy)), TP[Mop(Fst, Var("state", PTy(F32, qTy))), LN 4]), Mop(Snd, Var("state", PTy(F32, qTy)))), [(TP[Var("v", F32), qVar"s3"], TP[Var("v", F32), Mop(Fst, Var("state", PTy(F32, qTy))), qVar"s3"])]), TP[TP[Var("v", F32), Mop(Cast F4, nVar"i"), LW(16, 5)], Var("s", PTy(F32, qTy))]), TP[Mop(Fst, Var("s", PTy(F32, qTy))), Apply (Call ("write'Rmode", ATy(qTy, qTy), Var("v", PTy(F32, PTy(F4, FTy 5)))), Mop(Snd, Var("s", PTy(F32, qTy))))]), TP[LU, Bop(Add, Mop(Fst, Var("s", PTy(F32, qTy))), LW(4,32)), Mop(Snd, Var("s", PTy(F32, qTy)))]), TP[LU, Var("state", PTy(F32,qTy))])))]), TP[ITE(bVar"wordhigher", Bop(Add,Var("v",F32),LW(4,32)), Var("v",F32)),qVar"s"])))))))))) ; val dfn'LoadDual_def = Def ("dfn'LoadDual", TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("t2",F4), Var("n",F4),Var("m",CTy"offset2")], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v0",F32),qVar"s"], CS(Var("m",CTy"offset2"), [(Call("register_form2",CTy"offset2",Var("m",F4)), Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s")), (Call ("immediate_form2",CTy"offset2", Var("imm32",F32)), TP[Var("imm32",F32),qVar"s"])]), Let(Var("offset_addr",F32), ITE(bVar"add", Bop(Add,Var("v",F32),Var("v0",F32)), Bop(Sub,Var("v",F32),Var("v0",F32))), Let(Var("address",F32), ITE(bVar"index",Var("offset_addr",F32), Var("v",F32)), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("MemA",ATy(qTy,PTy(F32,qTy)), TP[Var("address",F32),LN 4]), qVar"s"), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("MemA",ATy(qTy,PTy(F32,qTy)), TP[Bop(Add,Var("address",F32), LW(4,32)),LN 4]), Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("v",F32),Var("t",F4)]), qVar"s")), Let(qVar"s", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("v",F32), Var("t2",F4)]),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"wback", Apply (Call ("write'R", ATy(qTy,qTy), TP[Var("offset_addr", F32), Var("n",F4)]), qVar"s"),qVar"s"))))))))), qVar"s")))) ; val dfn'LoadDualLiteral_def = Def ("dfn'LoadDualLiteral", TP[bVar"add",Var("t",F4),Var("t2",F4),Var("imm32",F32)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),LW(15,4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], ITE(bVar"add", Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"), TP[Bop(Add, Call("Align",F32,TP[Var("v",F32),LN 4]), Var("imm32",F32)),qVar"s"]), Let(TP[Var("v",F32),qVar"s"], Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"), TP[Bop(Sub, Call("Align",F32,TP[Var("v",F32),LN 4]), Var("imm32",F32)),qVar"s"])), Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("MemA",ATy(qTy,PTy(F32,qTy)), TP[Var("v",F32),LN 4]),qVar"s"), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("MemA",ATy(qTy,PTy(F32,qTy)), TP[Bop(Add,Var("v",F32),LW(4,32)),LN 4]), Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("v0",F32),Var("t",F4)]),qVar"s")), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("v",F32),Var("t2",F4)]),qVar"s"))))), qVar"s")))) ; val dfn'LoadExclusive_def = Def ("dfn'LoadExclusive",TP[Var("t",F4),Var("n",F4),Var("imm32",F32)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("MemA",ATy(qTy,PTy(F32,qTy)), TP[Bop(Add,Var("v",F32),Var("imm32",F32)),LN 4]), qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("v",F32),Var("t",F4)]),qVar"s")))), qVar"s")))) ; val dfn'LoadExclusiveByte_def = Def ("dfn'LoadExclusiveByte",TP[Var("t",F4),Var("n",F4)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v",F8),qVar"s"], Apply (Call ("MemA",ATy(qTy,PTy(F8,qTy)), TP[Var("v",F32),LN 1]),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[Mop(Cast F32,Var("v",F8)),Var("t",F4)]), qVar"s")))),qVar"s")))) ; val dfn'LoadExclusiveHalf_def = Def ("dfn'LoadExclusiveHalf",TP[Var("t",F4),Var("n",F4)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v",F16),qVar"s"], Apply (Call ("MemA",ATy(qTy,PTy(F16,qTy)), TP[Var("v",F32),LN 2]),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[Mop(Cast F32,Var("v",F16)),Var("t",F4)]), qVar"s")))),qVar"s")))) ; val dfn'LoadExclusiveDoubleword_def = Def ("dfn'LoadExclusiveDoubleword",TP[Var("t",F4),Var("t2",F4),Var("n",F4)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v",F64),qVar"s"], Apply (Call ("MemA",ATy(qTy,PTy(F64,qTy)), TP[Var("v",F32),LN 8]),qVar"s"), Let(TP[bVar"v0",qVar"s"], Let(qVar"s0", Apply (Call ("write'R",ATy(qTy,qTy), TP[ITE(Apply (Call ("BigEndian",ATy(qTy,bTy), LU),qVar"s"), EX(Var("v",F64),LN 63,LN 32,F32), EX(Var("v",F64),LN 31,LN 0,F32)), Var("t",F4)]),qVar"s"), TP[Apply (Call("BigEndian",ATy(qTy,bTy),LU), qVar"s0"),qVar"s0"]), Apply (Call("IncPC",ATy(qTy,qTy),LU), Apply (Call ("write'R",ATy(qTy,qTy), TP[ITE(bVar"v0", EX(Var("v",F64),LN 31,LN 0,F32), EX(Var("v",F64),LN 63,LN 32,F32)), Var("t2",F4)]),qVar"s"))))),qVar"s")))) ; val dfn'StoreWord_def = Def ("dfn'StoreWord", TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4), Var("m",CTy"offset1")], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v0",F32),qVar"s"], CS(Var("m",CTy"offset1"), [(Call ("register_form1",CTy"offset1", TP[Var("m",F4),Var("shift_t",CTy"SRType"), nVar"shift_n"]), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), Apply (Call ("Shift",ATy(qTy,PTy(F32,qTy)), TP[Var("v",F32), Var("shift_t",CTy"SRType"), nVar"shift_n", Dest ("C",bTy, Dest("CPSR",CTy"PSR",qVar"s"))]), qVar"s"))), (Call ("immediate_form1",CTy"offset1", Var("imm32",F32)), TP[Var("imm32",F32),qVar"s"])]), Let(Var("offset_addr",F32), ITE(bVar"add", Bop(Add,Var("v",F32),Var("v0",F32)), Bop(Sub,Var("v",F32),Var("v0",F32))), Let(Var("address",F32), ITE(bVar"index",Var("offset_addr",F32), Var("v",F32)), Let(TP[Var("v",F32),qVar"s"], ITE(EQ(Var("t",F4),LW(15,4)), Apply (Call ("PCStoreValue", ATy(qTy,PTy(F32,qTy)),LU), qVar"s"), Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("t",F4)),qVar"s")), Let(qVar"s", ITE(Bop(Or, Apply (Call ("UnalignedSupport", ATy(qTy,bTy),LU), qVar"s"), Bop(Or, Call ("Aligned",bTy, TP[Var("address",F32), LN 4]), EQ(Apply (Call ("CurrentInstrSet", ATy(qTy, CTy"InstrSet"), LU),qVar"s"), LC("InstrSet_ARM", CTy"InstrSet")))), Apply (Call ("write'MemU",ATy(qTy,qTy), TP[Var("v",F32), Var("address",F32),LN 4]), qVar"s"), Apply (Call ("write'MemU",ATy(qTy,qTy), TP[LX F32, Var("address",F32),LN 4]), qVar"s")), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"wback", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("offset_addr", F32),Var("n",F4)]), qVar"s"),qVar"s")))))))), qVar"s")))) ; val dfn'StoreUnprivileged_def = Def ("dfn'StoreUnprivileged", TP[bVar"add",bVar"postindex",Var("t",F4),Var("n",F4), Var("m",CTy"offset1")], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v0",F32),qVar"s"], CS(Var("m",CTy"offset1"), [(Call ("register_form1",CTy"offset1", TP[Var("m",F4),Var("shift_t",CTy"SRType"), nVar"shift_n"]), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), Apply (Call ("Shift",ATy(qTy,PTy(F32,qTy)), TP[Var("v",F32), Var("shift_t",CTy"SRType"), nVar"shift_n", Dest ("C",bTy, Dest("CPSR",CTy"PSR",qVar"s"))]), qVar"s"))), (Call ("immediate_form1",CTy"offset1", Var("imm32",F32)), TP[Var("imm32",F32),qVar"s"])]), Let(Var("offset_addr",F32), ITE(bVar"add", Bop(Add,Var("v",F32),Var("v0",F32)), Bop(Sub,Var("v",F32),Var("v0",F32))), Let(Var("address",F32), ITE(bVar"postindex",Var("v",F32), Var("offset_addr",F32)), Let(TP[Var("v",F32),qVar"s"], ITE(EQ(Var("t",F4),LW(15,4)), Apply (Call ("PCStoreValue", ATy(qTy,PTy(F32,qTy)),LU), qVar"s"), Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("t",F4)),qVar"s")), Let(qVar"s", ITE(Bop(Or, Apply (Call ("UnalignedSupport", ATy(qTy,bTy),LU), qVar"s"), Bop(Or, Call ("Aligned",bTy, TP[Var("address",F32), LN 4]), EQ(Apply (Call ("CurrentInstrSet", ATy(qTy, CTy"InstrSet"), LU),qVar"s"), LC("InstrSet_ARM", CTy"InstrSet")))), Apply (Call ("write'MemU_unpriv", ATy(qTy,qTy), TP[Var("v",F32), Var("address",F32),LN 4]), qVar"s"), Apply (Call ("write'MemU_unpriv", ATy(qTy,qTy), TP[LX F32, Var("address",F32),LN 4]), qVar"s")), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"postindex", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("offset_addr", F32),Var("n",F4)]), qVar"s"),qVar"s")))))))), qVar"s")))) ; val dfn'StoreByte_def = Def ("dfn'StoreByte", TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4), Var("m",CTy"offset1")], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v0",F32),qVar"s"], CS(Var("m",CTy"offset1"), [(Call ("register_form1",CTy"offset1", TP[Var("m",F4),Var("shift_t",CTy"SRType"), nVar"shift_n"]), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), Apply (Call ("Shift",ATy(qTy,PTy(F32,qTy)), TP[Var("v",F32), Var("shift_t",CTy"SRType"), nVar"shift_n", Dest ("C",bTy, Dest("CPSR",CTy"PSR",qVar"s"))]), qVar"s"))), (Call ("immediate_form1",CTy"offset1", Var("imm32",F32)), TP[Var("imm32",F32),qVar"s"])]), Let(Var("offset_addr",F32), ITE(bVar"add", Bop(Add,Var("v",F32),Var("v0",F32)), Bop(Sub,Var("v",F32),Var("v0",F32))), Let(qVar"s", Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("t",F4)),qVar"s"), Apply (Call ("write'MemU",ATy(qTy,qTy), TP[EX(Var("v0",F32),LN 7,LN 0,F8), ITE(bVar"index", Var("offset_addr",F32), Var("v",F32)),LN 1]), qVar"s")), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"wback", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("offset_addr",F32), Var("n",F4)]),qVar"s"), qVar"s")))))),qVar"s")))) ; val dfn'StoreByteUnprivileged_def = Def ("dfn'StoreByteUnprivileged", TP[bVar"add",bVar"postindex",Var("t",F4),Var("n",F4), Var("m",CTy"offset1")], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v0",F32),qVar"s"], CS(Var("m",CTy"offset1"), [(Call ("register_form1",CTy"offset1", TP[Var("m",F4),Var("shift_t",CTy"SRType"), nVar"shift_n"]), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), Apply (Call ("Shift",ATy(qTy,PTy(F32,qTy)), TP[Var("v",F32), Var("shift_t",CTy"SRType"), nVar"shift_n", Dest ("C",bTy, Dest("CPSR",CTy"PSR",qVar"s"))]), qVar"s"))), (Call ("immediate_form1",CTy"offset1", Var("imm32",F32)), TP[Var("imm32",F32),qVar"s"])]), Let(Var("offset_addr",F32), ITE(bVar"add", Bop(Add,Var("v",F32),Var("v0",F32)), Bop(Sub,Var("v",F32),Var("v0",F32))), Let(qVar"s", Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("t",F4)),qVar"s"), Apply (Call ("write'MemU_unpriv",ATy(qTy,qTy), TP[EX(Var("v0",F32),LN 7,LN 0,F8), ITE(bVar"postindex", Var("v",F32), Var("offset_addr",F32)), LN 1]),qVar"s")), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"postindex", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("offset_addr",F32), Var("n",F4)]),qVar"s"), qVar"s")))))),qVar"s")))) ; val dfn'StoreHalf_def = Def ("dfn'StoreHalf", TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4), Var("m",CTy"offset1")], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v0",F32),qVar"s"], CS(Var("m",CTy"offset1"), [(Call ("register_form1",CTy"offset1", TP[Var("m",F4),Var("shift_t",CTy"SRType"), nVar"shift_n"]), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s"), Apply (Call ("Shift",ATy(qTy,PTy(F32,qTy)), TP[Var("v",F32), Var("shift_t",CTy"SRType"), nVar"shift_n", Dest ("C",bTy, Dest("CPSR",CTy"PSR",qVar"s"))]), qVar"s"))), (Call ("immediate_form1",CTy"offset1", Var("imm32",F32)), TP[Var("imm32",F32),qVar"s"])]), Let(Var("offset_addr",F32), ITE(bVar"add", Bop(Add,Var("v",F32),Var("v0",F32)), Bop(Sub,Var("v",F32),Var("v0",F32))), Let(Var("address",F32), ITE(bVar"index",Var("offset_addr",F32), Var("v",F32)), Let(qVar"s", ITE(Bop(Or, Apply (Call ("UnalignedSupport", ATy(qTy,bTy),LU),qVar"s"), Call ("Aligned",bTy, TP[Var("address",F32),LN 2])), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("t",F4)),qVar"s"), Apply (Call ("write'MemU",ATy(qTy,qTy), TP[EX(Var("v",F32),LN 15, LN 0,F16), Var("address",F32),LN 2]), qVar"s")), Apply (Call ("write'MemU",ATy(qTy,qTy), TP[LX F16,Var("address",F32), LN 2]),qVar"s")), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"wback", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("offset_addr",F32), Var("n",F4)]),qVar"s"), qVar"s"))))))),qVar"s")))) ; val dfn'StoreHalfUnprivileged_def = Def ("dfn'StoreHalfUnprivileged", TP[bVar"add",bVar"postindex",Var("t",F4),Var("n",F4), Var("m",CTy"offset2")], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v0",F32),qVar"s"], CS(Var("m",CTy"offset2"), [(Call("register_form2",CTy"offset2",Var("m",F4)), Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s")), (Call ("immediate_form2",CTy"offset2", Var("imm32",F32)), TP[Var("imm32",F32),qVar"s"])]), Let(Var("offset_addr",F32), ITE(bVar"add", Bop(Add,Var("v",F32),Var("v0",F32)), Bop(Sub,Var("v",F32),Var("v0",F32))), Let(Var("address",F32), ITE(bVar"postindex",Var("v",F32), Var("offset_addr",F32)), Let(qVar"s", ITE(Bop(Or, Apply (Call ("UnalignedSupport", ATy(qTy,bTy),LU),qVar"s"), Call ("Aligned",bTy, TP[Var("address",F32),LN 2])), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("t",F4)),qVar"s"), Apply (Call ("write'MemU_unpriv", ATy(qTy,qTy), TP[EX(Var("v",F32),LN 15, LN 0,F16), Var("address",F32),LN 2]), qVar"s")), Apply (Call ("write'MemU_unpriv", ATy(qTy,qTy), TP[LX F16,Var("address",F32), LN 2]),qVar"s")), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"postindex", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("offset_addr",F32), Var("n",F4)]),qVar"s"), qVar"s"))))))),qVar"s")))) ; val dfn'StoreMultiple_def = Def ("dfn'StoreMultiple", TP[bVar"increment",bVar"index",bVar"wback",Var("n",F4), Var("registers",F16)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(Var("length",F32), Bop(Mul,LW(4,32), Mop(Cast F32, Call("BitCount",nTy,Var("registers",F16)))), Let(Var("s",PTy(F32,qTy)), Mop(Snd, Apply (For(TP[LN 0,LN 14, Close (nVar"i", Close (Var("state",PTy(F32,qTy)), ITE(Bop(Bit, Var("registers",F16), nVar"i"), Let(Var("s",PTy(F32,qTy)), ITE(Bop(And, EQ(Mop(Cast F4, nVar"i"), Var("n", F4)), Bop(And, bVar"wback", Mop(Not, EQ(nVar"i", Call ("LowestSetBit", nTy, Var("registers", F16)))))), TP[Mop(Fst, Var("state", PTy(F32, qTy))), Apply (Call ("write'MemA", ATy(qTy, qTy), TP[LX F32, Mop(Fst, Var("state", PTy(F32, qTy))), LN 4]), Mop(Snd, Var("state", PTy(F32, qTy))))], Let(TP[Var("v0", F32), Var("s", PTy(F32, qTy))], CS(Apply (Call ("R", ATy(qTy, PTy(F32, qTy)), Mop(Cast F4, nVar"i")), Mop(Snd, Var("state", PTy(F32, qTy)))), [(TP[Var("v", F32), qVar"s3"], TP[Var("v", F32), Mop(Fst, Var("state", PTy(F32, qTy))), qVar"s3"])]), TP[Mop(Fst, Var("s", PTy(F32, qTy))), Apply (Call ("write'MemA", ATy(qTy, qTy), TP[Var("v0", F32), Mop(Fst, Var("state", PTy(F32, qTy))), LN 4]), Mop(Snd, Var("s", PTy(F32, qTy))))])), TP[LU, Bop(Add, Mop(Fst, Var("s", PTy(F32, qTy))), LW(4,32)), Mop(Snd, Var("s", PTy(F32, qTy)))]), TP[LU, Var("state", PTy(F32,qTy))])))]), TP[ITB([(EQ(bVar"index",bVar"increment"), Bop(Add, ITE(bVar"increment", Var("v",F32), Bop(Sub,Var("v",F32), Var("length",F32))), LW(4,32))), (bVar"increment",Var("v",F32))], Bop(Sub,Var("v",F32), Var("length",F32))),qVar"s"])), Let(Var("s",PTy(F32,qTy)), ITE(Bop(Bit,Var("registers",F16),LN 15), Let(TP[Var("v0",F32), Var("s0",PTy(F32,qTy))], CS(Apply (Call ("PCStoreValue", ATy(qTy,PTy(F32,qTy)),LU), Mop(Snd,Var("s",PTy(F32,qTy)))), [(TP[Var("v",F32),qVar"s3"], TP[Var("v",F32), Mop(Fst, Var("s",PTy(F32,qTy))), qVar"s3"])]), TP[Mop(Fst,Var("s0",PTy(F32,qTy))), Apply (Call ("write'MemA",ATy(qTy,qTy), TP[Var("v0",F32), Mop(Fst, Var("s",PTy(F32,qTy))), LN 4]), Mop(Snd,Var("s0",PTy(F32,qTy))))]), Var("s",PTy(F32,qTy))), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"wback", Apply (Call ("write'R",ATy(qTy,qTy), TP[ITE(bVar"increment", Bop(Add,Var("v",F32), Var("length",F32)), Bop(Sub,Var("v",F32), Var("length",F32))), Var("n",F4)]), Mop(Snd,Var("s",PTy(F32,qTy)))), Mop(Snd,Var("s",PTy(F32,qTy))))))))), qVar"s")))) ; val dfn'StoreMultipleUserRegisters_def = Def ("dfn'StoreMultipleUserRegisters", TP[bVar"increment",bVar"wordhigher",Var("n",F4),Var("registers",F16)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)),LU), ITE(bVar"v", Apply (Call("TakeUndefInstrException",ATy(qTy,qTy),LU), qVar"s"),qVar"s")), Let(qVar"s", ITE(bVar"v", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"StoreMultipleUserRegisters")), qVar"s")),qVar"s"), Let(TP[Var("v",F32),qVar"s"], ITE(bVar"increment", Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"s"), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"s"), TP[Bop(Sub,Var("v",F32), Bop(Mul,LW(4,32), Mop(Cast F32, Call ("BitCount",nTy, Var("registers",F16))))), qVar"s"])), Let(Var("s",PTy(F32,qTy)), Mop(Snd, Apply (For(TP[LN 0,LN 14, Close (nVar"i", Close (Var("state",PTy(F32,qTy)), ITE(Bop(Bit, Var("registers",F16), nVar"i"), Let(Var("s",PTy(F32,qTy)), Let(TP[Var("v0",F32), Var("s", PTy(F32, qTy))], CS(Apply (Call ("Rmode", ATy(qTy, PTy(F32, qTy)), TP[Mop(Cast F4, nVar"i"), LW(16, 5)]), Mop(Snd, Var("state", PTy(F32, qTy)))), [(TP[Var("v", F32), qVar"s3"], TP[Var("v", F32), Mop(Fst, Var("state", PTy(F32, qTy))), qVar"s3"])]), TP[Mop(Fst, Var("s", PTy(F32, qTy))), Apply (Call ("write'MemA", ATy(qTy, qTy), TP[Var("v0", F32), Mop(Fst, Var("state", PTy(F32, qTy))), LN 4]), Mop(Snd, Var("s", PTy(F32, qTy))))]), TP[LU, Bop(Add, Mop(Fst, Var("s", PTy(F32, qTy))), LW(4,32)), Mop(Snd, Var("s", PTy(F32, qTy)))]), TP[LU, Var("state", PTy(F32,qTy))])))]), TP[ITE(bVar"wordhigher", Bop(Add,Var("v",F32),LW(4,32)), Var("v",F32)),qVar"s"])), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(Bop(Bit,Var("registers",F16),LN 15), Let(TP[Var("v0",F32), Var("s0",PTy(F32,qTy))], CS(Apply (Call ("PCStoreValue", ATy(qTy,PTy(F32,qTy)),LU), Mop(Snd,Var("s",PTy(F32,qTy)))), [(TP[Var("v",F32),qVar"s3"], TP[Var("v",F32), Mop(Fst,Var("s",PTy(F32,qTy))), qVar"s3"])]), Apply (Call ("write'MemA",ATy(qTy,qTy), TP[Var("v0",F32), Mop(Fst, Var("s",PTy(F32,qTy))), LN 4]), Mop(Snd,Var("s0",PTy(F32,qTy))))), Mop(Snd,Var("s",PTy(F32,qTy)))))))))))) ; val dfn'StoreDual_def = Def ("dfn'StoreDual", TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("t2",F4), Var("n",F4),Var("m",CTy"offset2")], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v0",F32),qVar"s"], CS(Var("m",CTy"offset2"), [(Call("register_form2",CTy"offset2",Var("m",F4)), Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)), qVar"s")), (Call ("immediate_form2",CTy"offset2", Var("imm32",F32)), TP[Var("imm32",F32),qVar"s"])]), Let(Var("offset_addr",F32), ITE(bVar"add", Bop(Add,Var("v",F32),Var("v0",F32)), Bop(Sub,Var("v",F32),Var("v0",F32))), Let(Var("address",F32), ITE(bVar"index",Var("offset_addr",F32), Var("v",F32)), Let(qVar"s", Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("t2",F4)), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R", ATy(qTy,PTy(F32,qTy)), Var("t",F4)),qVar"s"), Apply (Call ("write'MemA", ATy(qTy,qTy), TP[Var("v",F32), Var("address",F32), LN 4]),qVar"s"))), Apply (Call ("write'MemA",ATy(qTy,qTy), TP[Var("v",F32), Bop(Add,Var("address",F32), LW(4,32)),LN 4]), qVar"s")), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"wback", Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("offset_addr",F32), Var("n",F4)]),qVar"s"), qVar"s"))))))),qVar"s")))) ; val dfn'StoreExclusive_def = Def ("dfn'StoreExclusive", TP[Var("d",F4),Var("t",F4),Var("n",F4),Var("imm32",F32)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(Var("v",F32),Bop(Add,Var("v",F32),Var("imm32",F32)), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(Call ("ExclusiveMonitorsPass",bTy, TP[Var("v",F32),LN 4]), Apply (Call ("write'R",ATy(qTy,qTy), TP[LW(0,32),Var("d",F4)]), Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("t",F4)),qVar"s"), Apply (Call ("write'MemA",ATy(qTy,qTy), TP[Var("v0",F32),Var("v",F32), LN 4]),qVar"s"))), Apply (Call ("write'R",ATy(qTy,qTy), TP[LW(1,32),Var("d",F4)]),qVar"s"))))), qVar"s")))) ; val dfn'StoreExclusiveByte_def = Def ("dfn'StoreExclusiveByte",TP[Var("d",F4),Var("t",F4),Var("n",F4)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(Call ("ExclusiveMonitorsPass",bTy, TP[Var("v",F32),LN 1]), Apply (Call ("write'R",ATy(qTy,qTy), TP[LW(0,32),Var("d",F4)]), Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("t",F4)),qVar"s"), Apply (Call ("write'MemA",ATy(qTy,qTy), TP[EX(Var("v0",F32),LN 7,LN 0,F8), Var("v",F32),LN 1]),qVar"s"))), Apply (Call ("write'R",ATy(qTy,qTy), TP[LW(1,32),Var("d",F4)]),qVar"s")))), qVar"s")))) ; val dfn'StoreExclusiveHalf_def = Def ("dfn'StoreExclusiveHalf",TP[Var("d",F4),Var("t",F4),Var("n",F4)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(Call ("ExclusiveMonitorsPass",bTy, TP[Var("v",F32),LN 2]), Apply (Call ("write'R",ATy(qTy,qTy), TP[LW(0,32),Var("d",F4)]), Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("t",F4)),qVar"s"), Apply (Call ("write'MemA",ATy(qTy,qTy), TP[EX(Var("v0",F32),LN 15,LN 0,F16), Var("v",F32),LN 2]),qVar"s"))), Apply (Call ("write'R",ATy(qTy,qTy), TP[LW(1,32),Var("d",F4)]),qVar"s")))), qVar"s")))) ; val dfn'StoreExclusiveDoubleword_def = Def ("dfn'StoreExclusiveDoubleword", TP[Var("d",F4),Var("t",F4),Var("t2",F4),Var("n",F4)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"), Let(TP[Var("v0",F64),qVar"s"], ITE(Apply(Call("BigEndian",ATy(qTy,bTy),LU),qVar"s"), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)),Var("t",F4)), qVar"s"), Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("t2",F4)),qVar"s"), TP[CC[Var("v",F32),Var("v0",F32)], qVar"s"])), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)),Var("t2",F4)), qVar"s"), Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("t",F4)),qVar"s"), TP[CC[Var("v",F32),Var("v0",F32)], qVar"s"]))), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(Call ("ExclusiveMonitorsPass",bTy, TP[Var("v",F32),LN 8]), Apply (Call ("write'R",ATy(qTy,qTy), TP[LW(0,32),Var("d",F4)]), Apply (Call ("write'MemA",ATy(qTy,qTy), TP[Var("v0",F64),Var("v",F32),LN 8]), qVar"s")), Apply (Call ("write'R",ATy(qTy,qTy), TP[LW(1,32),Var("d",F4)]),qVar"s"))))), qVar"s")))) ; val dfn'ClearExclusive_def = Def ("dfn'ClearExclusive",qVar"state", Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state")) ; val dfn'Swap_def = Def ("dfn'Swap",TP[bVar"b",Var("t",F4),Var("t2",F4),Var("n",F4)], Close (qVar"state", Let(TP[Var("v",F32),qVar"s"], Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"b", Let(TP[Var("v0",F8),qVar"s"], Apply (Call ("MemA",ATy(qTy,PTy(F8,qTy)), TP[Var("v",F32),LN 1]),qVar"s"), Apply (Call ("write'R",ATy(qTy,qTy), TP[Mop(Cast F32,Var("v0",F8)),Var("t",F4)]), Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)),Var("t2",F4)), qVar"s"), Apply (Call ("write'MemA",ATy(qTy,qTy), TP[EX(Var("v0",F32),LN 7,LN 0,F8), Var("v",F32),LN 1]),qVar"s")))), Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("MemA",ATy(qTy,PTy(F32,qTy)), TP[Var("v",F32),LN 4]),qVar"s"), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("ROR",ATy(qTy,PTy(F32,qTy)), TP[Var("v0",F32), Bop(Mul,LN 8, Mop(Cast nTy, EX(Var("v",F32),LN 1,LN 0,FTy 2)))]), Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("t2",F4)),qVar"s"), Apply (Call ("write'MemA",ATy(qTy,qTy), TP[Var("v0",F32),Var("v",F32),LN 4]), qVar"s"))), Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("v",F32),Var("t",F4)]),qVar"s")))))))) ; val dfn'ChangeProcessorState_def = Def ("dfn'ChangeProcessorState", TP[bVar"enable",bVar"disable",bVar"affectA",bVar"affectI", bVar"affectF",Var("changemode",OTy(FTy 5))], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU), qVar"state"), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"v", Let(Var("v",CTy"PSR"),Dest("CPSR",CTy"PSR",qVar"s"), Let(Var("s",PTy(CTy"PSR",qTy)), ITE(bVar"enable", Let(Var("s0",CTy"PSR"), ITE(bVar"affectA", Rupd("A",TP[Var("v",CTy"PSR"),LF]), Var("v",CTy"PSR")), Let(Var("s0",CTy"PSR"), ITE(bVar"affectI", Rupd ("I",TP[Var("s0",CTy"PSR"),LF]), Var("s0",CTy"PSR")), TP[ITE(bVar"affectF", Rupd ("F", TP[Var("s0",CTy"PSR"),LF]), Var("s0",CTy"PSR")),qVar"s"])), TP[Var("v",CTy"PSR"),qVar"s"]), Let(Var("s",PTy(CTy"PSR",qTy)), ITE(bVar"disable", Let(Var("s",PTy(CTy"PSR",qTy)), ITE(bVar"affectA", TP[Rupd ("A", TP[Mop(Fst, Var("s", PTy(CTy"PSR",qTy))), LT]), Mop(Snd, Var("s",PTy(CTy"PSR",qTy)))], Var("s",PTy(CTy"PSR",qTy))), Let(Var("s",PTy(CTy"PSR",qTy)), ITE(bVar"affectI", TP[Rupd ("I", TP[Mop(Fst, Var("s", PTy(CTy"PSR", qTy))), LT]), Mop(Snd, Var("s", PTy(CTy"PSR",qTy)))], Var("s",PTy(CTy"PSR",qTy))), ITE(bVar"affectF", TP[Rupd ("F", TP[Mop(Fst, Var("s", PTy(CTy"PSR", qTy))), LT]), Mop(Snd, Var("s", PTy(CTy"PSR",qTy)))], Var("s",PTy(CTy"PSR",qTy))))), Var("s",PTy(CTy"PSR",qTy))), Let(Var("s",PTy(CTy"PSR",qTy)), CS(Var("changemode",OTy(FTy 5)), [(Mop(Some,Var("mode",FTy 5)), TP[Rupd ("M", TP[Mop(Fst, Var("s", PTy(CTy"PSR",qTy))), Var("mode",FTy 5)]), Mop(Snd, Var("s",PTy(CTy"PSR",qTy)))]), (LO(FTy 5),Var("s",PTy(CTy"PSR",qTy)))]), Let(qVar"s1", Apply (Call ("CPSRWriteByInstr", ATy(qTy,qTy), TP[Call ("reg'PSR",F32, Mop(Fst, Var("s", PTy(CTy"PSR",qTy)))), LW(15,4),LF]), Mop(Snd,Var("s",PTy(CTy"PSR",qTy)))), ITE(Bop(And, EQ(Dest ("M",FTy 5, Dest ("CPSR",CTy"PSR", qVar"s1")),LW(26,5)), EQ(Apply (Call ("CurrentInstrSet", ATy(qTy, CTy"InstrSet"), LU),qVar"s1"), LC("InstrSet_ThumbEE", CTy"InstrSet"))), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE", CTy"exception", LS "ChangeProcessorState")), qVar"s1")),qVar"s1")))))), qVar"s"))))) ; val dfn'ExceptionReturn_def = Def ("dfn'ExceptionReturn",qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)),LU), qVar"state"), ITE(Bop(Or,bVar"v", EQ(Apply (Call("CurrentInstrSet",ATy(qTy,CTy"InstrSet"),LU), qVar"s"),LC("InstrSet_ThumbEE",CTy"InstrSet"))), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception",LS"ExceptionReturn")), qVar"s")), Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU), qVar"s"), Let(TP[Var("v",F32),qVar"s"], ITE(bVar"v",TP[Dest("ELR_hyp",F32,qVar"s"),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),LW(14,4)),qVar"s")), Let(TP[Var("v0",CTy"PSR"),qVar"s"], Apply (Const("SPSR",ATy(qTy,PTy(CTy"PSR",qTy))),qVar"s"), Let(qVar"s", Apply (Call ("CPSRWriteByInstr",ATy(qTy,qTy), TP[Call("reg'PSR",F32,Var("v0",CTy"PSR")), LW(15,4),LT]),qVar"s"), ITE(Bop(And, EQ(Dest ("M",FTy 5, Dest("CPSR",CTy"PSR",qVar"s")), LW(26,5)), EQ(Apply (Call ("CurrentInstrSet", ATy(qTy,CTy"InstrSet"),LU), qVar"s"), LC("InstrSet_ThumbEE",CTy"InstrSet"))), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE", CTy"exception", LS"ExceptionReturn")),qVar"s")), Apply (Call ("BranchWritePC",ATy(qTy,qTy), Var("v",F32)),qVar"s"))))))))) ; val dfn'HypervisorCall_def = Def ("dfn'HypervisorCall",Var("imm16",F16), Close (qVar"state", Let(TP[bVar"v",qVar"s"], ITB([(Mop(Not, Apply(Call("HaveVirtExt",ATy(qTy,bTy),LU),qVar"state")), TP[LT,qVar"state"]), (Apply(Call("IsSecure",ATy(qTy,bTy),LU),qVar"state"), TP[LT,qVar"state"])], Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU), qVar"state"),TP[Mop(Not,bVar"v"),qVar"s"])), ITB([(bVar"v", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"HypervisorCall")),qVar"s"))), (Mop(Not, Dest ("HCE",bTy, Dest("SCR",CTy"SCR",Dest("CP15",CTy"CP15",qVar"s")))), Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU), qVar"s"), ITE(bVar"v", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"HypervisorCall")),qVar"s")), Apply (Call("TakeUndefInstrException",ATy(qTy,qTy),LU), qVar"s"))))], Apply (Call("CallHypervisor",ATy(qTy,qTy),Var("imm16",F16)), qVar"s"))))) ; val dfn'MoveToRegisterFromSpecial_def = Def ("dfn'MoveToRegisterFromSpecial",TP[bVar"read_spsr",Var("d",F4)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"read_spsr", Let(TP[bVar"v",qVar"s"], Apply (Call ("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)), LU),qVar"state"), ITE(bVar"v", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"MoveToRegisterFromSpecial")),qVar"s")), Let(TP[Var("v",CTy"PSR"),qVar"s"], Apply (Const("SPSR",ATy(qTy,PTy(CTy"PSR",qTy))), qVar"s"), Apply (Call ("write'R",ATy(qTy,qTy), TP[Call("reg'PSR",F32,Var("v",CTy"PSR")), Var("d",F4)]),qVar"s")))), Apply (Call ("write'R",ATy(qTy,qTy), TP[Bop(BAnd, Call ("reg'PSR",F32, Dest("CPSR",CTy"PSR",qVar"state")), LW(4177462239,32)),Var("d",F4)]),qVar"state"))))) ; val dfn'MoveToRegisterFromBankedOrSpecial_def = Def ("dfn'MoveToRegisterFromBankedOrSpecial", TP[bVar"read_spsr",Var("SYSm",FTy 5),Var("d",F4)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU), qVar"state"), ITE(Mop(Not,bVar"v"), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"MoveToRegisterFromBankedOrSpecial")),qVar"s")), Let(Var("v",FTy 5), Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"read_spsr", Let(qVar"s", Apply (Call ("SPSRAccessValid",ATy(qTy,qTy), TP[Var("SYSm",FTy 5),Var("v",FTy 5)]), qVar"s"), CS(Var("SYSm",FTy 5), [(LW(14,5), Apply (Call ("write'R",ATy(qTy,qTy), TP[Call ("reg'PSR",F32, Dest ("SPSR_fiq",CTy"PSR", qVar"s")),Var("d",F4)]), qVar"s")), (LW(16,5), Apply (Call ("write'R",ATy(qTy,qTy), TP[Call ("reg'PSR",F32, Dest ("SPSR_irq",CTy"PSR", qVar"s")),Var("d",F4)]), qVar"s")), (LW(18,5), Apply (Call ("write'R",ATy(qTy,qTy), TP[Call ("reg'PSR",F32, Dest ("SPSR_svc",CTy"PSR", qVar"s")),Var("d",F4)]), qVar"s")), (LW(20,5), Apply (Call ("write'R",ATy(qTy,qTy), TP[Call ("reg'PSR",F32, Dest ("SPSR_abt",CTy"PSR", qVar"s")),Var("d",F4)]), qVar"s")), (LW(22,5), Apply (Call ("write'R",ATy(qTy,qTy), TP[Call ("reg'PSR",F32, Dest ("SPSR_und",CTy"PSR", qVar"s")),Var("d",F4)]), qVar"s")), (LW(28,5), Apply (Call ("write'R",ATy(qTy,qTy), TP[Call ("reg'PSR",F32, Dest ("SPSR_mon",CTy"PSR", qVar"s")),Var("d",F4)]), qVar"s")), (LW(30,5), Apply (Call ("write'R",ATy(qTy,qTy), TP[Call ("reg'PSR",F32, Dest ("SPSR_hyp",CTy"PSR", qVar"s")),Var("d",F4)]), qVar"s")),(AVar(FTy 5),qVar"s")])), Let(qVar"s", Apply (Call ("BankedRegisterAccessValid", ATy(qTy,qTy), TP[Var("SYSm",FTy 5),Var("v",FTy 5)]), qVar"s"), ITB([(EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2), LW(0,2)), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("Rmode", ATy(qTy,PTy(F32,qTy)), TP[Bop(Add, Mop(Cast F4, EX(Var("SYSm", FTy 5), LN 2,LN 0,FTy 3)), LW(8,4)),LW(16,5)]), qVar"s"), Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("v",F32),Var("d",F4)]), qVar"s"))), (EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2), LW(1,2)), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("Rmode", ATy(qTy,PTy(F32,qTy)), TP[Bop(Add, Mop(Cast F4, EX(Var("SYSm", FTy 5), LN 2,LN 0,FTy 3)), LW(8,4)),LW(17,5)]), qVar"s"), Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("v",F32),Var("d",F4)]), qVar"s"))), (EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2), LW(3,2)), ITB([(Mop(Not, Bop(Bit,Var("SYSm",FTy 5), LN 1)), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("Rmode", ATy(qTy,PTy(F32,qTy)), TP[Bop(Sub,LW(14,4), Mop(Cast F4, Bop(Bit, Var("SYSm", FTy 5), LN 0))), LW(22,5)]),qVar"s"), Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("v",F32), Var("d",F4)]), qVar"s"))), (Bop(Bit,Var("SYSm",FTy 5),LN 0), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("Rmode", ATy(qTy,PTy(F32,qTy)), TP[LW(13,4),LW(26,5)]), qVar"s"), Apply (Call ("write'R",ATy(qTy,qTy), TP[Var("v",F32), Var("d",F4)]), qVar"s")))], Apply (Call ("write'R",ATy(qTy,qTy), TP[Dest ("ELR_hyp",F32,qVar"s"), Var("d",F4)]),qVar"s")))], Let(Var("s0",FTy 5), BFI(LN 4,LN 4,Mop(Cast F1,LT), BFI(LN 3,LN 3, Mop(Cast F1, Bop(And, Bop(Bit, Var("SYSm",FTy 5), LN 2), Bop(Bit, Var("SYSm",FTy 5), LN 1))), BFI(LN 2,LN 2, Mop(Cast F1, Bop(And, Bop(Bit, Var("SYSm", FTy 5), LN 2), Mop(Not, Bop(Bit, Var("SYSm", FTy 5), LN 1)))), BFI(LN 1,LN 1, Mop(Cast F1,LT), BFI(LN 0,LN 0, Mop(Cast F1, Bop(Or, Bop(Bit, Var("SYSm", FTy 5), LN 2), Bop(Bit, Var("SYSm", FTy 5), LN 1))), LX(FTy 5)))))), ITE(EQ(Var("v",FTy 5),Var("s0",FTy 5)), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE", CTy"exception", LS "MoveToRegisterFromBankedOrSpecial")), qVar"s")), Let(TP[Var("v",PTy(F32,F4)), Var("s",PTy(FTy 5,qTy))], Let(TP[Var("v",F32), Var("s",PTy(FTy 5,qTy))], Let(TP[Var("v",F32), qVar"s3"], Apply (Call ("Rmode", ATy(qTy, PTy(F32,qTy)), TP[Bop(Sub, LW(14,4), Mop(Cast F4, Bop(Bit, Var("SYSm", FTy 5), LN 0))), Var("s0", FTy 5)]), qVar"s"), TP[Var("v",F32), Var("s0",FTy 5), qVar"s3"]), TP[TP[Var("v",F32), Var("d",F4)], Var("s",PTy(FTy 5,qTy))]), Apply (Call ("write'R",ATy(qTy,qTy), Var("v",PTy(F32,F4))), Mop(Snd, Var("s",PTy(FTy 5,qTy)))))))))))))))) ; val dfn'MoveToSpecialFromImmediate_def = Def ("dfn'MoveToSpecialFromImmediate", TP[bVar"write_spsr",Var("imm32",F32),Var("mask",F4)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"write_spsr", Apply (Call ("SPSRWriteByInstr",ATy(qTy,qTy), TP[Var("imm32",F32),Var("mask",F4)]),qVar"state"), Let(qVar"s", Apply (Call ("CPSRWriteByInstr",ATy(qTy,qTy), TP[Var("imm32",F32),Var("mask",F4),LF]),qVar"state"), ITE(Bop(And, EQ(Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")), LW(26,5)), EQ(Apply (Call ("CurrentInstrSet", ATy(qTy,CTy"InstrSet"),LU),qVar"s"), LC("InstrSet_ThumbEE",CTy"InstrSet"))), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"MoveToSpecialFromImmediate")),qVar"s")), qVar"s")))))) ; val dfn'MoveToSpecialFromRegister_def = Def ("dfn'MoveToSpecialFromRegister", TP[bVar"write_spsr",Var("n",F4),Var("mask",F4)], Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"write_spsr", Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"state"), Apply (Call ("SPSRWriteByInstr",ATy(qTy,qTy), TP[Var("v",F32),Var("mask",F4)]),qVar"s")), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"state"), Let(qVar"s", Apply (Call ("CPSRWriteByInstr",ATy(qTy,qTy), TP[Var("v",F32),Var("mask",F4),LF]),qVar"s"), ITE(Bop(And, EQ(Dest ("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")), LW(26,5)), EQ(Apply (Call ("CurrentInstrSet", ATy(qTy,CTy"InstrSet"),LU),qVar"s"), LC("InstrSet_ThumbEE",CTy"InstrSet"))), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"MoveToSpecialFromRegister")), qVar"s")),qVar"s"))))))) ; val dfn'MoveToBankedOrSpecialRegister_def = Def ("dfn'MoveToBankedOrSpecialRegister", TP[bVar"write_spsr",Var("SYSm",FTy 5),Var("n",F4)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU), qVar"state"), ITE(Mop(Not,bVar"v"), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"MoveToBankedOrSpecialRegister")),qVar"s")), Let(Var("v",FTy 5), Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"write_spsr", Let(qVar"s", Apply (Call ("SPSRAccessValid",ATy(qTy,qTy), TP[Var("SYSm",FTy 5),Var("v",FTy 5)]), qVar"s"), CS(Var("SYSm",FTy 5), [(LW(14,5), Let(TP[Var("v",CTy"PSR"),qVar"s"], Let(TP[Var("v",PTy(CTy"PSR",F32)), qVar"s"], Let(TP[Var("v0",F32),qVar"s0"], Apply (Call ("R", ATy(qTy,PTy(F32,qTy)), Var("n",F4)),qVar"s"), TP[TP[Dest ("SPSR_fiq", CTy"PSR",qVar"s"), Var("v0",F32)], qVar"s0"]), TP[Call ("write'reg'PSR",CTy"PSR", Var("v",PTy(CTy"PSR",F32))), qVar"s"]), Rupd ("SPSR_fiq", TP[qVar"s",Var("v",CTy"PSR")]))), (LW(16,5), Let(TP[Var("v",CTy"PSR"),qVar"s"], Let(TP[Var("v",PTy(CTy"PSR",F32)), qVar"s"], Let(TP[Var("v0",F32),qVar"s0"], Apply (Call ("R", ATy(qTy,PTy(F32,qTy)), Var("n",F4)),qVar"s"), TP[TP[Dest ("SPSR_irq", CTy"PSR",qVar"s"), Var("v0",F32)], qVar"s0"]), TP[Call ("write'reg'PSR",CTy"PSR", Var("v",PTy(CTy"PSR",F32))), qVar"s"]), Rupd ("SPSR_irq", TP[qVar"s",Var("v",CTy"PSR")]))), (LW(18,5), Let(TP[Var("v",CTy"PSR"),qVar"s"], Let(TP[Var("v",PTy(CTy"PSR",F32)), qVar"s"], Let(TP[Var("v0",F32),qVar"s0"], Apply (Call ("R", ATy(qTy,PTy(F32,qTy)), Var("n",F4)),qVar"s"), TP[TP[Dest ("SPSR_svc", CTy"PSR",qVar"s"), Var("v0",F32)], qVar"s0"]), TP[Call ("write'reg'PSR",CTy"PSR", Var("v",PTy(CTy"PSR",F32))), qVar"s"]), Rupd ("SPSR_svc", TP[qVar"s",Var("v",CTy"PSR")]))), (LW(20,5), Let(TP[Var("v",CTy"PSR"),qVar"s"], Let(TP[Var("v",PTy(CTy"PSR",F32)), qVar"s"], Let(TP[Var("v0",F32),qVar"s0"], Apply (Call ("R", ATy(qTy,PTy(F32,qTy)), Var("n",F4)),qVar"s"), TP[TP[Dest ("SPSR_abt", CTy"PSR",qVar"s"), Var("v0",F32)], qVar"s0"]), TP[Call ("write'reg'PSR",CTy"PSR", Var("v",PTy(CTy"PSR",F32))), qVar"s"]), Rupd ("SPSR_abt", TP[qVar"s",Var("v",CTy"PSR")]))), (LW(22,5), Let(TP[Var("v",CTy"PSR"),qVar"s"], Let(TP[Var("v",PTy(CTy"PSR",F32)), qVar"s"], Let(TP[Var("v0",F32),qVar"s0"], Apply (Call ("R", ATy(qTy,PTy(F32,qTy)), Var("n",F4)),qVar"s"), TP[TP[Dest ("SPSR_und", CTy"PSR",qVar"s"), Var("v0",F32)], qVar"s0"]), TP[Call ("write'reg'PSR",CTy"PSR", Var("v",PTy(CTy"PSR",F32))), qVar"s"]), Rupd ("SPSR_und", TP[qVar"s",Var("v",CTy"PSR")]))), (LW(28,5), Let(TP[Var("v",CTy"PSR"),qVar"s"], Let(TP[Var("v",PTy(CTy"PSR",F32)), qVar"s"], Let(TP[Var("v0",F32),qVar"s0"], Apply (Call ("R", ATy(qTy,PTy(F32,qTy)), Var("n",F4)),qVar"s"), TP[TP[Dest ("SPSR_mon", CTy"PSR",qVar"s"), Var("v0",F32)], qVar"s0"]), TP[Call ("write'reg'PSR",CTy"PSR", Var("v",PTy(CTy"PSR",F32))), qVar"s"]), Rupd ("SPSR_mon", TP[qVar"s",Var("v",CTy"PSR")]))), (LW(30,5), Let(TP[Var("v",CTy"PSR"),qVar"s"], Let(TP[Var("v",PTy(CTy"PSR",F32)), qVar"s"], Let(TP[Var("v0",F32),qVar"s0"], Apply (Call ("R", ATy(qTy,PTy(F32,qTy)), Var("n",F4)),qVar"s"), TP[TP[Dest ("SPSR_hyp", CTy"PSR",qVar"s"), Var("v0",F32)], qVar"s0"]), TP[Call ("write'reg'PSR",CTy"PSR", Var("v",PTy(CTy"PSR",F32))), qVar"s"]), Rupd ("SPSR_hyp", TP[qVar"s",Var("v",CTy"PSR")]))), (AVar(FTy 5),qVar"s")])), Let(qVar"s", Apply (Call ("BankedRegisterAccessValid", ATy(qTy,qTy), TP[Var("SYSm",FTy 5),Var("v",FTy 5)]), qVar"s"), ITB([(EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2), LW(0,2)), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("n",F4)),qVar"s"), Apply (Call ("write'Rmode",ATy(qTy,qTy), TP[Var("v",F32), Bop(Add, Mop(Cast F4, EX(Var("SYSm", FTy 5), LN 2,LN 0,FTy 3)), LW(8,4)),LW(16,5)]), qVar"s"))), (EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2), LW(1,2)), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R",ATy(qTy,PTy(F32,qTy)), Var("n",F4)),qVar"s"), Apply (Call ("write'Rmode",ATy(qTy,qTy), TP[Var("v",F32), Bop(Add, Mop(Cast F4, EX(Var("SYSm", FTy 5), LN 2,LN 0,FTy 3)), LW(8,4)),LW(17,5)]), qVar"s"))), (EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2), LW(3,2)), ITB([(Mop(Not, Bop(Bit,Var("SYSm",FTy 5), LN 1)), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R", ATy(qTy,PTy(F32,qTy)), Var("n",F4)),qVar"s"), Apply (Call ("write'Rmode", ATy(qTy,qTy), TP[Var("v",F32), Bop(Sub,LW(14,4), Mop(Cast F4, Bop(Bit, Var("SYSm", FTy 5), LN 0))), LW(22,5)]),qVar"s"))), (Bop(Bit,Var("SYSm",FTy 5),LN 0), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R", ATy(qTy,PTy(F32,qTy)), Var("n",F4)),qVar"s"), Apply (Call ("write'Rmode", ATy(qTy,qTy), TP[Var("v",F32), LW(13,4),LW(26,5)]), qVar"s")))], Let(TP[Var("v",F32),qVar"s"], Apply (Call ("R", ATy(qTy,PTy(F32,qTy)), Var("n",F4)),qVar"s"), Rupd ("ELR_hyp", TP[qVar"s",Var("v",F32)]))))], Let(Var("s0",FTy 5), BFI(LN 4,LN 4,Mop(Cast F1,LT), BFI(LN 3,LN 3, Mop(Cast F1, Bop(And, Bop(Bit, Var("SYSm",FTy 5), LN 2), Bop(Bit, Var("SYSm",FTy 5), LN 1))), BFI(LN 2,LN 2, Mop(Cast F1, Bop(And, Bop(Bit, Var("SYSm", FTy 5), LN 2), Mop(Not, Bop(Bit, Var("SYSm", FTy 5), LN 1)))), BFI(LN 1,LN 1, Mop(Cast F1,LT), BFI(LN 0,LN 0, Mop(Cast F1, Bop(Or, Bop(Bit, Var("SYSm", FTy 5), LN 2), Bop(Bit, Var("SYSm", FTy 5), LN 1))), LX(FTy 5)))))), ITE(EQ(Var("v",FTy 5),Var("s0",FTy 5)), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE", CTy"exception", LS "MoveToBankedOrSpecialRegister")), qVar"s")), Let(TP[Var("v0",F32), Var("s2",PTy(FTy 5,qTy))], Let(TP[Var("v",F32),qVar"s3"], Apply (Call ("R", ATy(qTy, PTy(F32,qTy)), Var("n",F4)), qVar"s"), TP[Var("v",F32), Var("s0",FTy 5), qVar"s3"]), Apply (Call ("write'Rmode", ATy(qTy,qTy), TP[Var("v0",F32), Bop(Sub,LW(14,4), Mop(Cast F4, Bop(Bit, Var("SYSm", FTy 5), LN 0))), Var("s0",FTy 5)]), Mop(Snd, Var("s2", PTy(FTy 5,qTy)))))))))))))))) ; val dfn'ReturnFromException_def = Def ("dfn'ReturnFromException", TP[bVar"increment",bVar"wordhigher",bVar"wback",Var("n",F4)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call("TakeUndefInstrException",ATy(qTy,qTy),LU),qVar"s"), Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU), qVar"s"), ITE(Bop(Or,Mop(Not,bVar"v"), EQ(Apply (Call ("CurrentInstrSet", ATy(qTy,CTy"InstrSet"),LU),qVar"s"), LC("InstrSet_ThumbEE",CTy"InstrSet"))), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"ReturnFromException")),qVar"s")), Let(TP[Var("v",F32),qVar"s"], Apply (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)), qVar"s"), Let(Var("address",F32), ITE(bVar"increment",Var("v",F32), Bop(Sub,Var("v",F32),LW(8,32))), Let(Var("address",F32), ITE(bVar"wordhigher", Bop(Add,Var("address",F32),LW(4,32)), Var("address",F32)), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("MemA",ATy(qTy,PTy(F32,qTy)), TP[Var("address",F32),LN 4]), ITE(bVar"wback", Apply (Call ("write'R",ATy(qTy,qTy), TP[ITE(bVar"increment", Bop(Add, Var("v",F32), LW(8,32)), Bop(Sub, Var("v",F32), LW(8,32))), Var("n",F4)]), qVar"s"),qVar"s")), Let(TP[Var("v0",F32),qVar"s"], Apply (Call ("MemA", ATy(qTy,PTy(F32,qTy)), TP[Bop(Add, Var("address",F32), LW(4,32)),LN 4]), qVar"s"), Let(qVar"s", Apply (Call ("CPSRWriteByInstr", ATy(qTy,qTy), TP[Var("v0",F32), LW(15,4),LT]), qVar"s"), ITE(Bop(And, EQ(Dest ("M",FTy 5, Dest ("CPSR", CTy"PSR", qVar"s")), LW(26,5)), Bop(And, Dest ("J",bTy, Dest ("CPSR", CTy"PSR", qVar"s")), Dest ("T",bTy, Dest ("CPSR", CTy"PSR", qVar"s")))), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy, PTy(uTy, qTy)), Call ("UNPREDICTABLE", CTy"exception", LS "ReturnFromException")), qVar"s")), Apply (Call ("BranchWritePC", ATy(qTy,qTy), Var("v",F32)), qVar"s")))))))))))))) ; val dfn'SecureMonitorCall_def = Def ("dfn'SecureMonitorCall",Var("imm4",F4), Close (qVar"state", Let(TP[bVar"v",qVar"s"], ITE(Apply(Call("HaveSecurityExt",ATy(qTy,bTy),LU),qVar"state"), Apply (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU), qVar"state"),TP[LF,qVar"state"]), ITE(bVar"v", Let(TP[bVar"v",qVar"s"], ITE(Apply(Call("HaveVirtExt",ATy(qTy,bTy),LU),qVar"s"), ITE(Mop(Not, Apply (Call("IsSecure",ATy(qTy,bTy),LU),qVar"s")), Let(TP[bVar"v",qVar"s"], Apply (Call ("CurrentModeIsHyp", ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"), TP[Bop(And,Mop(Not,bVar"v"), Dest ("TSC",bTy, Dest ("HCR",CTy"HCR", Dest("CP15",CTy"CP15",qVar"s")))), qVar"s"]),TP[LF,qVar"s"]),TP[LF,qVar"s"]), ITB([(bVar"v", Apply (Call("TakeHypTrapException",ATy(qTy,qTy),LU), Apply (Call ("WriteHSR",ATy(qTy,qTy), TP[LW(19,6),LW(0,25)]),qVar"s"))), (Dest ("SCD",bTy, Dest ("SCR",CTy"SCR", Dest("CP15",CTy"CP15",qVar"s"))), ITE(Apply (Call("IsSecure",ATy(qTy,bTy),LU),qVar"s"), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"SecureMonitorCall")),qVar"s")), Apply (Call ("TakeUndefInstrException",ATy(qTy,qTy), LU),qVar"s")))], Apply (Call("TakeSMCException",ATy(qTy,qTy),LU),qVar"s"))), Apply (Call("TakeUndefInstrException",ATy(qTy,qTy),LU),qVar"s"))))) ; val dfn'SupervisorCall_def = Def ("dfn'SupervisorCall",Var("imm32",F32), Close (qVar"state", Apply (Call ("CallSupervisor",ATy(qTy,qTy), EX(Var("imm32",F32),LN 15,LN 0,F16)),qVar"state"))) ; val dfn'StoreReturnState_def = Def ("dfn'StoreReturnState", TP[bVar"increment",bVar"wordhigher",bVar"wback",Var("mode",FTy 5)], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Apply (Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"), ITE(bVar"v", Apply (Call("TakeUndefInstrException",ATy(qTy,qTy),LU),qVar"s"), Let(TP[bVar"v",qVar"s"], Apply (Call ("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)), LU),qVar"s"), ITB([(Bop(Or,bVar"v", EQ(Apply (Call ("CurrentInstrSet", ATy(qTy,CTy"InstrSet"),LU),qVar"s"), LC("InstrSet_ThumbEE",CTy"InstrSet"))), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"StoreReturnState")),qVar"s"))), (EQ(Var("mode",FTy 5),LW(26,5)), Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"StoreReturnState")),qVar"s")))], Let(TP[Var("v",F32),qVar"s"], Apply (Call ("Rmode",ATy(qTy,PTy(F32,qTy)), TP[LW(13,4),Var("mode",FTy 5)]), ITE(Mop(Not, Apply (Call("IsSecure",ATy(qTy,bTy),LU), qVar"s")), ITE(Bop(Or, EQ(Var("mode",FTy 5),LW(22,5)), Bop(And, EQ(Var("mode",FTy 5),LW(17,5)), Dest ("RFR",bTy, Dest ("NSACR",CTy"NSACR", Dest ("CP15",CTy"CP15", qVar"s"))))), Mop(Snd, Apply (Call ("raise'exception", ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE", CTy"exception", LS"StoreReturnState")), qVar"s")),qVar"s"),qVar"s")), Let(Var("address",F32), ITE(bVar"increment",Var("v",F32), Bop(Sub,Var("v",F32),LW(8,32))), Let(Var("address",F32), ITE(bVar"wordhigher", Bop(Add,Var("address",F32),LW(4,32)), Var("address",F32)), Let(qVar"s", Let(TP[Var("v",CTy"PSR"),qVar"s"], Apply (Const ("SPSR", ATy(qTy,PTy(CTy"PSR",qTy))), Let(TP[Var("v",F32),qVar"s"], Apply (Const ("LR", ATy(qTy, PTy(F32,qTy))), qVar"s"), Apply (Call ("write'MemA", ATy(qTy,qTy), TP[Var("v",F32), Var("address", F32),LN 4]), qVar"s"))), Apply (Call ("write'MemA",ATy(qTy,qTy), TP[Call ("reg'PSR",F32, Var("v",CTy"PSR")), Bop(Add, Var("address",F32), LW(4,32)),LN 4]), qVar"s")), Apply (Call("IncPC",ATy(qTy,qTy),LU), ITE(bVar"wback", Apply (Call ("write'Rmode", ATy(qTy,qTy), TP[ITE(bVar"increment", Bop(Add, Var("v",F32), LW(8,32)), Bop(Sub, Var("v",F32), LW(8,32))), LW(13,4), Var("mode",FTy 5)]), qVar"s"),qVar"s")))))))))))) ; val dfn'Setend_def = Def ("dfn'Setend",bVar"set_bigend", Close (qVar"state", Apply (Call("IncPC",ATy(qTy,qTy),LU), Rupd ("CPSR", TP[qVar"state", Rupd ("E", TP[Dest("CPSR",CTy"PSR",qVar"state"),bVar"set_bigend"])])))) ; val dfn'Undefined_def = Def ("dfn'Undefined",Var("imm32",F32), Close (qVar"state", Apply(Call("TakeUndefInstrException",ATy(qTy,qTy),LU),qVar"state"))) ; val dfn'NoOperation_def = Def ("dfn'NoOperation",qVar"state", Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state")) ; val dfn'Breakpoint_def = Def ("dfn'Breakpoint",Var("imm32",F32), Close(qVar"state",Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state"))) ; val dfn'Debug_def = Def ("dfn'Debug",Var("option",F4), Close(qVar"state",Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state"))) ; val dfn'DataMemoryBarrier_def = Def ("dfn'DataMemoryBarrier",Var("option",F4), Close(qVar"state",Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state"))) ; val dfn'DataSynchronizationBarrier_def = Def ("dfn'DataSynchronizationBarrier",Var("option",F4), Close(qVar"state",Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state"))) ; val dfn'InstructionSynchronizationBarrier_def = Def ("dfn'InstructionSynchronizationBarrier",Var("option",F4), Close(qVar"state",Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state"))) ; val dfn'PreloadData_def = Def ("dfn'PreloadData", TP[bVar"add",bVar"is_pldw",Var("n",F4),Var("m",CTy"offset1")], Close(qVar"state",Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state"))) ; val dfn'PreloadDataLiteral_def = Def ("dfn'PreloadDataLiteral",TP[bVar"add",Var("imm32",F32)], Close(qVar"state",Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state"))) ; val dfn'PreloadInstruction_def = Def ("dfn'PreloadInstruction", TP[bVar"add",Var("n",F4),Var("m",CTy"offset1")], Close(qVar"state",Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state"))) ; val dfn'SendEvent_def = Def ("dfn'SendEvent",qVar"state", Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state")) ; val dfn'WaitForEvent_def = Def ("dfn'WaitForEvent",qVar"state", Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state")) ; val dfn'WaitForInterrupt_def = Def ("dfn'WaitForInterrupt",qVar"state", Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state")) ; val dfn'Yield_def = Def ("dfn'Yield",qVar"state", Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state")) ; val Run_def = Def ("Run",Var("v0",CTy"instruction"), Close (qVar"state", CS(Var("v0",CTy"instruction"), [(Const("ClearExclusive",CTy"instruction"), Apply(Const("dfn'ClearExclusive",ATy(qTy,qTy)),qVar"state")), (Const("NoOperation",CTy"instruction"), Apply(Const("dfn'NoOperation",ATy(qTy,qTy)),qVar"state")), (Call ("Divide",CTy"instruction", Var("v152",PTy(bTy,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'Divide",ATy(qTy,qTy), Var("v152",PTy(bTy,PTy(F4,PTy(F4,F4))))),qVar"state")), (Call("IfThen",CTy"instruction",Var("v153",PTy(F4,F4))), Apply (Call("dfn'IfThen",ATy(qTy,qTy),Var("v153",PTy(F4,F4))), qVar"state")), (Call ("Swap",CTy"instruction", Var("v154",PTy(bTy,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'Swap",ATy(qTy,qTy), Var("v154",PTy(bTy,PTy(F4,PTy(F4,F4))))),qVar"state")), (Call("Undefined",CTy"instruction",Var("v155",F32)), Apply (Call("dfn'Undefined",ATy(qTy,qTy),Var("v155",F32)), qVar"state")), (Call("Branch",CTy"instruction",Var("v1",CTy"Branch")), CS(Var("v1",CTy"Branch"), [(Call("BranchExchange",CTy"Branch",Var("v2",F4)), Apply (Call("dfn'BranchExchange",ATy(qTy,qTy),Var("v2",F4)), qVar"state")), (Call ("BranchLinkExchangeImmediate",CTy"Branch", Var("v3",PTy(CTy"InstrSet",F32))), Apply (Call ("dfn'BranchLinkExchangeImmediate",ATy(qTy,qTy), Var("v3",PTy(CTy"InstrSet",F32))),qVar"state")), (Call ("BranchLinkExchangeRegister",CTy"Branch",Var("v4",F4)), Apply (Call ("dfn'BranchLinkExchangeRegister",ATy(qTy,qTy), Var("v4",F4)),qVar"state")), (Call("BranchTarget",CTy"Branch",Var("v5",F32)), Apply (Call("dfn'BranchTarget",ATy(qTy,qTy),Var("v5",F32)), qVar"state")), (Call("CheckArray",CTy"Branch",Var("v6",PTy(F4,F4))), Apply (Call ("dfn'CheckArray",ATy(qTy,qTy),Var("v6",PTy(F4,F4))), qVar"state")), (Call ("CompareBranch",CTy"Branch", Var("v7",PTy(bTy,PTy(F4,F32)))), Apply (Call ("dfn'CompareBranch",ATy(qTy,qTy), Var("v7",PTy(bTy,PTy(F4,F32)))),qVar"state")), (Call ("HandlerBranchLink",CTy"Branch",Var("v8",PTy(bTy,F32))), Apply (Call ("dfn'HandlerBranchLink",ATy(qTy,qTy), Var("v8",PTy(bTy,F32))),qVar"state")), (Call ("HandlerBranchLinkParameter",CTy"Branch", Var("v9",PTy(F32,F32))), Apply (Call ("dfn'HandlerBranchLinkParameter",ATy(qTy,qTy), Var("v9",PTy(F32,F32))),qVar"state")), (Call ("HandlerBranchParameter",CTy"Branch", Var("v10",PTy(F32,F32))), Apply (Call ("dfn'HandlerBranchParameter",ATy(qTy,qTy), Var("v10",PTy(F32,F32))),qVar"state")), (Call ("TableBranchByte",CTy"Branch", Var("v11",PTy(bTy,PTy(F4,F4)))), Apply (Call ("dfn'TableBranchByte",ATy(qTy,qTy), Var("v11",PTy(bTy,PTy(F4,F4)))),qVar"state"))])), (Call("Data",CTy"instruction",Var("v12",CTy"Data")), CS(Var("v12",CTy"Data"), [(Call ("AddSub",CTy"Data", Var("v13",PTy(bTy,PTy(F4,PTy(F4,FTy 12))))), Apply (Call ("dfn'AddSub",ATy(qTy,qTy), Var("v13",PTy(bTy,PTy(F4,PTy(F4,FTy 12))))), qVar"state")), (Call ("ArithLogicImmediate",CTy"Data", Var("v14",PTy(F4,PTy(bTy,PTy(F4,PTy(F4,FTy 12)))))), Apply (Call ("dfn'ArithLogicImmediate",ATy(qTy,qTy), Var("v14",PTy(F4,PTy(bTy,PTy(F4,PTy(F4,FTy 12)))))), qVar"state")), (Call("CountLeadingZeroes",CTy"Data",Var("v15",PTy(F4,F4))), Apply (Call ("dfn'CountLeadingZeroes",ATy(qTy,qTy), Var("v15",PTy(F4,F4))),qVar"state")), (Call ("Move",CTy"Data", Var("v16",PTy(bTy,PTy(bTy,PTy(F4,FTy 12))))), Apply (Call ("dfn'Move",ATy(qTy,qTy), Var("v16",PTy(bTy,PTy(bTy,PTy(F4,FTy 12))))), qVar"state")), (Call ("MoveHalfword",CTy"Data", Var("v17",PTy(bTy,PTy(F4,F16)))), Apply (Call ("dfn'MoveHalfword",ATy(qTy,qTy), Var("v17",PTy(bTy,PTy(F4,F16)))),qVar"state")), (Call ("Register",CTy"Data", Var("v18", PTy(F4, PTy(bTy, PTy(F4,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy)))))))), Apply (Call ("dfn'Register",ATy(qTy,qTy), Var("v18", PTy(F4, PTy(bTy, PTy(F4, PTy(F4,PTy(F4,PTy(CTy"SRType",nTy)))))))), qVar"state")), (Call ("RegisterShiftedRegister",CTy"Data", Var("v19", PTy(F4, PTy(bTy, PTy(F4,PTy(F4,PTy(F4,PTy(CTy"SRType",F4)))))))), Apply (Call ("dfn'RegisterShiftedRegister",ATy(qTy,qTy), Var("v19", PTy(F4, PTy(bTy, PTy(F4, PTy(F4,PTy(F4,PTy(CTy"SRType",F4)))))))), qVar"state")), (Call ("ShiftImmediate",CTy"Data", Var("v20", PTy(bTy, PTy(bTy,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy))))))), Apply (Call ("dfn'ShiftImmediate",ATy(qTy,qTy), Var("v20", PTy(bTy, PTy(bTy,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy))))))), qVar"state")), (Call ("ShiftRegister",CTy"Data", Var("v21", PTy(bTy, PTy(bTy,PTy(F4,PTy(F4,PTy(CTy"SRType",F4))))))), Apply (Call ("dfn'ShiftRegister",ATy(qTy,qTy), Var("v21", PTy(bTy, PTy(bTy,PTy(F4,PTy(F4,PTy(CTy"SRType",F4))))))), qVar"state")), (Call ("TestCompareImmediate",CTy"Data", Var("v22",PTy(FTy 2,PTy(F4,FTy 12)))), Apply (Call ("dfn'TestCompareImmediate",ATy(qTy,qTy), Var("v22",PTy(FTy 2,PTy(F4,FTy 12)))),qVar"state")), (Call ("TestCompareRegister",CTy"Data", Var("v23", PTy(FTy 2,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy)))))), Apply (Call ("dfn'TestCompareRegister",ATy(qTy,qTy), Var("v23", PTy(FTy 2,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy)))))), qVar"state"))])), (Call("Hint",CTy"instruction",Var("v24",CTy"Hint")), CS(Var("v24",CTy"Hint"), [(Const("SendEvent",CTy"Hint"), Apply(Const("dfn'SendEvent",ATy(qTy,qTy)),qVar"state")), (Const("WaitForEvent",CTy"Hint"), Apply(Const("dfn'WaitForEvent",ATy(qTy,qTy)),qVar"state")), (Const("WaitForInterrupt",CTy"Hint"), Apply (Const("dfn'WaitForInterrupt",ATy(qTy,qTy)),qVar"state")), (Const("Yield",CTy"Hint"), Apply(Const("dfn'Yield",ATy(qTy,qTy)),qVar"state")), (Call("Breakpoint",CTy"Hint",Var("v25",F32)), Apply (Call("dfn'Breakpoint",ATy(qTy,qTy),Var("v25",F32)), qVar"state")), (Call("DataMemoryBarrier",CTy"Hint",Var("v26",F4)), Apply (Call ("dfn'DataMemoryBarrier",ATy(qTy,qTy),Var("v26",F4)), qVar"state")), (Call("DataSynchronizationBarrier",CTy"Hint",Var("v27",F4)), Apply (Call ("dfn'DataSynchronizationBarrier",ATy(qTy,qTy), Var("v27",F4)),qVar"state")), (Call("Debug",CTy"Hint",Var("v28",F4)), Apply (Call("dfn'Debug",ATy(qTy,qTy),Var("v28",F4)), qVar"state")), (Call ("InstructionSynchronizationBarrier",CTy"Hint", Var("v29",F4)), Apply (Call ("dfn'InstructionSynchronizationBarrier", ATy(qTy,qTy),Var("v29",F4)),qVar"state")), (Call ("PreloadData",CTy"Hint", Var("v30",PTy(bTy,PTy(bTy,PTy(F4,CTy"offset1"))))), Apply (Call ("dfn'PreloadData",ATy(qTy,qTy), Var("v30",PTy(bTy,PTy(bTy,PTy(F4,CTy"offset1"))))), qVar"state")), (Call ("PreloadDataLiteral",CTy"Hint",Var("v31",PTy(bTy,F32))), Apply (Call ("dfn'PreloadDataLiteral",ATy(qTy,qTy), Var("v31",PTy(bTy,F32))),qVar"state")), (Call ("PreloadInstruction",CTy"Hint", Var("v32",PTy(bTy,PTy(F4,CTy"offset1")))), Apply (Call ("dfn'PreloadInstruction",ATy(qTy,qTy), Var("v32",PTy(bTy,PTy(F4,CTy"offset1")))), qVar"state"))])), (Call("Load",CTy"instruction",Var("v33",CTy"Load")), CS(Var("v33",CTy"Load"), [(Call ("LoadByte",CTy"Load", Var("v34", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))))), Apply (Call ("dfn'LoadByte",ATy(qTy,qTy), Var("v34", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))))), qVar"state")), (Call ("LoadByteLiteral",CTy"Load", Var("v35",PTy(bTy,PTy(bTy,PTy(F4,F32))))), Apply (Call ("dfn'LoadByteLiteral",ATy(qTy,qTy), Var("v35",PTy(bTy,PTy(bTy,PTy(F4,F32))))), qVar"state")), (Call ("LoadByteUnprivileged",CTy"Load", Var("v36", PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))), Apply (Call ("dfn'LoadByteUnprivileged",ATy(qTy,qTy), Var("v36", PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))), qVar"state")), (Call ("LoadDual",CTy"Load", Var("v37", PTy(bTy, PTy(bTy, PTy(bTy, PTy(F4,PTy(F4,PTy(F4,CTy"offset2")))))))), Apply (Call ("dfn'LoadDual",ATy(qTy,qTy), Var("v37", PTy(bTy, PTy(bTy, PTy(bTy, PTy(F4,PTy(F4,PTy(F4,CTy"offset2")))))))), qVar"state")), (Call ("LoadDualLiteral",CTy"Load", Var("v38",PTy(bTy,PTy(F4,PTy(F4,F32))))), Apply (Call ("dfn'LoadDualLiteral",ATy(qTy,qTy), Var("v38",PTy(bTy,PTy(F4,PTy(F4,F32))))),qVar"state")), (Call ("LoadExclusive",CTy"Load", Var("v39",PTy(F4,PTy(F4,F32)))), Apply (Call ("dfn'LoadExclusive",ATy(qTy,qTy), Var("v39",PTy(F4,PTy(F4,F32)))),qVar"state")), (Call("LoadExclusiveByte",CTy"Load",Var("v40",PTy(F4,F4))), Apply (Call ("dfn'LoadExclusiveByte",ATy(qTy,qTy), Var("v40",PTy(F4,F4))),qVar"state")), (Call ("LoadExclusiveDoubleword",CTy"Load", Var("v41",PTy(F4,PTy(F4,F4)))), Apply (Call ("dfn'LoadExclusiveDoubleword",ATy(qTy,qTy), Var("v41",PTy(F4,PTy(F4,F4)))),qVar"state")), (Call("LoadExclusiveHalf",CTy"Load",Var("v42",PTy(F4,F4))), Apply (Call ("dfn'LoadExclusiveHalf",ATy(qTy,qTy), Var("v42",PTy(F4,F4))),qVar"state")), (Call ("LoadHalf",CTy"Load", Var("v43", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))))), Apply (Call ("dfn'LoadHalf",ATy(qTy,qTy), Var("v43", PTy(bTy, PTy(bTy, PTy(bTy, PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))))), qVar"state")), (Call ("LoadHalfLiteral",CTy"Load", Var("v44",PTy(bTy,PTy(bTy,PTy(F4,F32))))), Apply (Call ("dfn'LoadHalfLiteral",ATy(qTy,qTy), Var("v44",PTy(bTy,PTy(bTy,PTy(F4,F32))))), qVar"state")), (Call ("LoadHalfUnprivileged",CTy"Load", Var("v45", PTy(bTy, PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2"))))))), Apply (Call ("dfn'LoadHalfUnprivileged",ATy(qTy,qTy), Var("v45", PTy(bTy, PTy(bTy, PTy(bTy,PTy(F4,PTy(F4,CTy"offset2"))))))), qVar"state")), (Call ("LoadLiteral",CTy"Load",Var("v46",PTy(bTy,PTy(F4,F32)))), Apply (Call ("dfn'LoadLiteral",ATy(qTy,qTy), Var("v46",PTy(bTy,PTy(F4,F32)))),qVar"state")), (Call ("LoadMultiple",CTy"Load", Var("v47",PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,F16)))))), Apply (Call ("dfn'LoadMultiple",ATy(qTy,qTy), Var("v47",PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,F16)))))), qVar"state")), (Call ("LoadMultipleExceptionReturn",CTy"Load", Var("v48",PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,FTy 15)))))), Apply (Call ("dfn'LoadMultipleExceptionReturn",ATy(qTy,qTy), Var("v48",PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,FTy 15)))))), qVar"state")), (Call ("LoadMultipleUserRegisters",CTy"Load", Var("v49",PTy(bTy,PTy(bTy,PTy(F4,FTy 15))))), Apply (Call ("dfn'LoadMultipleUserRegisters",ATy(qTy,qTy), Var("v49",PTy(bTy,PTy(bTy,PTy(F4,FTy 15))))), qVar"state")), (Call ("LoadSignedByteUnprivileged",CTy"Load", Var("v50", PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2")))))), Apply (Call ("dfn'LoadSignedByteUnprivileged",ATy(qTy,qTy), Var("v50", PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2")))))), qVar"state")), (Call ("LoadUnprivileged",CTy"Load", Var("v51", PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))), Apply (Call ("dfn'LoadUnprivileged",ATy(qTy,qTy), Var("v51", PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))), qVar"state")), (Call ("LoadWord",CTy"Load", Var("v52", PTy(bTy, PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))), Apply (Call ("dfn'LoadWord",ATy(qTy,qTy), Var("v52", PTy(bTy, PTy(bTy, PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))), qVar"state"))])), (Call("Media",CTy"instruction",Var("v53",CTy"Media")), CS(Var("v53",CTy"Media"), [(Call ("BitFieldClearOrInsert",CTy"Media", Var("v54",PTy(F4,PTy(F4,PTy(nTy,nTy))))), Apply (Call ("dfn'BitFieldClearOrInsert",ATy(qTy,qTy), Var("v54",PTy(F4,PTy(F4,PTy(nTy,nTy))))),qVar"state")), (Call ("BitFieldExtract",CTy"Media", Var("v55",PTy(bTy,PTy(F4,PTy(F4,PTy(nTy,nTy)))))), Apply (Call ("dfn'BitFieldExtract",ATy(qTy,qTy), Var("v55",PTy(bTy,PTy(F4,PTy(F4,PTy(nTy,nTy)))))), qVar"state")), (Call("ByteReverse",CTy"Media",Var("v56",PTy(F4,F4))), Apply (Call ("dfn'ByteReverse",ATy(qTy,qTy),Var("v56",PTy(F4,F4))), qVar"state")), (Call ("ByteReversePackedHalfword",CTy"Media", Var("v57",PTy(F4,F4))), Apply (Call ("dfn'ByteReversePackedHalfword",ATy(qTy,qTy), Var("v57",PTy(F4,F4))),qVar"state")), (Call ("ByteReverseSignedHalfword",CTy"Media", Var("v58",PTy(F4,F4))), Apply (Call ("dfn'ByteReverseSignedHalfword",ATy(qTy,qTy), Var("v58",PTy(F4,F4))),qVar"state")), (Call ("ExtendByte",CTy"Media", Var("v59",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy)))))), Apply (Call ("dfn'ExtendByte",ATy(qTy,qTy), Var("v59",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy)))))), qVar"state")), (Call ("ExtendByte16",CTy"Media", Var("v60",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy)))))), Apply (Call ("dfn'ExtendByte16",ATy(qTy,qTy), Var("v60",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy)))))), qVar"state")), (Call ("ExtendHalfword",CTy"Media", Var("v61",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy)))))), Apply (Call ("dfn'ExtendHalfword",ATy(qTy,qTy), Var("v61",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy)))))), qVar"state")), (Call ("PackHalfword",CTy"Media", Var("v62", PTy(CTy"SRType", PTy(nTy,PTy(bTy,PTy(F4,PTy(F4,F4))))))), Apply (Call ("dfn'PackHalfword",ATy(qTy,qTy), Var("v62", PTy(CTy"SRType", PTy(nTy,PTy(bTy,PTy(F4,PTy(F4,F4))))))), qVar"state")), (Call("ReverseBits",CTy"Media",Var("v63",PTy(F4,F4))), Apply (Call ("dfn'ReverseBits",ATy(qTy,qTy),Var("v63",PTy(F4,F4))), qVar"state")), (Call ("Saturate",CTy"Media", Var("v64", PTy(CTy"SRType", PTy(nTy,PTy(nTy,PTy(bTy,PTy(F4,F4))))))), Apply (Call ("dfn'Saturate",ATy(qTy,qTy), Var("v64", PTy(CTy"SRType", PTy(nTy,PTy(nTy,PTy(bTy,PTy(F4,F4))))))), qVar"state")), (Call ("Saturate16",CTy"Media", Var("v65",PTy(nTy,PTy(bTy,PTy(F4,F4))))), Apply (Call ("dfn'Saturate16",ATy(qTy,qTy), Var("v65",PTy(nTy,PTy(bTy,PTy(F4,F4))))),qVar"state")), (Call ("SaturatingAddSubtract",CTy"Media", Var("v66",PTy(FTy 2,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'SaturatingAddSubtract",ATy(qTy,qTy), Var("v66",PTy(FTy 2,PTy(F4,PTy(F4,F4))))), qVar"state")), (Call ("SelectBytes",CTy"Media",Var("v67",PTy(F4,PTy(F4,F4)))), Apply (Call ("dfn'SelectBytes",ATy(qTy,qTy), Var("v67",PTy(F4,PTy(F4,F4)))),qVar"state"))])), (Call("Multiply",CTy"instruction",Var("v68",CTy"Multiply")), CS(Var("v68",CTy"Multiply"), [(Call ("Multiply32",CTy"Multiply", Var("v69",PTy(bTy,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'Multiply32",ATy(qTy,qTy), Var("v69",PTy(bTy,PTy(F4,PTy(F4,F4))))),qVar"state")), (Call ("MultiplyAccumulate",CTy"Multiply", Var("v70",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))), Apply (Call ("dfn'MultiplyAccumulate",ATy(qTy,qTy), Var("v70",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))), qVar"state")), (Call ("MultiplyAccumulateAccumulate",CTy"Multiply", Var("v71",PTy(F4,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'MultiplyAccumulateAccumulate",ATy(qTy,qTy), Var("v71",PTy(F4,PTy(F4,PTy(F4,F4))))),qVar"state")), (Call ("MultiplyLong",CTy"Multiply", Var("v72", PTy(bTy, PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))))), Apply (Call ("dfn'MultiplyLong",ATy(qTy,qTy), Var("v72", PTy(bTy, PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))))), qVar"state")), (Call ("MultiplySubtract",CTy"Multiply", Var("v73",PTy(F4,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'MultiplySubtract",ATy(qTy,qTy), Var("v73",PTy(F4,PTy(F4,PTy(F4,F4))))),qVar"state")), (Call ("Signed16Multiply32Accumulate",CTy"Multiply", Var("v74",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))), Apply (Call ("dfn'Signed16Multiply32Accumulate",ATy(qTy,qTy), Var("v74", PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))), qVar"state")), (Call ("Signed16Multiply32Result",CTy"Multiply", Var("v75",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,F4)))))), Apply (Call ("dfn'Signed16Multiply32Result",ATy(qTy,qTy), Var("v75",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,F4)))))), qVar"state")), (Call ("Signed16Multiply64Accumulate",CTy"Multiply", Var("v76",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))), Apply (Call ("dfn'Signed16Multiply64Accumulate",ATy(qTy,qTy), Var("v76", PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))), qVar"state")), (Call ("Signed16x32Multiply32Accumulate",CTy"Multiply", Var("v77",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))), Apply (Call ("dfn'Signed16x32Multiply32Accumulate",ATy(qTy,qTy), Var("v77",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))), qVar"state")), (Call ("Signed16x32Multiply32Result",CTy"Multiply", Var("v78",PTy(bTy,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'Signed16x32Multiply32Result",ATy(qTy,qTy), Var("v78",PTy(bTy,PTy(F4,PTy(F4,F4))))),qVar"state")), (Call ("SignedMostSignificantMultiply",CTy"Multiply", Var("v79",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))), Apply (Call ("dfn'SignedMostSignificantMultiply",ATy(qTy,qTy), Var("v79",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))), qVar"state")), (Call ("SignedMostSignificantMultiplySubtract",CTy"Multiply", Var("v80",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))), Apply (Call ("dfn'SignedMostSignificantMultiplySubtract", ATy(qTy,qTy), Var("v80",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))), qVar"state")), (Call ("SignedMultiplyDual",CTy"Multiply", Var("v81",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))), Apply (Call ("dfn'SignedMultiplyDual",ATy(qTy,qTy), Var("v81", PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))), qVar"state")), (Call ("SignedMultiplyLongDual",CTy"Multiply", Var("v82",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))), Apply (Call ("dfn'SignedMultiplyLongDual",ATy(qTy,qTy), Var("v82", PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))), qVar"state"))])), (Call("SIMD",CTy"instruction",Var("v83",CTy"SIMD")), CS(Var("v83",CTy"SIMD"), [(Call ("SignedAddSub16",CTy"SIMD", Var("v84",PTy(FTy 2,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'SignedAddSub16",ATy(qTy,qTy), Var("v84",PTy(FTy 2,PTy(F4,PTy(F4,F4))))), qVar"state")), (Call ("SignedAddSub8",CTy"SIMD", Var("v85",PTy(bTy,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'SignedAddSub8",ATy(qTy,qTy), Var("v85",PTy(bTy,PTy(F4,PTy(F4,F4))))),qVar"state")), (Call ("SignedHalvingAddSub16",CTy"SIMD", Var("v86",PTy(FTy 2,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'SignedHalvingAddSub16",ATy(qTy,qTy), Var("v86",PTy(FTy 2,PTy(F4,PTy(F4,F4))))), qVar"state")), (Call ("SignedHalvingAddSub8",CTy"SIMD", Var("v87",PTy(bTy,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'SignedHalvingAddSub8",ATy(qTy,qTy), Var("v87",PTy(bTy,PTy(F4,PTy(F4,F4))))),qVar"state")), (Call ("SignedSaturatingAddSub16",CTy"SIMD", Var("v88",PTy(FTy 2,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'SignedSaturatingAddSub16",ATy(qTy,qTy), Var("v88",PTy(FTy 2,PTy(F4,PTy(F4,F4))))), qVar"state")), (Call ("SignedSaturatingAddSub8",CTy"SIMD", Var("v89",PTy(bTy,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'SignedSaturatingAddSub8",ATy(qTy,qTy), Var("v89",PTy(bTy,PTy(F4,PTy(F4,F4))))),qVar"state")), (Call ("UnsignedAddSub16",CTy"SIMD", Var("v90",PTy(FTy 2,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'UnsignedAddSub16",ATy(qTy,qTy), Var("v90",PTy(FTy 2,PTy(F4,PTy(F4,F4))))), qVar"state")), (Call ("UnsignedAddSub8",CTy"SIMD", Var("v91",PTy(bTy,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'UnsignedAddSub8",ATy(qTy,qTy), Var("v91",PTy(bTy,PTy(F4,PTy(F4,F4))))),qVar"state")), (Call ("UnsignedHalvingAddSub16",CTy"SIMD", Var("v92",PTy(FTy 2,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'UnsignedHalvingAddSub16",ATy(qTy,qTy), Var("v92",PTy(FTy 2,PTy(F4,PTy(F4,F4))))), qVar"state")), (Call ("UnsignedHalvingAddSub8",CTy"SIMD", Var("v93",PTy(bTy,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'UnsignedHalvingAddSub8",ATy(qTy,qTy), Var("v93",PTy(bTy,PTy(F4,PTy(F4,F4))))),qVar"state")), (Call ("UnsignedSaturatingAddSub16",CTy"SIMD", Var("v94",PTy(FTy 2,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'UnsignedSaturatingAddSub16",ATy(qTy,qTy), Var("v94",PTy(FTy 2,PTy(F4,PTy(F4,F4))))), qVar"state")), (Call ("UnsignedSaturatingAddSub8",CTy"SIMD", Var("v95",PTy(bTy,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'UnsignedSaturatingAddSub8",ATy(qTy,qTy), Var("v95",PTy(bTy,PTy(F4,PTy(F4,F4))))),qVar"state")), (Call ("UnsignedSumAbsoluteDifferences",CTy"SIMD", Var("v96",PTy(F4,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'UnsignedSumAbsoluteDifferences",ATy(qTy,qTy), Var("v96",PTy(F4,PTy(F4,PTy(F4,F4))))),qVar"state"))])), (Call("Store",CTy"instruction",Var("v97",CTy"Store")), CS(Var("v97",CTy"Store"), [(Call ("StoreByte",CTy"Store", Var("v98", PTy(bTy, PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))), Apply (Call ("dfn'StoreByte",ATy(qTy,qTy), Var("v98", PTy(bTy, PTy(bTy, PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))), qVar"state")), (Call ("StoreByteUnprivileged",CTy"Store", Var("v99", PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))), Apply (Call ("dfn'StoreByteUnprivileged",ATy(qTy,qTy), Var("v99", PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))), qVar"state")), (Call ("StoreDual",CTy"Store", Var("v100", PTy(bTy, PTy(bTy, PTy(bTy, PTy(F4,PTy(F4,PTy(F4,CTy"offset2")))))))), Apply (Call ("dfn'StoreDual",ATy(qTy,qTy), Var("v100", PTy(bTy, PTy(bTy, PTy(bTy, PTy(F4,PTy(F4,PTy(F4,CTy"offset2")))))))), qVar"state")), (Call ("StoreExclusive",CTy"Store", Var("v101",PTy(F4,PTy(F4,PTy(F4,F32))))), Apply (Call ("dfn'StoreExclusive",ATy(qTy,qTy), Var("v101",PTy(F4,PTy(F4,PTy(F4,F32))))),qVar"state")), (Call ("StoreExclusiveByte",CTy"Store", Var("v102",PTy(F4,PTy(F4,F4)))), Apply (Call ("dfn'StoreExclusiveByte",ATy(qTy,qTy), Var("v102",PTy(F4,PTy(F4,F4)))),qVar"state")), (Call ("StoreExclusiveDoubleword",CTy"Store", Var("v103",PTy(F4,PTy(F4,PTy(F4,F4))))), Apply (Call ("dfn'StoreExclusiveDoubleword",ATy(qTy,qTy), Var("v103",PTy(F4,PTy(F4,PTy(F4,F4))))),qVar"state")), (Call ("StoreExclusiveHalf",CTy"Store", Var("v104",PTy(F4,PTy(F4,F4)))), Apply (Call ("dfn'StoreExclusiveHalf",ATy(qTy,qTy), Var("v104",PTy(F4,PTy(F4,F4)))),qVar"state")), (Call ("StoreHalf",CTy"Store", Var("v105", PTy(bTy, PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))), Apply (Call ("dfn'StoreHalf",ATy(qTy,qTy), Var("v105", PTy(bTy, PTy(bTy, PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))), qVar"state")), (Call ("StoreHalfUnprivileged",CTy"Store", Var("v106", PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2")))))), Apply (Call ("dfn'StoreHalfUnprivileged",ATy(qTy,qTy), Var("v106", PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2")))))), qVar"state")), (Call ("StoreMultiple",CTy"Store", Var("v107",PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,F16)))))), Apply (Call ("dfn'StoreMultiple",ATy(qTy,qTy), Var("v107",PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,F16)))))), qVar"state")), (Call ("StoreMultipleUserRegisters",CTy"Store", Var("v108",PTy(bTy,PTy(bTy,PTy(F4,F16))))), Apply (Call ("dfn'StoreMultipleUserRegisters",ATy(qTy,qTy), Var("v108",PTy(bTy,PTy(bTy,PTy(F4,F16))))), qVar"state")), (Call ("StoreUnprivileged",CTy"Store", Var("v109", PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))), Apply (Call ("dfn'StoreUnprivileged",ATy(qTy,qTy), Var("v109", PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))), qVar"state")), (Call ("StoreWord",CTy"Store", Var("v110", PTy(bTy, PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))), Apply (Call ("dfn'StoreWord",ATy(qTy,qTy), Var("v110", PTy(bTy, PTy(bTy, PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))), qVar"state"))])), (Call("System",CTy"instruction",Var("v111",CTy"System")), CS(Var("v111",CTy"System"), [(Const("ExceptionReturn",CTy"System"), Apply (Const("dfn'ExceptionReturn",ATy(qTy,qTy)),qVar"state")), (Call ("ChangeProcessorState",CTy"System", Var("v112", PTy(bTy, PTy(bTy,PTy(bTy,PTy(bTy,PTy(bTy,OTy(FTy 5)))))))), Apply (Call ("dfn'ChangeProcessorState",ATy(qTy,qTy), Var("v112", PTy(bTy, PTy(bTy, PTy(bTy,PTy(bTy,PTy(bTy,OTy(FTy 5)))))))), qVar"state")), (Call("EnterxLeavex",CTy"System",bVar"v113"), Apply (Call("dfn'EnterxLeavex",ATy(qTy,qTy),bVar"v113"), qVar"state")), (Call("HypervisorCall",CTy"System",Var("v114",F16)), Apply (Call("dfn'HypervisorCall",ATy(qTy,qTy),Var("v114",F16)), qVar"state")), (Call ("MoveToBankedOrSpecialRegister",CTy"System", Var("v115",PTy(bTy,PTy(FTy 5,F4)))), Apply (Call ("dfn'MoveToBankedOrSpecialRegister",ATy(qTy,qTy), Var("v115",PTy(bTy,PTy(FTy 5,F4)))),qVar"state")), (Call ("MoveToRegisterFromBankedOrSpecial",CTy"System", Var("v116",PTy(bTy,PTy(FTy 5,F4)))), Apply (Call ("dfn'MoveToRegisterFromBankedOrSpecial", ATy(qTy,qTy),Var("v116",PTy(bTy,PTy(FTy 5,F4)))), qVar"state")), (Call ("MoveToRegisterFromSpecial",CTy"System", Var("v117",PTy(bTy,F4))), Apply (Call ("dfn'MoveToRegisterFromSpecial",ATy(qTy,qTy), Var("v117",PTy(bTy,F4))),qVar"state")), (Call ("MoveToSpecialFromImmediate",CTy"System", Var("v118",PTy(bTy,PTy(F32,F4)))), Apply (Call ("dfn'MoveToSpecialFromImmediate",ATy(qTy,qTy), Var("v118",PTy(bTy,PTy(F32,F4)))),qVar"state")), (Call ("MoveToSpecialFromRegister",CTy"System", Var("v119",PTy(bTy,PTy(F4,F4)))), Apply (Call ("dfn'MoveToSpecialFromRegister",ATy(qTy,qTy), Var("v119",PTy(bTy,PTy(F4,F4)))),qVar"state")), (Call ("ReturnFromException",CTy"System", Var("v120",PTy(bTy,PTy(bTy,PTy(bTy,F4))))), Apply (Call ("dfn'ReturnFromException",ATy(qTy,qTy), Var("v120",PTy(bTy,PTy(bTy,PTy(bTy,F4))))), qVar"state")), (Call("SecureMonitorCall",CTy"System",Var("v121",F4)), Apply (Call ("dfn'SecureMonitorCall",ATy(qTy,qTy),Var("v121",F4)), qVar"state")), (Call("Setend",CTy"System",bVar"v122"), Apply (Call("dfn'Setend",ATy(qTy,qTy),bVar"v122"),qVar"state")), (Call ("StoreReturnState",CTy"System", Var("v123",PTy(bTy,PTy(bTy,PTy(bTy,FTy 5))))), Apply (Call ("dfn'StoreReturnState",ATy(qTy,qTy), Var("v123",PTy(bTy,PTy(bTy,PTy(bTy,FTy 5))))), qVar"state")), (Call("SupervisorCall",CTy"System",Var("v124",F32)), Apply (Call("dfn'SupervisorCall",ATy(qTy,qTy),Var("v124",F32)), qVar"state"))])), (Call("VFP",CTy"instruction",Var("v125",CTy"VFP")), CS(Var("v125",CTy"VFP"), [(Call ("vabs",CTy"VFP",Var("v126",PTy(bTy,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'vabs",ATy(qTy,qTy), Var("v126",PTy(bTy,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("vadd",CTy"VFP", Var("v127",PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))), Apply (Call ("dfn'vadd",ATy(qTy,qTy), Var("v127",PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))), qVar"state")), (Call ("vcmp",CTy"VFP", Var("v128",PTy(bTy,PTy(FTy 5,OTy(FTy 5))))), Apply (Call ("dfn'vcmp",ATy(qTy,qTy), Var("v128",PTy(bTy,PTy(FTy 5,OTy(FTy 5))))), qVar"state")), (Call ("vcvt_float",CTy"VFP", Var("v129",PTy(bTy,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'vcvt_float",ATy(qTy,qTy), Var("v129",PTy(bTy,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("vcvt_from_integer",CTy"VFP", Var("v130",PTy(bTy,PTy(bTy,PTy(FTy 5,FTy 5))))), Apply (Call ("dfn'vcvt_from_integer",ATy(qTy,qTy), Var("v130",PTy(bTy,PTy(bTy,PTy(FTy 5,FTy 5))))), qVar"state")), (Call ("vcvt_to_integer",CTy"VFP", Var("v131",PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'vcvt_to_integer",ATy(qTy,qTy), Var("v131", PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("vdiv",CTy"VFP", Var("v132",PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))), Apply (Call ("dfn'vdiv",ATy(qTy,qTy), Var("v132",PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))), qVar"state")), (Call ("vfma_vfms",CTy"VFP", Var("v133", PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'vfma_vfms",ATy(qTy,qTy), Var("v133", PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("vfnma_vfnms",CTy"VFP", Var("v134", PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'vfnma_vfnms",ATy(qTy,qTy), Var("v134", PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("vldm",CTy"VFP", Var("v135", PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F8))))))), Apply (Call ("dfn'vldm",ATy(qTy,qTy), Var("v135", PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F8))))))), qVar"state")), (Call ("vldr",CTy"VFP", Var("v136",PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F32)))))), Apply (Call ("dfn'vldr",ATy(qTy,qTy), Var("v136",PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F32)))))), qVar"state")), (Call ("vmla_vmls",CTy"VFP", Var("v137", PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'vmla_vmls",ATy(qTy,qTy), Var("v137", PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("vmov",CTy"VFP",Var("v138",PTy(bTy,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'vmov",ATy(qTy,qTy), Var("v138",PTy(bTy,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("vmov_double",CTy"VFP", Var("v139",PTy(bTy,PTy(F4,PTy(F4,FTy 5))))), Apply (Call ("dfn'vmov_double",ATy(qTy,qTy), Var("v139",PTy(bTy,PTy(F4,PTy(F4,FTy 5))))), qVar"state")), (Call ("vmov_imm",CTy"VFP",Var("v140",PTy(bTy,PTy(FTy 5,F64)))), Apply (Call ("dfn'vmov_imm",ATy(qTy,qTy), Var("v140",PTy(bTy,PTy(FTy 5,F64)))),qVar"state")), (Call ("vmov_single",CTy"VFP", Var("v141",PTy(bTy,PTy(F4,FTy 5)))), Apply (Call ("dfn'vmov_single",ATy(qTy,qTy), Var("v141",PTy(bTy,PTy(F4,FTy 5)))),qVar"state")), (Call ("vmov_two_singles",CTy"VFP", Var("v142",PTy(bTy,PTy(F4,PTy(F4,FTy 5))))), Apply (Call ("dfn'vmov_two_singles",ATy(qTy,qTy), Var("v142",PTy(bTy,PTy(F4,PTy(F4,FTy 5))))), qVar"state")), (Call("vmrs",CTy"VFP",Var("v143",F4)), Apply (Call("dfn'vmrs",ATy(qTy,qTy),Var("v143",F4)), qVar"state")), (Call("vmsr",CTy"VFP",Var("v144",F4)), Apply (Call("dfn'vmsr",ATy(qTy,qTy),Var("v144",F4)), qVar"state")), (Call ("vmul",CTy"VFP", Var("v145",PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))), Apply (Call ("dfn'vmul",ATy(qTy,qTy), Var("v145",PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))), qVar"state")), (Call ("vneg",CTy"VFP",Var("v146",PTy(bTy,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'vneg",ATy(qTy,qTy), Var("v146",PTy(bTy,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("vneg_mul",CTy"VFP", Var("v147", PTy(bTy, PTy(CTy"VFPNegMul",PTy(FTy 5,PTy(FTy 5,FTy 5)))))), Apply (Call ("dfn'vneg_mul",ATy(qTy,qTy), Var("v147", PTy(bTy, PTy(CTy"VFPNegMul", PTy(FTy 5,PTy(FTy 5,FTy 5)))))), qVar"state")), (Call ("vsqrt",CTy"VFP",Var("v148",PTy(bTy,PTy(FTy 5,FTy 5)))), Apply (Call ("dfn'vsqrt",ATy(qTy,qTy), Var("v148",PTy(bTy,PTy(FTy 5,FTy 5)))),qVar"state")), (Call ("vstm",CTy"VFP", Var("v149", PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F8))))))), Apply (Call ("dfn'vstm",ATy(qTy,qTy), Var("v149", PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F8))))))), qVar"state")), (Call ("vstr",CTy"VFP", Var("v150",PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F32)))))), Apply (Call ("dfn'vstr",ATy(qTy,qTy), Var("v150",PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F32)))))), qVar"state")), (Call ("vsub",CTy"VFP", Var("v151",PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))), Apply (Call ("dfn'vsub",ATy(qTy,qTy), Var("v151",PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))), qVar"state"))]))]))) ; val Fetch_def = Def ("Fetch",qVar"state", Let(Var("v",CTy"InstrSet"), Apply (Call("CurrentInstrSet",ATy(qTy,CTy"InstrSet"),LU),qVar"state"), ITB([(Bop(Or, EQ(Var("v",CTy"InstrSet"), LC("InstrSet_ARM",CTy"InstrSet")), EQ(Dest("Architecture",CTy"Architecture",qVar"state"), LC("ARMv4",CTy"Architecture"))), Let(qVar"s", Rupd ("Encoding", TP[qVar"state",LC("Encoding_ARM",CTy"Encoding")]), Let(TP[Var("v",F32),qVar"s"], Apply (Call ("MemA",ATy(qTy,PTy(F32,qTy)), TP[Apply (Dest("REG",ATy(CTy"RName",F32),qVar"s"), LC("RName_PC",CTy"RName")),LN 4]),qVar"s"), TP[Call("ARM",CTy"MachineCode",Var("v",F32)),qVar"s"]))), (EQ(Var("v",CTy"InstrSet"), LC("InstrSet_Jazelle",CTy"InstrSet")), TP[Call("BadCode",CTy"MachineCode",LS"Fetch"),qVar"state"])], Let(Var("v0",F32), Apply (Dest("REG",ATy(CTy"RName",F32),qVar"state"), LC("RName_PC",CTy"RName")), Let(TP[Var("v1",F16),qVar"s"], Apply (Call ("MemA",ATy(qTy,PTy(F16,qTy)), TP[Var("v0",F32),LN 2]),qVar"state"), ITE(Bop(And, EQ(EX(Var("v1",F16),LN 15,LN 13,FTy 3),LW(7,3)), Mop(Not, EQ(EX(Var("v1",F16),LN 12,LN 11,FTy 2), LW(0,2)))), Let(TP[Var("v2",F16),qVar"s"], Apply (Call ("MemA",ATy(qTy,PTy(F16,qTy)), TP[Bop(Add,Var("v0",F32),LW(2,32)),LN 2]), Rupd ("Encoding", TP[qVar"s", LC("Encoding_Thumb2",CTy"Encoding")])), TP[Call ("Thumb2",CTy"MachineCode", TP[Var("v1",F16),Var("v2",F16)]),qVar"s"]), Let(qVar"s", Rupd ("Encoding", TP[qVar"s", LC("Encoding_Thumb",CTy"Encoding")]), TP[ITE(Bop(Or, EQ(Var("v",CTy"InstrSet"), LC("InstrSet_Thumb",CTy"InstrSet")), Mop(Not, Apply (Call ("HaveThumbEE", ATy(qTy,bTy),LU),qVar"s"))), Call ("Thumb",CTy"MachineCode", Var("v1",F16)), Call ("ThumbEE",CTy"MachineCode", Var("v1",F16))),qVar"s"]))))))) ; val Do_def = Def ("Do",TP[Var("cond",F4),bVar"defined"], Close (qVar"state", Let(TP[bVar"v",qVar"s"], Let(qVar"s", Rupd("CurrentCondition",TP[qVar"state",Var("cond",F4)]), TP[Apply(Call("ConditionPassed",ATy(qTy,bTy),LU),qVar"s"), qVar"s"]), TP[Bop(And,bVar"v",bVar"defined"), Rupd ("undefined", TP[qVar"s",Bop(And,bVar"v",Mop(Not,bVar"defined"))])]))) ; val Skip_def = Def ("Skip",AVar uTy, Close (qVar"state", ITE(Dest("undefined",bTy,qVar"state"), Call("Undefined",CTy"instruction",LW(0,32)), Const("NoOperation",CTy"instruction")))) ; val UndefinedARM_def = Def ("UndefinedARM",Var("cond",F4), Close (qVar"state", Let(TP[bVar"v",qVar"s"], Let(qVar"s", Rupd("CurrentCondition",TP[qVar"state",Var("cond",F4)]), TP[Apply(Call("ConditionPassed",ATy(qTy,bTy),LU),qVar"s"), qVar"s"]), TP[ITE(bVar"v",Call("Undefined",CTy"instruction",LW(0,32)), Const("NoOperation",CTy"instruction")),qVar"s"]))) ; val UndefinedThumb_def = Def ("UndefinedThumb",AVar uTy, Close (qVar"state", Let(TP[Var("v",F4),qVar"s"], Apply (Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),qVar"state"), Apply (Call ("UndefinedARM",ATy(qTy,PTy(CTy"instruction",qTy)), Var("v",F4)),qVar"s")))) ; val DECODE_UNPREDICTABLE_def = Def ("DECODE_UNPREDICTABLE",TP[Var("mc",CTy"MachineCode"),sVar"s"], Close (qVar"state", Mop(Snd, Apply (Call ("raise'exception",ATy(qTy,PTy(uTy,qTy)), Call ("UNPREDICTABLE",CTy"exception", CC[LS"Decode ", CS(Var("mc",CTy"MachineCode"), [(Call("ARM",CTy"MachineCode",Var("opc",F32)), CC[Mop(Cast sTy,Mop(Cast vTy,Var("opc",F32))), LS"; ARM; "]), (Call("Thumb",CTy"MachineCode",Var("opc",F16)), CC[Mop(Cast sTy,Mop(Cast vTy,Var("opc",F16))), LS"; Thumb; "]), (Call("ThumbEE",CTy"MachineCode",Var("opc",F16)), CC[Mop(Cast sTy,Mop(Cast vTy,Var("opc",F16))), LS"; ThumbEE; "]), (Call ("Thumb2",CTy"MachineCode", TP[Var("opc1",F16),Var("opc2",F16)]), CC[Mop(Cast sTy,Mop(Cast vTy,Var("opc1",F16))), LS", ", Mop(Cast sTy,Mop(Cast vTy,Var("opc2",F16))), LS"; Thumb2; "]), (Call("BadCode",CTy"MachineCode",sVar"x"), sVar"x")]),sVar"s"])),qVar"state")))) ; val DecodeHint_def = Def ("DecodeHint",TP[Var("cond",F4),Var("op",F8)], Close (qVar"state", ITE(Bop(Or, EQ(Dest("Architecture",CTy"Architecture",qVar"state"), LC("ARMv6T2",CTy"Architecture")), Bop(And,EQ(EX(Var("op",F8),LN 7,LN 4,F4),LW(15,4)), Bop(And, EQ(Dest("Encoding",CTy"Encoding",qVar"state"), LC("Encoding_ARM",CTy"Encoding")), EQ(Dest ("Architecture",CTy"Architecture",qVar"state"), LC("ARMv6K",CTy"Architecture"))))), TP[Const("NoOperation",CTy"instruction"),qVar"state"], Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Or, Bop(Ge, Apply (Call("ArchVersion",ATy(qTy,nTy),LU), qVar"state"),LN 7), Bop(And, EQ(Dest ("Encoding",CTy"Encoding",qVar"state"), LC("Encoding_ARM",CTy"Encoding")), EQ(Dest ("Architecture",CTy"Architecture", qVar"state"), LC("ARMv6K",CTy"Architecture"))))]), qVar"state"), TP[ITE(bVar"v", Let(TP[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(8,Var("op",F8)), ITB([(Bop(And,Mop(Not,bVar"b'7"), Bop(And,Mop(Not,bVar"b'6"), Bop(And,Mop(Not,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"), bVar"b'0"))))))), Call ("Hint",CTy"instruction", Const("Yield",CTy"Hint"))), (Bop(And,Mop(Not,bVar"b'7"), Bop(And,Mop(Not,bVar"b'6"), Bop(And,Mop(Not,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,bVar"b'1", Mop(Not, bVar"b'0")))))))), Call ("Hint",CTy"instruction", Const("WaitForEvent",CTy"Hint"))), (Bop(And,Mop(Not,bVar"b'7"), Bop(And,Mop(Not,bVar"b'6"), Bop(And,Mop(Not,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,bVar"b'1", bVar"b'0"))))))), Call ("Hint",CTy"instruction", Const("WaitForInterrupt",CTy"Hint"))), (Bop(And,Mop(Not,bVar"b'7"), Bop(And,Mop(Not,bVar"b'6"), Bop(And,Mop(Not,bVar"b'5"), Bop(And,Mop(Not,bVar"b'4"), Bop(And,Mop(Not,bVar"b'3"), Bop(And,bVar"b'2", Bop(And, Mop(Not, bVar"b'1"), Mop(Not, bVar"b'0")))))))), Call ("Hint",CTy"instruction", Const("SendEvent",CTy"Hint"))), (Bop(And,bVar"b'7", Bop(And,bVar"b'6", Bop(And,bVar"b'5",bVar"b'4"))), Call ("Hint",CTy"instruction", Call ("Debug",CTy"Hint", Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]))))], Const("NoOperation",CTy"instruction"))), Apply (Call("Skip",ATy(qTy,CTy"instruction"),LU),qVar"s")), qVar"s"])))) ; val DecodeParallelAdditionSubtraction_def = Def ("DecodeParallelAdditionSubtraction", TP[Var("op1",FTy 2),Var("op2",FTy 3),Var("U",F1),Var("Rd",F4), Var("Rn",F4),Var("Rm",F4)], ITE(EQ(Var("U",F1),LW(1,1)), CS(TP[Var("op1",FTy 2),BL(3,Var("op2",FTy 3))], [(TP[LW(1,2),LF,bVar"x'1",bVar"x'0"], Call ("SIMD",CTy"instruction", Call ("UnsignedAddSub16",CTy"SIMD", TP[Mop(Cast(FTy 2),LL[bVar"x'1",bVar"x'0"]), Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))), (TP[LW(1,2),LT,LF,LF], Call ("SIMD",CTy"instruction", Call ("UnsignedAddSub8",CTy"SIMD", TP[LF,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))), (TP[LW(1,2),LT,LT,LT], Call ("SIMD",CTy"instruction", Call ("UnsignedAddSub8",CTy"SIMD", TP[LT,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))), (TP[LW(2,2),LF,bVar"x'1",bVar"x'0"], Call ("SIMD",CTy"instruction", Call ("UnsignedSaturatingAddSub16",CTy"SIMD", TP[Mop(Cast(FTy 2),LL[bVar"x'1",bVar"x'0"]), Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))), (TP[LW(2,2),LT,LF,LF], Call ("SIMD",CTy"instruction", Call ("UnsignedSaturatingAddSub8",CTy"SIMD", TP[LF,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))), (TP[LW(2,2),LT,LT,LT], Call ("SIMD",CTy"instruction", Call ("UnsignedSaturatingAddSub8",CTy"SIMD", TP[LT,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))), (TP[LW(3,2),LF,bVar"x'1",bVar"x'0"], Call ("SIMD",CTy"instruction", Call ("UnsignedHalvingAddSub16",CTy"SIMD", TP[Mop(Cast(FTy 2),LL[bVar"x'1",bVar"x'0"]), Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))), (TP[LW(3,2),LT,LF,LF], Call ("SIMD",CTy"instruction", Call ("UnsignedHalvingAddSub8",CTy"SIMD", TP[LF,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))), (TP[LW(3,2),LT,LT,LT], Call ("SIMD",CTy"instruction", Call ("UnsignedHalvingAddSub8",CTy"SIMD", TP[LT,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))), (TP[AVar(FTy 2),AVar bTy,AVar bTy,AVar bTy], Call("Undefined",CTy"instruction",LW(0,32)))]), CS(TP[Var("op1",FTy 2),BL(3,Var("op2",FTy 3))], [(TP[LW(1,2),LF,bVar"x'1",bVar"x'0"], Call ("SIMD",CTy"instruction", Call ("SignedAddSub16",CTy"SIMD", TP[Mop(Cast(FTy 2),LL[bVar"x'1",bVar"x'0"]), Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))), (TP[LW(1,2),LT,LF,LF], Call ("SIMD",CTy"instruction", Call ("SignedAddSub8",CTy"SIMD", TP[LF,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))), (TP[LW(1,2),LT,LT,LT], Call ("SIMD",CTy"instruction", Call ("SignedAddSub8",CTy"SIMD", TP[LT,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))), (TP[LW(2,2),LF,bVar"x'1",bVar"x'0"], Call ("SIMD",CTy"instruction", Call ("SignedSaturatingAddSub16",CTy"SIMD", TP[Mop(Cast(FTy 2),LL[bVar"x'1",bVar"x'0"]), Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))), (TP[LW(2,2),LT,LF,LF], Call ("SIMD",CTy"instruction", Call ("SignedSaturatingAddSub8",CTy"SIMD", TP[LF,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))), (TP[LW(2,2),LT,LT,LT], Call ("SIMD",CTy"instruction", Call ("SignedSaturatingAddSub8",CTy"SIMD", TP[LT,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))), (TP[LW(3,2),LF,bVar"x'1",bVar"x'0"], Call ("SIMD",CTy"instruction", Call ("SignedHalvingAddSub16",CTy"SIMD", TP[Mop(Cast(FTy 2),LL[bVar"x'1",bVar"x'0"]), Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))), (TP[LW(3,2),LT,LF,LF], Call ("SIMD",CTy"instruction", Call ("SignedHalvingAddSub8",CTy"SIMD", TP[LF,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))), (TP[LW(3,2),LT,LT,LT], Call ("SIMD",CTy"instruction", Call ("SignedHalvingAddSub8",CTy"SIMD", TP[LT,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))), (TP[AVar(FTy 2),AVar bTy,AVar bTy,AVar bTy], Call("Undefined",CTy"instruction",LW(0,32)))]))) ; val DecodeVFP_def = Def ("DecodeVFP",Var("w",F32), Close (qVar"state", Let(TP[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(28,EX(Var("w",F32),LN 27,LN 0,FTy 28)), ITB([(bVar"b'25", ITE(Bop(And,bVar"b'27", Bop(And,bVar"b'26", Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'11", Bop(And,Mop(Not,bVar"b'10"),bVar"b'9"))))), ITB([(Bop(And,Mop(Not,bVar"b'23"),Mop(Not,bVar"b'4")), Let(Var("Vm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]), Let(Var("op2",F1), Mop(Cast F1,LL[bVar"b'6"]), Let(Var("N",F1), Mop(Cast F1,LL[bVar"b'7"]), Let(Var("Vd",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Vn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Let(Var("D",F1), Mop(Cast F1, LL[bVar"b'22"]), Let(bVar"dp_operation", EQ(Mop(Cast F1, LL[bVar"b'8"]), LW(1,1)), Let(TP[Var("d", FTy 5), Var("n", FTy 5), Var("m", FTy 5)], ITE(bVar"dp_operation", TP[CC[Var("D", F1), Var("Vd", F4)], CC[Var("N", F1), Var("Vn", F4)], CC[Var("M", F1), Var("Vm", F4)]], TP[CC[Var("Vd", F4), Var("D", F1)], CC[Var("Vn", F4), Var("N", F1)], CC[Var("Vm", F4), Var("M", F1)]]), TP[Mop(Not, EQ(Dest ("VFPExtension", CTy"VFPExtension", qVar"state"), LC("NoVFP", CTy"VFPExtension"))), LNL cTy, Call ("VFP", CTy"instruction", CS(Mop(Cast (FTy 2), LL[bVar"b'21", bVar"b'20"]), [(LW(0, 2), Call ("vmla_vmls", CTy"VFP", TP[bVar"dp_operation", EQ(Var("op2", F1), LW(0, 1)), Var("d", FTy 5), Var("n", FTy 5), Var("m", FTy 5)])), (LW(1, 2), Call ("vneg_mul", CTy"VFP", TP[bVar"dp_operation", ITE(EQ(Var("op2", F1), LW(1, 1)), LC("VFPNegMul_VNMLA", CTy"VFPNegMul"), LC("VFPNegMul_VNMLS", CTy"VFPNegMul")), Var("d", FTy 5), Var("n", FTy 5), Var("m", FTy 5)])), (LW(2, 2), ITE(EQ(Var("op2", F1), LW(1, 1)), Call ("vneg_mul", CTy"VFP", TP[bVar"dp_operation", LC("VFPNegMul_VNMUL", CTy"VFPNegMul"), Var("d", FTy 5), Var("n", FTy 5), Var("m", FTy 5)]), Call ("vmul", CTy"VFP", TP[bVar"dp_operation", Var("d", FTy 5), Var("n", FTy 5), Var("m", FTy 5)]))), (LW(3, 2), ITE(EQ(Var("op2", F1), LW(1, 1)), Call ("vsub", CTy"VFP", TP[bVar"dp_operation", Var("d", FTy 5), Var("n", FTy 5), Var("m", FTy 5)]), Call ("vadd", CTy"VFP", TP[bVar"dp_operation", Var("d", FTy 5), Var("n", FTy 5), Var("m", FTy 5)])))]))])))))))))), (Bop(And,bVar"b'23", Bop(And,Mop(Not,bVar"b'21"), Bop(And,Mop(Not,bVar"b'20"), Bop(And,Mop(Not,bVar"b'6"), Mop(Not,bVar"b'4"))))), Let(Var("Vm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]), Let(Var("N",F1), Mop(Cast F1,LL[bVar"b'7"]), Let(Var("Vd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Vn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("D",F1), Mop(Cast F1, LL[bVar"b'22"]), Let(bVar"dp_operation", EQ(Mop(Cast F1, LL[bVar"b'8"]), LW(1,1)), Let(TP[Var("d",FTy 5), Var("n",FTy 5), Var("m",FTy 5)], ITE(bVar"dp_operation", TP[CC[Var("D", F1), Var("Vd", F4)], CC[Var("N", F1), Var("Vn", F4)], CC[Var("M", F1), Var("Vm", F4)]], TP[CC[Var("Vd", F4), Var("D", F1)], CC[Var("Vn", F4), Var("N", F1)], CC[Var("Vm", F4), Var("M", F1)]]), TP[Mop(Not, EQ(Dest ("VFPExtension", CTy"VFPExtension", qVar"state"), LC("NoVFP", CTy"VFPExtension"))), LNL cTy, Call ("VFP", CTy"instruction", Call ("vdiv", CTy"VFP", TP[bVar"dp_operation", Var("d", FTy 5), Var("n", FTy 5), Var("m", FTy 5)]))]))))))))), (Bop(And,bVar"b'23", Bop(And,Mop(Not,bVar"b'21"), Bop(And,bVar"b'20",Mop(Not,bVar"b'4")))), Let(Var("Vm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]), Let(Var("N",F1), Mop(Cast F1,LL[bVar"b'7"]), Let(Var("Vd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Vn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("D",F1), Mop(Cast F1, LL[bVar"b'22"]), Let(bVar"dp_operation", EQ(Mop(Cast F1, LL[bVar"b'8"]), LW(1,1)), Let(TP[Var("d",FTy 5), Var("n",FTy 5), Var("m",FTy 5)], ITE(bVar"dp_operation", TP[CC[Var("D", F1), Var("Vd", F4)], CC[Var("N", F1), Var("Vn", F4)], CC[Var("M", F1), Var("Vm", F4)]], TP[CC[Var("Vd", F4), Var("D", F1)], CC[Var("Vn", F4), Var("N", F1)], CC[Var("Vm", F4), Var("M", F1)]]), TP[EQ(Dest ("VFPExtension", CTy"VFPExtension", qVar"state"), LC("VFPv4", CTy"VFPExtension")), LNL cTy, Call ("VFP", CTy"instruction", Call ("vfnma_vfnms", CTy"VFP", TP[bVar"dp_operation", EQ(Mop(Cast F1, LL[bVar"b'6"]), LW(0, 1)), Var("d", FTy 5), Var("n", FTy 5), Var("m", FTy 5)]))]))))))))), (Bop(And,bVar"b'23", Bop(And,bVar"b'21", Bop(And,Mop(Not,bVar"b'20"), Mop(Not,bVar"b'4")))), Let(Var("Vm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]), Let(Var("N",F1), Mop(Cast F1,LL[bVar"b'7"]), Let(Var("Vd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Vn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("D",F1), Mop(Cast F1, LL[bVar"b'22"]), Let(bVar"dp_operation", EQ(Mop(Cast F1, LL[bVar"b'8"]), LW(1,1)), Let(TP[Var("d",FTy 5), Var("n",FTy 5), Var("m",FTy 5)], ITE(bVar"dp_operation", TP[CC[Var("D", F1), Var("Vd", F4)], CC[Var("N", F1), Var("Vn", F4)], CC[Var("M", F1), Var("Vm", F4)]], TP[CC[Var("Vd", F4), Var("D", F1)], CC[Var("Vn", F4), Var("N", F1)], CC[Var("Vm", F4), Var("M", F1)]]), TP[EQ(Dest ("VFPExtension", CTy"VFPExtension", qVar"state"), LC("VFPv4", CTy"VFPExtension")), LNL cTy, Call ("VFP", CTy"instruction", Call ("vfma_vfms", CTy"VFP", TP[bVar"dp_operation", EQ(Mop(Cast F1, LL[bVar"b'6"]), LW(0, 1)), Var("d", FTy 5), Var("n", FTy 5), Var("m", FTy 5)]))]))))))))), (Bop(And,bVar"b'23", Bop(And,bVar"b'21", Bop(And,bVar"b'20", Bop(And,Mop(Not,bVar"b'19"), Bop(And,Mop(Not,bVar"b'18"), Bop(And,Mop(Not,bVar"b'17"), Bop(And, Mop(Not,bVar"b'16"), Bop(And, Mop(Not, bVar"b'7"), Bop(And, bVar"b'6", Mop(Not, bVar"b'4")))))))))), Let(Var("Vm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]), Let(Var("Vd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("D",F1), Mop(Cast F1,LL[bVar"b'22"]), Let(bVar"single_register", EQ(Mop(Cast F1,LL[bVar"b'8"]), LW(0,1)), Let(TP[Var("d",FTy 5), Var("m",FTy 5)], ITE(bVar"single_register", TP[CC[Var("Vd",F4), Var("D",F1)], CC[Var("Vm",F4), Var("M",F1)]], TP[CC[Var("D",F1), Var("Vd",F4)], CC[Var("M",F1), Var("Vm",F4)]]), TP[Mop(Not, EQ(Dest ("VFPExtension", CTy"VFPExtension", qVar"state"), LC("NoVFP", CTy"VFPExtension"))), LNL cTy, Call ("VFP", CTy"instruction", Call ("vmov", CTy"VFP", TP[bVar"single_register", Var("d", FTy 5), Var("m", FTy 5)]))]))))))), (Bop(And,bVar"b'23", Bop(And,bVar"b'21", Bop(And,bVar"b'20", Bop(And,Mop(Not,bVar"b'19"), Bop(And,Mop(Not,bVar"b'18"), Bop(And,Mop(Not,bVar"b'17"), Bop(And, Mop(Not,bVar"b'16"), Bop(And,bVar"b'7", Bop(And, bVar"b'6", Mop(Not, bVar"b'4")))))))))), Let(Var("Vm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]), Let(Var("Vd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("D",F1), Mop(Cast F1,LL[bVar"b'22"]), Let(bVar"dp_operation", EQ(Mop(Cast F1,LL[bVar"b'8"]), LW(1,1)), Let(TP[Var("d",FTy 5), Var("m",FTy 5)], ITE(bVar"dp_operation", TP[CC[Var("D",F1), Var("Vd",F4)], CC[Var("M",F1), Var("Vm",F4)]], TP[CC[Var("Vd",F4), Var("D",F1)], CC[Var("Vm",F4), Var("M",F1)]]), TP[Mop(Not, EQ(Dest ("VFPExtension", CTy"VFPExtension", qVar"state"), LC("NoVFP", CTy"VFPExtension"))), LNL cTy, Call ("VFP", CTy"instruction", Call ("vabs", CTy"VFP", TP[bVar"dp_operation", Var("d", FTy 5), Var("m", FTy 5)]))]))))))), (Bop(And,bVar"b'23", Bop(And,bVar"b'21", Bop(And,bVar"b'20", Bop(And,Mop(Not,bVar"b'19"), Bop(And,Mop(Not,bVar"b'18"), Bop(And,Mop(Not,bVar"b'17"), Bop(And,bVar"b'16", Bop(And, Mop(Not, bVar"b'7"), Bop(And, bVar"b'6", Mop(Not, bVar"b'4")))))))))), Let(Var("Vm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]), Let(Var("Vd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("D",F1), Mop(Cast F1,LL[bVar"b'22"]), Let(bVar"dp_operation", EQ(Mop(Cast F1,LL[bVar"b'8"]), LW(1,1)), Let(TP[Var("d",FTy 5), Var("m",FTy 5)], ITE(bVar"dp_operation", TP[CC[Var("D",F1), Var("Vd",F4)], CC[Var("M",F1), Var("Vm",F4)]], TP[CC[Var("Vd",F4), Var("D",F1)], CC[Var("Vm",F4), Var("M",F1)]]), TP[Mop(Not, EQ(Dest ("VFPExtension", CTy"VFPExtension", qVar"state"), LC("NoVFP", CTy"VFPExtension"))), LNL cTy, Call ("VFP", CTy"instruction", Call ("vneg", CTy"VFP", TP[bVar"dp_operation", Var("d", FTy 5), Var("m", FTy 5)]))]))))))), (Bop(And,bVar"b'23", Bop(And,bVar"b'21", Bop(And,bVar"b'20", Bop(And,Mop(Not,bVar"b'19"), Bop(And,Mop(Not,bVar"b'18"), Bop(And,Mop(Not,bVar"b'17"), Bop(And,bVar"b'16", Bop(And,bVar"b'7", Bop(And, bVar"b'6", Mop(Not, bVar"b'4")))))))))), Let(Var("Vm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]), Let(Var("Vd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("D",F1), Mop(Cast F1,LL[bVar"b'22"]), Let(bVar"dp_operation", EQ(Mop(Cast F1,LL[bVar"b'8"]), LW(1,1)), Let(TP[Var("d",FTy 5), Var("m",FTy 5)], ITE(bVar"dp_operation", TP[CC[Var("D",F1), Var("Vd",F4)], CC[Var("M",F1), Var("Vm",F4)]], TP[CC[Var("Vd",F4), Var("D",F1)], CC[Var("Vm",F4), Var("M",F1)]]), TP[Mop(Not, EQ(Dest ("VFPExtension", CTy"VFPExtension", qVar"state"), LC("NoVFP", CTy"VFPExtension"))), LNL cTy, Call ("VFP", CTy"instruction", Call ("vsqrt", CTy"VFP", TP[bVar"dp_operation", Var("d", FTy 5), Var("m", FTy 5)]))]))))))), (Bop(And,bVar"b'23", Bop(And,bVar"b'21", Bop(And,bVar"b'20", Bop(And,Mop(Not,bVar"b'19"), Bop(And,bVar"b'18", Bop(And,Mop(Not,bVar"b'17"), Bop(And, Mop(Not,bVar"b'16"), Bop(And,bVar"b'6", Mop(Not, bVar"b'4"))))))))), Let(Var("Vm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]), Let(Var("Vd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("D",F1), Mop(Cast F1,LL[bVar"b'22"]), ITE(EQ(Mop(Cast F1,LL[bVar"b'7"]), LW(1,1)), Let(bVar"dp_operation", EQ(Mop(Cast F1, LL[bVar"b'8"]), LW(1,1)), Let(TP[Var("d",FTy 5), Var("m",FTy 5)], ITE(bVar"dp_operation", TP[CC[Var("D",F1), Var("Vd", F4)], CC[Var("M",F1), Var("Vm", F4)]], TP[CC[Var("Vd", F4), Var("D",F1)], CC[Var("Vm", F4), Var("M",F1)]]), TP[Mop(Not, EQ(Dest ("VFPExtension", CTy"VFPExtension", qVar"state"), LC("NoVFP", CTy"VFPExtension"))), LNL cTy, Call ("VFP", CTy"instruction", Call ("vcmp", CTy"VFP", TP[bVar"dp_operation", Var("d", FTy 5), Mop(Some, Var("m", FTy 5))]))])), TP[LF,LS"", Call ("Undefined", CTy"instruction", LW(0,32))])))))), (Bop(And,bVar"b'23", Bop(And,bVar"b'21", Bop(And,bVar"b'20", Bop(And,Mop(Not,bVar"b'19"), Bop(And,bVar"b'18", Bop(And,Mop(Not,bVar"b'17"), Bop(And,bVar"b'16", Bop(And,bVar"b'6", Mop(Not, bVar"b'4"))))))))), Let(Var("Vd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12"]), Let(Var("D",F1),Mop(Cast F1,LL[bVar"b'22"]), ITE(EQ(Mop(Cast F1,LL[bVar"b'7"]), LW(1,1)), Let(bVar"dp_operation", EQ(Mop(Cast F1,LL[bVar"b'8"]), LW(1,1)), TP[Mop(Not, EQ(Dest ("VFPExtension", CTy"VFPExtension", qVar"state"), LC("NoVFP", CTy"VFPExtension"))), ITE(Bop(And, EQ(Mop(Cast F1, LL[bVar"b'5"]), LW(0,1)), EQ(Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), LW(0,4))),LS"", LS"vcmp"), Call ("VFP",CTy"instruction", Call ("vcmp",CTy"VFP", TP[bVar"dp_operation", ITE(bVar"dp_operation", CC[Var("D",F1), Var("Vd",F4)], CC[Var("Vd",F4), Var("D",F1)]), LO(FTy 5)]))]), TP[LF,LS"", Call ("Undefined",CTy"instruction", LW(0,32))])))), (Bop(And,bVar"b'23", Bop(And,bVar"b'21", Bop(And,bVar"b'20", Bop(And,Mop(Not,bVar"b'19"), Bop(And,bVar"b'18", Bop(And,bVar"b'17", Bop(And,bVar"b'16", Bop(And,bVar"b'7", Bop(And, bVar"b'6", Mop(Not, bVar"b'4")))))))))), Let(Var("Vm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]), Let(Var("Vd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("D",F1), Mop(Cast F1,LL[bVar"b'22"]), Let(bVar"double_to_single", EQ(Mop(Cast F1,LL[bVar"b'8"]), LW(1,1)), Let(TP[Var("d",FTy 5), Var("m",FTy 5)], ITE(bVar"double_to_single", TP[CC[Var("Vd",F4), Var("D",F1)], CC[Var("M",F1), Var("Vm",F4)]], TP[CC[Var("D",F1), Var("Vd",F4)], CC[Var("Vm",F4), Var("M",F1)]]), TP[Mop(Not, EQ(Dest ("VFPExtension", CTy"VFPExtension", qVar"state"), LC("NoVFP", CTy"VFPExtension"))), LNL cTy, Call ("VFP", CTy"instruction", Call ("vcvt_float", CTy"VFP", TP[bVar"double_to_single", Var("d", FTy 5), Var("m", FTy 5)]))]))))))), (Bop(And,bVar"b'23", Bop(And,bVar"b'21", Bop(And,bVar"b'20", Bop(And,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,bVar"b'6", Mop(Not, bVar"b'4"))))))))), Let(Var("Vd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12"]), Let(Var("D",F1),Mop(Cast F1,LL[bVar"b'22"]), Let(bVar"dp_operation", EQ(Mop(Cast F1,LL[bVar"b'8"]), LW(1,1)), TP[Mop(Not, EQ(Dest ("VFPExtension", CTy"VFPExtension", qVar"state"), LC("NoVFP", CTy"VFPExtension"))), LNL cTy, Call ("VFP",CTy"instruction", Call ("vcvt_from_integer", CTy"VFP", TP[bVar"dp_operation", EQ(Mop(Cast F1, LL[bVar"b'7"]), LW(0,1)), ITE(bVar"dp_operation", CC[Var("D",F1), Var("Vd",F4)], CC[Var("Vd",F4), Var("D",F1)]), CC[Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), Mop(Cast F1, LL[bVar"b'5"])]]))])))), (Bop(And,bVar"b'23", Bop(And,bVar"b'21", Bop(And,bVar"b'20", Bop(And,bVar"b'19", Bop(And,bVar"b'18", Bop(And,Mop(Not,bVar"b'17"), Bop(And,bVar"b'6", Mop(Not,bVar"b'4")))))))), Let(Var("Vm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]), Let(bVar"dp_operation", EQ(Mop(Cast F1,LL[bVar"b'8"]), LW(1,1)), TP[Mop(Not, EQ(Dest ("VFPExtension", CTy"VFPExtension", qVar"state"), LC("NoVFP", CTy"VFPExtension"))), LNL cTy, Call ("VFP",CTy"instruction", Call ("vcvt_to_integer",CTy"VFP", TP[bVar"dp_operation", EQ(Mop(Cast F1, LL[bVar"b'16"]), LW(0,1)), EQ(Mop(Cast F1, LL[bVar"b'7"]), LW(1,1)), CC[Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Mop(Cast F1, LL[bVar"b'22"])], ITE(bVar"dp_operation", CC[Var("M",F1), Var("Vm",F4)], CC[Var("Vm",F4), Var("M",F1)])]))])))), (Bop(And,bVar"b'23", Bop(And,bVar"b'21", Bop(And,bVar"b'20", Bop(And,Mop(Not,bVar"b'6"), Mop(Not,bVar"b'4"))))), Let(Var("Vd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12"]), Let(Var("D",F1),Mop(Cast F1,LL[bVar"b'22"]), Let(bVar"single_register", EQ(Mop(Cast F1,LL[bVar"b'8"]), LW(0,1)), TP[Bop(In, Dest ("VFPExtension", CTy"VFPExtension", qVar"state"), SL[LC("VFPv3", CTy"VFPExtension"), LC("VFPv4", CTy"VFPExtension")]), ITE(Bop(And, EQ(Mop(Cast F1, LL[bVar"b'7"]), LW(0,1)), EQ(Mop(Cast F1, LL[bVar"b'5"]), LW(0,1))),LS"", LS"vmov (imm"), Call ("VFP",CTy"instruction", Call ("vmov_imm",CTy"VFP", TP[bVar"single_register", ITE(bVar"single_register", CC[Var("Vd",F4), Var("D",F1)], CC[Var("D",F1), Var("Vd",F4)]), Call ("VFPExpandImm",F64, TP[CC[Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])], bVar"single_register"])]))])))), (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'8"),bVar"b'4")))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12"]), TP[Mop(Not, EQ(Dest ("VFPExtension", CTy"VFPExtension",qVar"state"), LC("NoVFP",CTy"VFPExtension"))), ITE(Bop(And,EQ(Var("Rt",F4),LW(15,4)), Mop(Not, Bop(And, EQ(Mop(Cast(FTy 2), LL[bVar"b'6", bVar"b'5"]), LW(0,2)), EQ(Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), LW(0,4))))), LS"vmov_single",LS""), Call ("VFP",CTy"instruction", Call ("vmov_single",CTy"VFP", TP[EQ(Mop(Cast F1,LL[bVar"b'20"]), LW(1,1)),Var("Rt",F4), CC[Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Mop(Cast F1,LL[bVar"b'7"])]]))])), (Bop(And,bVar"b'23", Bop(And,bVar"b'22", Bop(And,bVar"b'21", Bop(And,Mop(Not,bVar"b'19"), Bop(And,Mop(Not,bVar"b'18"), Bop(And,Mop(Not,bVar"b'17"), Bop(And,bVar"b'16", Bop(And, Mop(Not, bVar"b'8"), bVar"b'4")))))))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12"]), Let(bVar"GOOD_MATCH", Bop(And, EQ(Mop(Cast(FTy 3), LL[bVar"b'7",bVar"b'6", bVar"b'5"]),LW(0,3)), EQ(Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), LW(0,4))), TP[Mop(Not, EQ(Dest ("VFPExtension", CTy"VFPExtension", qVar"state"), LC("NoVFP",CTy"VFPExtension"))), ITE(EQ(Mop(Cast F1,LL[bVar"b'20"]), LW(1,1)), TP[ITE(bVar"GOOD_MATCH",LS"", LS"mrs"), Call ("VFP",CTy"instruction", Call ("vmrs",CTy"VFP", Var("Rt",F4)))], TP[ITE(Bop(And, EQ(Var("Rt",F4), LW(15,4)), Mop(Not, bVar"GOOD_MATCH")), LS"msr",LS""), Call ("VFP",CTy"instruction", Call ("vmsr",CTy"VFP", Var("Rt",F4)))])])))], TP[LF,LS"", Call("Undefined",CTy"instruction",LW(0,32))]), TP[LF,LS"",Call("Undefined",CTy"instruction",LW(0,32))])), (Bop(And,bVar"b'27", Bop(And,bVar"b'26", Bop(And,bVar"b'11", Bop(And,Mop(Not,bVar"b'10"),bVar"b'9")))), ITB([(Bop(And,Mop(Not,bVar"b'24"),bVar"b'23"), Let(Var("imm8",F8), Mop(Cast F8, LL[bVar"b'7",bVar"b'6",bVar"b'5",bVar"b'4", bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"]), Let(Var("Vd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Let(Var("D",F1), Mop(Cast F1,LL[bVar"b'22"]), Let(bVar"single_regs", EQ(Mop(Cast F1,LL[bVar"b'8"]), LW(0,1)), Let(bVar"wback", EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1,1)), Let(TP[Var("d",FTy 5), nVar"regs"], ITE(bVar"single_regs", TP[CC[Var("Vd",F4), Var("D",F1)], Mop(Cast nTy, Var("imm8",F8))], TP[CC[Var("D",F1), Var("Vd",F4)], Bop(Div, Mop(Cast nTy, Var("imm8", F8)), LN 2)]), TP[Mop(Not, EQ(Dest ("VFPExtension", CTy"VFPExtension", qVar"state"), LC("NoVFP", CTy"VFPExtension"))), ITE(Bop(Or, EQ(nVar"regs", LN 0), Bop(Or, Bop(Gt, Bop(Add, Mop(Cast nTy, Var("d", FTy 5)), nVar"regs"), LN 32), Bop(Or, Bop(And, bVar"wback", EQ(Var("Rn", F4), LW(15, 4))), Bop(And, Mop(Not, bVar"single_regs"), Bop(Or, Bop(Gt, nVar"regs", LN 16), Bop(Bit, Var("imm8", F8), LN 0)))))), LS"vpush/vpop", LS""), Call ("VFP", CTy"instruction", ITE(EQ(Mop(Cast F1, LL[bVar"b'20"]), LW(1,1)), Call ("vldm", CTy"VFP", TP[bVar"single_regs", LT, bVar"wback", Var("d", FTy 5), Var("Rn", F4), Var("imm8", F8)]), Call ("vstm", CTy"VFP", TP[bVar"single_regs", LT, bVar"wback", Var("d", FTy 5), Var("Rn", F4), Var("imm8", F8)])))])))))))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"),bVar"b'21")), Let(Var("imm8",F8), Mop(Cast F8, LL[bVar"b'7",bVar"b'6",bVar"b'5",bVar"b'4", bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"]), Let(Var("Vd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Let(Var("D",F1), Mop(Cast F1,LL[bVar"b'22"]), Let(bVar"single_regs", EQ(Mop(Cast F1,LL[bVar"b'8"]), LW(0,1)), Let(TP[Var("d",FTy 5),nVar"regs"], ITE(bVar"single_regs", TP[CC[Var("Vd",F4), Var("D",F1)], Mop(Cast nTy, Var("imm8",F8))], TP[CC[Var("D",F1), Var("Vd",F4)], Bop(Div, Mop(Cast nTy, Var("imm8",F8)), LN 2)]), TP[Mop(Not, EQ(Dest ("VFPExtension", CTy"VFPExtension", qVar"state"), LC("NoVFP", CTy"VFPExtension"))), ITE(Bop(Or, EQ(nVar"regs", LN 0), Bop(Or, Bop(Gt, Bop(Add, Mop(Cast nTy, Var("d", FTy 5)), nVar"regs"), LN 32), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(And, Mop(Not, bVar"single_regs"), Bop(Or, Bop(Gt, nVar"regs", LN 16), Bop(Bit, Var("imm8", F8), LN 0)))))), LS"vpush/vpop",LS""), Call ("VFP", CTy"instruction", ITE(EQ(Mop(Cast F1, LL[bVar"b'20"]), LW(1,1)), Call ("vldm", CTy"VFP", TP[bVar"single_regs", LF,LT, Var("d", FTy 5), Var("Rn",F4), Var("imm8", F8)]), Call ("vstm", CTy"VFP", TP[bVar"single_regs", LF,LT, Var("d", FTy 5), Var("Rn",F4), Var("imm8", F8)])))]))))))), (Bop(And,bVar"b'24",Mop(Not,bVar"b'21")), Let(Var("Vd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12"]), Let(Var("D",F1),Mop(Cast F1,LL[bVar"b'22"]), Let(bVar"single_reg", EQ(Mop(Cast F1,LL[bVar"b'8"]),LW(0,1)), Let(TP[bVar"args1",Var("args2",FTy 5), Var("args3",F4),Var("args4",F32)], TP[EQ(Mop(Cast F1,LL[bVar"b'23"]), LW(1,1)), ITE(bVar"single_reg", CC[Var("Vd",F4),Var("D",F1)], CC[Var("D",F1),Var("Vd",F4)]), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Mop(Cast F32, CC[Mop(Cast F8, LL[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)])], TP[Mop(Not, EQ(Dest ("VFPExtension", CTy"VFPExtension", qVar"state"), LC("NoVFP", CTy"VFPExtension"))), LNL cTy, Call ("VFP",CTy"instruction", ITE(EQ(Mop(Cast F1, LL[bVar"b'20"]), LW(1,1)), Call ("vldr",CTy"VFP", TP[bVar"single_reg", bVar"args1", Var("args2",FTy 5), Var("args3",F4), Var("args4",F32)]), Call ("vstr",CTy"VFP", TP[bVar"single_reg", bVar"args1", Var("args2",FTy 5), Var("args3",F4), Var("args4",F32)])))]))))), (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'8"), Bop(And,Mop(Not,bVar"b'7"), Bop(And,Mop(Not,bVar"b'6"), bVar"b'4"))))))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12"]), Let(Var("Rt2",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Let(Var("m",FTy 5), CC[Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Mop(Cast F1,LL[bVar"b'5"])], Let(bVar"to_arm_registers", EQ(Mop(Cast F1,LL[bVar"b'20"]), LW(1,1)), TP[Mop(Not, EQ(Dest ("VFPExtension", CTy"VFPExtension", qVar"state"), LC("NoVFP", CTy"VFPExtension"))), ITE(Bop(Or, EQ(Var("Rt",F4),LW(15,4)), Bop(Or, EQ(Var("Rt2",F4), LW(15,4)), Bop(Or, EQ(Var("m",FTy 5), LW(31,5)), Bop(And, bVar"to_arm_registers", EQ(Var("Rt", F4), Var("Rt2", F4)))))), LS"vmov_two_singles",LS""), Call ("VFP",CTy"instruction", Call ("vmov_two_singles", CTy"VFP", TP[bVar"to_arm_registers", Var("Rt",F4), Var("Rt2",F4), Var("m",FTy 5)]))]))))), (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'8", Bop(And,Mop(Not,bVar"b'7"), Bop(And,Mop(Not,bVar"b'6"), bVar"b'4"))))))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12"]), Let(Var("Rt2",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Let(bVar"to_arm_registers", EQ(Mop(Cast F1,LL[bVar"b'20"]),LW(1,1)), TP[Mop(Not, EQ(Dest ("VFPExtension", CTy"VFPExtension", qVar"state"), LC("NoVFP",CTy"VFPExtension"))), ITE(Bop(Or,EQ(Var("Rt",F4),LW(15,4)), Bop(Or, EQ(Var("Rt2",F4),LW(15,4)), Bop(And, bVar"to_arm_registers", EQ(Var("Rt",F4), Var("Rt2",F4))))), LS"vmov_double",LS""), Call ("VFP",CTy"instruction", Call ("vmov_double",CTy"VFP", TP[bVar"to_arm_registers", Var("Rt",F4),Var("Rt2",F4), CC[Mop(Cast F1,LL[bVar"b'5"]), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])]]))]))))], TP[LF,LS"",Call("Undefined",CTy"instruction",LW(0,32))]))], TP[LF,LS"",Call("Undefined",CTy"instruction",LW(0,32))])))) ; val DecodeARM_def = Def ("DecodeARM",Var("w",F32), Close (qVar"state", Let(Var("mc",CTy"MachineCode"), Call("ARM",CTy"MachineCode",Var("w",F32)), Let(Var("cond",F4),EX(Var("w",F32),LN 31,LN 28,F4), ITE(EQ(Var("cond",F4),LW(15,4)), Let(TP[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(28,EX(Var("w",F32),LN 27,LN 0,FTy 28)), ITB([(bVar"b'26", ITB([(bVar"b'21", ITB([(Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'24", Bop(And, Mop(Not,bVar"b'23"), Bop(And, bVar"b'22", Bop(And, bVar"b'20", Mop(Not, bVar"b'7"))))))), ITB([(Bop(And,Mop(Not,bVar"b'6"), Bop(And, Mop(Not,bVar"b'5"), bVar"b'4")), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[LW(14,4), Bop(In, Dest ("Architecture", CTy"Architecture", qVar"state"), SL[LC("ARMv6K", CTy"Architecture"), LC("ARMv7_A", CTy"Architecture"), LC("ARMv7_R", CTy"Architecture")])]), qVar"state"), ITE(bVar"v", TP[Const ("ClearExclusive", CTy"instruction"), ITE(Mop(Not, Bop(And, EQ(Mop(Cast F1, LL[bVar"b'19"]), LW(1, 1)), Bop(And, EQ(Mop(Cast (FTy 3), LL[bVar"b'18", bVar"b'17", bVar"b'16"]), LW(7, 3)), Bop(And, EQ(Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), LW(15, 4)), Bop(And, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(0, 4)), EQ(Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), LW(15, 4))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "CLREX"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))), (Bop(And,bVar"b'19", Bop(And,bVar"b'18", Bop(And,bVar"b'17", Bop(And, bVar"b'16", Bop(And, bVar"b'15", Bop(And, bVar"b'14", Bop(And, bVar"b'13", Bop(And, bVar"b'12", Bop(And, Mop(Not, bVar"b'11"), Bop(And, Mop(Not, bVar"b'10"), Bop(And, Mop(Not, bVar"b'9"), Bop(And, Mop(Not, bVar"b'8"), Bop(And, bVar"b'6", Bop(And, Mop(Not, bVar"b'5"), Mop(Not, bVar"b'4"))))))))))))))), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[LW(14,4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 7)]), qVar"state"), TP[ITE(bVar"v", Call ("Hint", CTy"instruction", Call ("DataSynchronizationBarrier", CTy"Hint", Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]))), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s")), qVar"s"])), (Bop(And,bVar"b'6", Bop(And, Mop(Not,bVar"b'5"), bVar"b'4")), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[LW(14,4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 7)]), qVar"state"), ITE(bVar"v", TP[Call ("Hint", CTy"instruction", Call ("DataMemoryBarrier", CTy"Hint", Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]))), ITE(Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), LW(15, 4)), Bop(And, EQ(Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), LW(15, 4)), EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(0, 4))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "DMB"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))), (Bop(And,bVar"b'6", Bop(And,bVar"b'5", Mop(Not,bVar"b'4"))), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[LW(14,4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 7)]), qVar"state"), ITE(bVar"v", TP[Call ("Hint", CTy"instruction", Call ("InstructionSynchronizationBarrier", CTy"Hint", Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]))), ITE(Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), LW(15, 4)), Bop(And, EQ(Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), LW(15, 4)), EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(0, 4))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "ISB"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))), (Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy,nTy),LU), qVar"state"),LN 5), TP[Call ("Undefined", CTy"instruction", LW(0,32)),qVar"state"])], TP[LX(CTy"instruction"), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS""]),qVar"state")])), (Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy,nTy),LU), qVar"state"),LN 5), TP[Call ("Undefined", CTy"instruction",LW(0,32)), qVar"state"])], TP[LX(CTy"instruction"), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS""]),qVar"state")])), (Bop(And,Mop(Not,bVar"b'27"),bVar"b'20"), ITB([(Bop(And,Mop(Not,bVar"b'25"), Bop(And,Mop(Not,bVar"b'24"), bVar"b'22")), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[LW(14,4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy,nTy), LU), qVar"state"), LN 7)]), qVar"state"), ITE(bVar"v", TP[Call ("Hint", CTy"instruction", Call ("PreloadInstruction", CTy"Hint", TP[EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1,1)), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast (FTy 12), LL[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"])))])), ITE(Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), LW(15,4))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"PLI"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))), (Bop(And,bVar"b'25", Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'22", Mop(Not,bVar"b'4")))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[LW(14,4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 7)]), qVar"state"), ITE(bVar"v", TP[Let(TP[Var("shift_t", CTy"SRType"), nVar"shift_n"], Call ("DecodeImmShift", PTy(CTy"SRType", nTy), TP[Mop(Cast (FTy 2), LL[bVar"b'6", bVar"b'5"]), Mop(Cast (FTy 5), LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8", bVar"b'7"])]), Call ("Hint", CTy"instruction", Call ("PreloadInstruction", CTy"Hint", TP[EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1, 1)), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Call ("register_form1", CTy"offset1", TP[Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"])]))), ITE(Bop(Or, EQ(Var("Rm", F4), LW(15,4)), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), LW(15, 4)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "PreloadInstruction (register)"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))), (Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'24", Bop(And,bVar"b'19", Bop(And,bVar"b'18", Bop(And, bVar"b'17", bVar"b'16"))))), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[LW(14,4), Apply (Call ("HaveDSPSupport", ATy(qTy,bTy),LU), qVar"state")]), qVar"state"), ITE(bVar"v", TP[Call ("Hint", CTy"instruction", Call ("PreloadDataLiteral", CTy"Hint", TP[EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1,1)), Mop(Cast F32, Mop(Cast (FTy 12), LL[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"]))])), ITE(Mop(Not, Bop(And, EQ(Mop(Cast F1, LL[bVar"b'22"]), LW(1,1)), EQ(Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), LW(15,4)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"PLD"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))), (Bop(And,Mop(Not,bVar"b'25"), bVar"b'24"), Let(Var("R",F1), Mop(Cast F1,LL[bVar"b'22"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[LW(14,4), Bop(Or, Bop(And, EQ(Var("R", F1), LW(1,1)), Bop(And, Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 7), Bop(In, LC("Extension_Multiprocessing", CTy"Extensions"), Dest ("Extensions", STy(CTy"Extensions"), qVar"state")))), Bop(And, EQ(Var("R", F1), LW(0,1)), Apply (Call ("HaveDSPSupport", ATy(qTy, bTy), LU), qVar"state")))]), qVar"state"), ITE(bVar"v", TP[Call ("Hint", CTy"instruction", Call ("PreloadData", CTy"Hint", TP[EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1,1)), EQ(Var("R", F1), LW(0,1)), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast (FTy 12), LL[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"])))])), ITE(Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), LW(15,4))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "PLD"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))), (Bop(And,bVar"b'25", Bop(And,bVar"b'24", Mop(Not,bVar"b'4"))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Let(Var("R",F1), Mop(Cast F1, LL[bVar"b'22"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[LW(14,4), Bop(Or, Bop(And, EQ(Var("R", F1), LW(1, 1)), Bop(And, Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 7), Bop(In, LC("Extension_Multiprocessing", CTy"Extensions"), Dest ("Extensions", STy(CTy"Extensions"), qVar"state")))), Bop(And, EQ(Var("R", F1), LW(0, 1)), Apply (Call ("HaveDSPSupport", ATy(qTy, bTy), LU), qVar"state")))]), qVar"state"), ITE(bVar"v", Let(bVar"is_pldw", EQ(Var("R", F1), LW(0,1)), TP[Let(TP[Var("shift_t", CTy"SRType"), nVar"shift_n"], Call ("DecodeImmShift", PTy(CTy"SRType", nTy), TP[Mop(Cast (FTy 2), LL[bVar"b'6", bVar"b'5"]), Mop(Cast (FTy 5), LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8", bVar"b'7"])]), Call ("Hint", CTy"instruction", Call ("PreloadData", CTy"Hint", TP[EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1, 1)), bVar"is_pldw", Var("Rn", F4), Call ("register_form1", CTy"offset1", TP[Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"])]))), ITE(Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Bop(Or, Bop(And, EQ(Var("Rn", F4), LW(15, 4)), bVar"is_pldw"), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), LW(15, 4))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "PreloadData (register)"]), qVar"s"), qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))), (Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy,nTy),LU), qVar"state"),LN 5), TP[Call ("Undefined", CTy"instruction",LW(0,32)), qVar"state"])], TP[LX(CTy"instruction"), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS""]),qVar"state")])), (Bop(Ge, Apply (Call ("ArchVersion",ATy(qTy,nTy),LU), qVar"state"),LN 5), TP[Call ("Undefined",CTy"instruction", LW(0,32)),qVar"state"])], TP[LX(CTy"instruction"), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc",CTy"MachineCode"), LS""]),qVar"state")])), (Bop(And,Mop(Not,bVar"b'27"), 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, bVar"b'16", Bop(And, Mop(Not, bVar"b'7"), Bop(And, Mop(Not, bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), Mop(Not, bVar"b'4")))))))))))), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[LW(14,4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy,nTy),LU), qVar"state"),LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("System",CTy"instruction", Call ("Setend",CTy"System", EQ(Mop(Cast F1,LL[bVar"b'9"]), LW(1,1)))), ITE(Mop(Not, Bop(And, EQ(Mop(Cast(FTy 3), LL[bVar"b'19", bVar"b'18", bVar"b'17"]), LW(0,3)), Bop(And, EQ(Mop(Cast(FTy 6), LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12", bVar"b'11", bVar"b'10"]), LW(0,6)), Bop(And, EQ(Mop(Cast F1, LL[bVar"b'8"]), LW(0,1)), EQ(Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), LW(0,4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"SETEND"]),qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"),LU), qVar"s"),qVar"s"]))), (Bop(And,Mop(Not,bVar"b'27"), 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'16"), Mop(Not, bVar"b'5"))))))))), Let(Var("mode",FTy 5), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("F",F1), Mop(Cast F1,LL[bVar"b'6"]), Let(Var("I",F1), Mop(Cast F1,LL[bVar"b'7"]), Let(Var("A",F1), Mop(Cast F1,LL[bVar"b'8"]), Let(Var("M",F1), Mop(Cast F1,LL[bVar"b'17"]), Let(Var("imod",FTy 2), Mop(Cast(FTy 2), LL[bVar"b'19", bVar"b'18"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[LW(14,4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("System", CTy"instruction", Call ("ChangeProcessorState", CTy"System", TP[EQ(Var("imod", FTy 2), LW(2, 2)), EQ(Var("imod", FTy 2), LW(3, 2)), EQ(Var("A", F1), LW(1, 1)), EQ(Var("I", F1), LW(1, 1)), EQ(Var("F", F1), LW(1, 1)), ITE(EQ(Var("M", F1), LW(1, 1)), Mop(Some, Var("mode", FTy 5)), LO(FTy 5))])), ITE(Bop(Or, Bop(And, Mop(Not, EQ(Var("mode", FTy 5), LW(0, 5))), EQ(Var("M", F1), LW(0, 1))), Bop(Or, EQ(Bop(Bit, Var("imod", FTy 2), LN 1), EQ(CC[Var("A", F1), Var("I", F1), Var("F", F1)], LW(0, 3))), Bop(Or, Bop(And, EQ(Var("imod", FTy 2), LW(0, 2)), EQ(Var("M", F1), LW(0, 1))), Bop(Or, EQ(Var("imod", FTy 2), LW(1, 2)), Mop(Not, EQ(Mop(Cast (FTy 7), LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12", bVar"b'11", bVar"b'10", bVar"b'9"]), LW(0, 7))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "ChangeProcessorState"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))))), (Bop(And,bVar"b'27", Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'22",Mop(Not,bVar"b'20")))), Let(Var("U",F1),Mop(Cast F1,LL[bVar"b'23"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[LW(14,4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy,nTy),LU), qVar"state"),LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("System",CTy"instruction", Call ("StoreReturnState", CTy"System", TP[EQ(Var("U",F1),LW(1,1)), EQ(Mop(Cast F1, LL[bVar"b'24"]), Var("U",F1)), EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1,1)), Mop(Cast(FTy 5), LL[bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])])), ITE(Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), LW(13,4)), Bop(And, EQ(Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), LW(0,4)), Bop(And, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(5,4)), EQ(Mop(Cast (FTy 3), LL[bVar"b'7", bVar"b'6", bVar"b'5"]), LW(0,3)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"SRS"]),qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s"),qVar"s"])))), (Bop(And,bVar"b'27", Bop(And,Mop(Not,bVar"b'25"), Bop(And,Mop(Not,bVar"b'22"),bVar"b'20"))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Let(Var("U",F1), Mop(Cast F1,LL[bVar"b'23"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[LW(14,4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy,nTy),LU), qVar"state"),LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("System", CTy"instruction", Call ("ReturnFromException", CTy"System", TP[EQ(Var("U",F1), LW(1,1)), EQ(Mop(Cast F1, LL[bVar"b'24"]), Var("U",F1)), EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1,1)), Var("Rn",F4)])), ITE(Bop(Or, EQ(Var("Rn",F4), LW(15,4)), Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), LW(0,4)), Bop(And, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(10, 4)), EQ(Mop(Cast F8, LL[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, 8)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "ReturnFromException"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"),qVar"s"]))))), (Bop(And,bVar"b'27",bVar"b'25"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[LW(14,4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy,nTy),LU), qVar"state"),LN 5)]), qVar"state"), TP[ITE(bVar"v", Call ("Branch",CTy"instruction", Call ("BranchLinkExchangeImmediate", CTy"Branch", TP[LC("InstrSet_Thumb", CTy"InstrSet"), Mop(SE F32, CC[Mop(Cast(FTy 24), 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", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), Mop(Cast F1, LL[bVar"b'24"]), LW(0,1)])])), Apply (Call ("Skip", ATy(qTy,CTy"instruction"),LU), qVar"s")),qVar"s"])), (Bop(Ge, Apply (Call("ArchVersion",ATy(qTy,nTy),LU), qVar"state"),LN 5), TP[Call("Undefined",CTy"instruction",LW(0,32)), qVar"state"])], TP[LX(CTy"instruction"), Apply (Call ("DECODE_UNPREDICTABLE",ATy(qTy,qTy), TP[Var("mc",CTy"MachineCode"),LS""]), qVar"state")])), Let(TP[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(28,EX(Var("w",F32),LN 27,LN 0,FTy 28)), ITB([(bVar"b'26", ITB([(Bop(And,Mop(Not,bVar"b'27"), Bop(And,bVar"b'25", Bop(And,bVar"b'24", Bop(And,bVar"b'23", Bop(And,bVar"b'22", Bop(And,bVar"b'21", Bop(And, bVar"b'20", Bop(And, bVar"b'7", Bop(And, bVar"b'6", Bop(And, bVar"b'5", bVar"b'4")))))))))), Let(TP[bVar"v",qVar"s"], Let(qVar"s", Rupd ("CurrentCondition", TP[qVar"state",Var("cond",F4)]), TP[Apply (Call ("ConditionPassed", ATy(qTy,bTy),LU), qVar"s"),qVar"s"]), TP[ITE(bVar"v", Call ("Undefined", CTy"instruction", Mop(Cast F32, CC[Mop(Cast(FTy 12), LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16", bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12", bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])])), Const ("NoOperation", CTy"instruction")),qVar"s"])), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'25"), Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'21", Mop(Not,bVar"b'20"))))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("B",F1), Mop(Cast F1,LL[bVar"b'22"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("cond",F4), LT]), qVar"state"), ITE(bVar"v", TP[Let(bVar"add", EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1,1)), Let(Var("m", CTy"offset1"), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast (FTy 12), LL[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"]))), ITE(EQ(Var("B", F1), LW(1, 1)), Call ("Store", CTy"instruction", Call ("StoreByteUnprivileged", CTy"Store", TP[bVar"add", LT, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])), Call ("Store", CTy"instruction", Call ("StoreUnprivileged", CTy"Store", TP[bVar"add", LT, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")]))))), ITE(Bop(Or, Bop(And, EQ(Var("B", F1), LW(1, 1)), EQ(Var("Rt", F4), LW(15, 4))), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), EQ(Var("Rn", F4), Var("Rt", F4)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreUnprivileged (immediate)"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'25"), Mop(Not,bVar"b'20"))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("B",F1), Mop(Cast F1,LL[bVar"b'22"]), Let(Var("P",F1), Mop(Cast F1, LL[bVar"b'24"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("cond", F4),LT]), qVar"state"), ITE(bVar"v", Let(bVar"wback", Bop(Or, EQ(Var("P", F1), LW(0, 1)), EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1, 1))), TP[Let(bVar"add", EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1, 1)), Let(bVar"index", EQ(Var("P", F1), LW(1, 1)), Let(Var("m", CTy"offset1"), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast (FTy 12), LL[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"]))), ITE(EQ(Var("B", F1), LW(1, 1)), Call ("Store", CTy"instruction", Call ("StoreByte", CTy"Store", TP[bVar"add", bVar"index", bVar"wback", Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])), Call ("Store", CTy"instruction", Call ("StoreWord", CTy"Store", TP[bVar"add", bVar"index", bVar"wback", Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])))))), ITE(Bop(Or, Bop(And, EQ(Var("B", F1), LW(1, 1)), EQ(Var("Rt", F4), LW(15, 4))), Bop(And, bVar"wback", Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), EQ(Var("Rn", F4), Var("Rt", F4))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Store (immediate)"]), qVar"s"), qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'25"), Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'21", bVar"b'20")))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4),LT]), qVar"state"), ITE(bVar"v", TP[Let(bVar"add", EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1,1)), Let(Var("m", CTy"offset1"), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast (FTy 12), LL[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"]))), ITE(EQ(Mop(Cast F1, LL[bVar"b'22"]), LW(1,1)), Call ("Load", CTy"instruction", Call ("LoadByteUnprivileged", CTy"Load", TP[bVar"add", LT, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])), Call ("Load", CTy"instruction", Call ("LoadUnprivileged", CTy"Load", TP[bVar"add", LT, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")]))))), ITE(Bop(Or, EQ(Var("Rt", F4), LW(15,4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), EQ(Var("Rn", F4), Var("Rt", F4)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadUnprivileged (immediate)"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'20", Bop(And,bVar"b'19", Bop(And,bVar"b'18", Bop(And,bVar"b'17", bVar"b'16")))))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("B",F1), Mop(Cast F1,LL[bVar"b'22"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4),LT]), qVar"state"), ITE(bVar"v", TP[Let(bVar"add", EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1,1)), Let(Var("imm32", F32), Mop(Cast F32, Mop(Cast (FTy 12), LL[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"])), ITE(EQ(Var("B", F1), LW(1,1)), Call ("Load", CTy"instruction", Call ("LoadByteLiteral", CTy"Load", TP[LT, bVar"add", Var("Rt", F4), Var("imm32", F32)])), Call ("Load", CTy"instruction", Call ("LoadLiteral", CTy"Load", TP[bVar"add", Var("Rt", F4), Var("imm32", F32)]))))), ITE(Bop(Or, Bop(And, EQ(Var("B", F1), LW(1,1)), EQ(Var("Rt", F4), LW(15, 4))), Mop(Not, Bop(And, EQ(Mop(Cast F1, LL[bVar"b'24"]), LW(1, 1)), EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(0, 1))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadByte (literal)"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,Mop(Not,bVar"b'25"), bVar"b'20")), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("B",F1), Mop(Cast F1,LL[bVar"b'22"]), Let(Var("P",F1), Mop(Cast F1, LL[bVar"b'24"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("cond", F4),LT]), qVar"state"), ITE(bVar"v", Let(bVar"wback", Bop(Or, EQ(Var("P", F1), LW(0, 1)), EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1, 1))), TP[Let(bVar"add", EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1, 1)), Let(bVar"index", EQ(Var("P", F1), LW(1, 1)), Let(Var("m", CTy"offset1"), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast (FTy 12), LL[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"]))), ITE(EQ(Var("B", F1), LW(1, 1)), Call ("Load", CTy"instruction", Call ("LoadByte", CTy"Load", TP[LT, bVar"add", bVar"index", bVar"wback", Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])), Call ("Load", CTy"instruction", Call ("LoadWord", CTy"Load", TP[bVar"add", bVar"index", bVar"wback", Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])))))), ITE(Bop(Or, Bop(And, EQ(Var("B", F1), LW(1, 1)), EQ(Var("Rt", F4), LW(15, 4))), Bop(And, bVar"wback", EQ(Var("Rn", F4), Var("Rt", F4)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadWord/Byte (immediate)"]), qVar"s"), qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,bVar"b'25", Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'21", Bop(And, Mop(Not,bVar"b'20"), Mop(Not,bVar"b'4")))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("B",F1), Mop(Cast F1, LL[bVar"b'22"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("cond", F4),LT]), qVar"state"), ITE(bVar"v", TP[Let(bVar"add", EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1,1)), Let(TP[Var("shift_t", CTy"SRType"), nVar"shift_n"], Call ("DecodeImmShift", PTy(CTy"SRType", nTy), TP[Mop(Cast (FTy 2), LL[bVar"b'6", bVar"b'5"]), Mop(Cast (FTy 5), LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8", bVar"b'7"])]), Let(Var("m", CTy"offset1"), Call ("register_form1", CTy"offset1", TP[Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"]), ITE(EQ(Var("B", F1), LW(1, 1)), Call ("Store", CTy"instruction", Call ("StoreByteUnprivileged", CTy"Store", TP[bVar"add", LT, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])), Call ("Store", CTy"instruction", Call ("StoreUnprivileged", CTy"Store", TP[bVar"add", LT, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])))))), ITE(Bop(Or, Bop(And, EQ(Var("B", F1), LW(1, 1)), EQ(Var("Rt", F4), LW(15, 4))), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), Var("Rt", F4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Bop(And, Bop(Lt, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 6), EQ(Var("Rm", F4), Var("Rn", F4))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreUnprivileged (regiser)"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,bVar"b'25", Bop(And,Mop(Not,bVar"b'20"), Mop(Not,bVar"b'4")))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("B",F1), Mop(Cast F1, LL[bVar"b'22"]), Let(Var("P",F1), Mop(Cast F1, LL[bVar"b'24"]), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("cond", F4), LT]), qVar"state"), ITE(bVar"v", Let(bVar"wback", Bop(Or, EQ(Var("P", F1), LW(0, 1)), EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1, 1))), TP[Let(bVar"add", EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1, 1)), Let(bVar"index", EQ(Var("P", F1), LW(1, 1)), Let(TP[Var("shift_t", CTy"SRType"), nVar"shift_n"], Call ("DecodeImmShift", PTy(CTy"SRType", nTy), TP[Mop(Cast (FTy 2), LL[bVar"b'6", bVar"b'5"]), Mop(Cast (FTy 5), LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8", bVar"b'7"])]), Let(Var("m", CTy"offset1"), Call ("register_form1", CTy"offset1", TP[Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"]), ITE(EQ(Var("B", F1), LW(1, 1)), Call ("Store", CTy"instruction", Call ("StoreByte", CTy"Store", TP[bVar"add", bVar"index", bVar"wback", Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])), Call ("Store", CTy"instruction", Call ("StoreWord", CTy"Store", TP[bVar"add", bVar"index", bVar"wback", Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")]))))))), ITE(Bop(Or, Bop(And, EQ(Var("B", F1), LW(1, 1)), EQ(Var("Rt", F4), LW(15, 4))), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Bop(Or, Bop(And, bVar"wback", Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), EQ(Var("Rn", F4), Var("Rt", F4)))), Bop(And, Bop(Lt, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 6), Bop(And, bVar"wback", EQ(Var("Rm", F4), Var("Rn", F4))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Store (regiser)"]), qVar"s"), qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,bVar"b'25", Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'21", Bop(And,bVar"b'20", Mop(Not,bVar"b'4")))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("cond",F4), LT]), qVar"state"), ITE(bVar"v", TP[Let(bVar"add", EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1,1)), Let(TP[Var("shift_t", CTy"SRType"), nVar"shift_n"], Call ("DecodeImmShift", PTy(CTy"SRType", nTy), TP[Mop(Cast (FTy 2), LL[bVar"b'6", bVar"b'5"]), Mop(Cast (FTy 5), LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8", bVar"b'7"])]), Let(Var("m", CTy"offset1"), Call ("register_form1", CTy"offset1", TP[Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"]), ITE(EQ(Mop(Cast F1, LL[bVar"b'22"]), LW(1, 1)), Call ("Load", CTy"instruction", Call ("LoadByteUnprivileged", CTy"Load", TP[bVar"add", LT, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])), Call ("Load", CTy"instruction", Call ("LoadUnprivileged", CTy"Load", TP[bVar"add", LT, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])))))), ITE(Bop(Or, EQ(Var("Rt", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), Var("Rt", F4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Bop(And, Bop(Lt, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 6), EQ(Var("Rm", F4), Var("Rn", F4))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadUnprivileged (regiser)"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,bVar"b'25", Bop(And,bVar"b'20", Mop(Not,bVar"b'4")))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("B",F1), Mop(Cast F1, LL[bVar"b'22"]), Let(Var("P",F1), Mop(Cast F1, LL[bVar"b'24"]), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("cond", F4), LT]), qVar"state"), ITE(bVar"v", Let(bVar"wback", Bop(Or, EQ(Var("P", F1), LW(0, 1)), EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1, 1))), TP[Let(bVar"add", EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1, 1)), Let(bVar"index", EQ(Var("P", F1), LW(1, 1)), Let(TP[Var("shift_t", CTy"SRType"), nVar"shift_n"], Call ("DecodeImmShift", PTy(CTy"SRType", nTy), TP[Mop(Cast (FTy 2), LL[bVar"b'6", bVar"b'5"]), Mop(Cast (FTy 5), LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8", bVar"b'7"])]), Let(Var("m", CTy"offset1"), Call ("register_form1", CTy"offset1", TP[Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"]), ITE(EQ(Var("B", F1), LW(1, 1)), Call ("Load", CTy"instruction", Call ("LoadByte", CTy"Load", TP[LT, bVar"add", bVar"index", bVar"wback", Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])), Call ("Load", CTy"instruction", Call ("LoadWord", CTy"Load", TP[bVar"add", bVar"index", bVar"wback", Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")]))))))), ITE(Bop(Or, Bop(And, EQ(Var("B", F1), LW(1, 1)), EQ(Var("Rt", F4), LW(15, 4))), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Bop(Or, Bop(And, bVar"wback", Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), EQ(Var("Rn", F4), Var("Rt", F4)))), Bop(And, Bop(Lt, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 6), Bop(And, bVar"wback", EQ(Var("Rm", F4), Var("Rn", F4))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadWord/Byte (regiser)"]), qVar"s"), qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,bVar"b'25", Bop(And,Mop(Not,bVar"b'24"), Bop(And,Mop(Not,bVar"b'23"), bVar"b'4")))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("DecodeParallelAdditionSubtraction", CTy"instruction", TP[Mop(Cast (FTy 2), LL[bVar"b'21", bVar"b'20"]), Mop(Cast (FTy 3), LL[bVar"b'7", bVar"b'6", bVar"b'5"]), Mop(Cast F1, LL[bVar"b'22"]), Var("Rd",F4), Var("Rn",F4), Var("Rm",F4)]), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15, 4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Parallel addition and subtraction"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,Mop(Not,bVar"b'27"), 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, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'5"), bVar"b'4")))))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("tb",F1), Mop(Cast F1,LL[bVar"b'6"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("cond", F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Let(TP[Var("shift_t", CTy"SRType"), nVar"shift_n"], Call ("DecodeImmShift", PTy(CTy"SRType", nTy), TP[CC[Var("tb", F1), LW(0, 1)], Mop(Cast (FTy 5), LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8", bVar"b'7"])]), Call ("Media", CTy"instruction", Call ("PackHalfword", CTy"Media", TP[Var("shift_t", CTy"SRType"), nVar"shift_n", EQ(Var("tb", F1), LW(1, 1)), Var("Rd", F4), Var("Rn", F4), Var("Rm", F4)]))), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), EQ(Var("Rm", F4), LW(15, 4)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "PackHalfword"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))), (Bop(And,Mop(Not,bVar"b'27"), 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, Mop(Not, bVar"b'20"), Bop(And, bVar"b'7", Bop(And, Mop(Not, bVar"b'6"), Bop(And, bVar"b'5", bVar"b'4")))))))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("Media", CTy"instruction", Call ("SelectBytes", CTy"Media", TP[Var("Rd", F4), Var("Rn", F4), Var("Rm", F4)])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15, 4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "SelectBytes"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,bVar"b'25", Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'23", Bop(And,bVar"b'21", Bop(And, Mop(Not, bVar"b'5"), bVar"b'4")))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("sat_imm",FTy 5), Mop(Cast(FTy 5), LL[bVar"b'20", bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Let(bVar"unsigned", EQ(Mop(Cast F1, LL[bVar"b'22"]), LW(1,1)), Let(TP[Var("shift_t", CTy"SRType"), nVar"shift_n"], Call ("DecodeImmShift", PTy(CTy"SRType", nTy), TP[CC[Mop(Cast F1, LL[bVar"b'6"]), LW(0, 1)], Mop(Cast (FTy 5), LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8", bVar"b'7"])]), Call ("Media", CTy"instruction", Call ("Saturate", CTy"Media", TP[Var("shift_t", CTy"SRType"), nVar"shift_n", ITE(bVar"unsigned", Mop(Cast nTy, Var("sat_imm", FTy 5)), Bop(Add, Mop(Cast nTy, Var("sat_imm", FTy 5)), LN 1)), bVar"unsigned", Var("Rd", F4), Var("Rn", F4)])))), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15, 4)), EQ(Var("Rn", F4), LW(15, 4))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Saturate"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,bVar"b'25", Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'23", Bop(And,bVar"b'21", Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'7"), Bop(And, Mop(Not, bVar"b'6"), Bop(And, bVar"b'5", bVar"b'4"))))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("sat_imm",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Let(bVar"unsigned", EQ(Mop(Cast F1, LL[bVar"b'22"]), LW(1,1)), Call ("Media", CTy"instruction", Call ("Saturate16", CTy"Media", TP[ITE(bVar"unsigned", Mop(Cast nTy, Var("sat_imm", F4)), Bop(Add, Mop(Cast nTy, Var("sat_imm", F4)), LN 1)), bVar"unsigned", Var("Rd", F4), Var("Rn", F4)]))), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15, 4))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Saturate16"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,bVar"b'25", Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'23", Bop(And, Mop(Not,bVar"b'21"), Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'7"), Bop(And, bVar"b'6", Bop(And, bVar"b'5", bVar"b'4"))))))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("Media", CTy"instruction", Call ("ExtendByte16", CTy"Media", TP[EQ(Mop(Cast F1, LL[bVar"b'22"]), LW(1,1)), Var("Rd",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Var("Rm",F4), Mop(Cast nTy, CC[Mop(Cast (FTy 2), LL[bVar"b'11", bVar"b'10"]), LW(0, 3)])])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15,4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Mop(Not, EQ(Mop(Cast (FTy 2), LL[bVar"b'9", bVar"b'8"]), LW(0, 2))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "ExtendByte16"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,bVar"b'25", Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'23", Bop(And,bVar"b'21", Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'7"), Bop(And, bVar"b'6", Bop(And, bVar"b'5", bVar"b'4"))))))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("Media", CTy"instruction", Call ("ExtendByte", CTy"Media", TP[EQ(Mop(Cast F1, LL[bVar"b'22"]), LW(1,1)), Var("Rd",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Var("Rm",F4), Mop(Cast nTy, CC[Mop(Cast (FTy 2), LL[bVar"b'11", bVar"b'10"]), LW(0, 3)])])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15,4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Mop(Not, EQ(Mop(Cast (FTy 2), LL[bVar"b'9", bVar"b'8"]), LW(0, 2))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "ExtendByte"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,bVar"b'25", Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'23", Bop(And,bVar"b'21", Bop(And,bVar"b'20", Bop(And, Mop(Not, bVar"b'7"), Bop(And, bVar"b'6", Bop(And, bVar"b'5", bVar"b'4"))))))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("Media", CTy"instruction", Call ("ExtendHalfword", CTy"Media", TP[EQ(Mop(Cast F1, LL[bVar"b'22"]), LW(1,1)), Var("Rd",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Var("Rm",F4), Mop(Cast nTy, CC[Mop(Cast (FTy 2), LL[bVar"b'11", bVar"b'10"]), LW(0, 3)])])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15,4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Mop(Not, EQ(Mop(Cast (FTy 2), LL[bVar"b'9", bVar"b'8"]), LW(0, 2))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "ExtendHalfword"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))), (Bop(And,Mop(Not,bVar"b'27"), 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, Mop(Not, bVar"b'7"), Bop(And, Mop(Not, bVar"b'6"), Bop(And, bVar"b'5", bVar"b'4")))))))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("Media", CTy"instruction", Call ("ByteReverse", CTy"Media", TP[Var("Rd",F4), Var("Rm",F4)])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15,4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), LW(15, 4)), EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15, 4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "ByteReverse"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))), (Bop(And,Mop(Not,bVar"b'27"), 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'7", Bop(And, Mop(Not, bVar"b'6"), Bop(And, bVar"b'5", bVar"b'4")))))))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("Media", CTy"instruction", Call ("ByteReversePackedHalfword", CTy"Media", TP[Var("Rd",F4), Var("Rm",F4)])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15,4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), LW(15, 4)), EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15, 4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "ByteReversePackedHalfword"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,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'20", Bop(And, bVar"b'7", Bop(And, Mop(Not, bVar"b'6"), Bop(And, bVar"b'5", bVar"b'4")))))))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("Media", CTy"instruction", Call ("ByteReverseSignedHalfword", CTy"Media", TP[Var("Rd",F4), Var("Rm",F4)])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15,4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), LW(15, 4)), EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15, 4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "ByteReverseSignedHalfword"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,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'20", Bop(And, Mop(Not, bVar"b'7"), Bop(And, Mop(Not, bVar"b'6"), Bop(And, bVar"b'5", bVar"b'4")))))))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("Media", CTy"instruction", Call ("ReverseBits", CTy"Media", TP[Var("Rd",F4), Var("Rm",F4)])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15,4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), LW(15, 4)), EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15, 4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "ReverseBits"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,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'7"), bVar"b'4")))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("Multiply", CTy"instruction", Call ("SignedMultiplyDual", CTy"Multiply", TP[EQ(Mop(Cast F1, LL[bVar"b'6"]), LW(1, 1)), EQ(Mop(Cast F1, LL[bVar"b'5"]), LW(1, 1)), Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"])])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), EQ(Var("Rm", F4), LW(15, 4)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "SignedMultiplyDual"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,bVar"b'25", Bop(And,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'20"), Bop(And, Mop(Not, bVar"b'7"), bVar"b'4")))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("RdLo",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("RdHi",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("cond", F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("Multiply", CTy"instruction", Call ("SignedMultiplyLongDual", CTy"Multiply", TP[EQ(Mop(Cast F1, LL[bVar"b'6"]), LW(1, 1)), EQ(Mop(Cast F1, LL[bVar"b'5"]), LW(1, 1)), Var("RdHi", F4), Var("RdLo", F4), Var("Rn", F4), Var("Rm", F4)])), ITE(Bop(Or, EQ(Var("RdLo", F4), LW(15, 4)), Bop(Or, EQ(Var("RdHi", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), EQ(Var("Rm", F4), LW(15, 4))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "SignedMultiplyLongDual"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,bVar"b'25", Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'22", Bop(And, Mop(Not, bVar"b'21"), Bop(And, bVar"b'20", Bop(And, Mop(Not, bVar"b'7"), Bop(And, Mop(Not, bVar"b'6"), bVar"b'4"))))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("Multiply", CTy"instruction", Call ("SignedMostSignificantMultiply", CTy"Multiply", TP[EQ(Mop(Cast F1, LL[bVar"b'5"]), LW(1, 1)), Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"])])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), EQ(Var("Rm", F4), LW(15, 4)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "SignedMostSignificantMultiply"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,bVar"b'25", Bop(And,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'7", Bop(And, bVar"b'6", bVar"b'4"))))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("Ra",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("cond", F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("Multiply", CTy"instruction", Call ("SignedMostSignificantMultiplySubtract", CTy"Multiply", TP[EQ(Mop(Cast F1, LL[bVar"b'5"]), LW(1, 1)), Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("Ra", F4)])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), EQ(Var("Ra", F4), LW(15, 4))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "SignedMostSignificantMultiplySubtract"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,bVar"b'25", Bop(And,bVar"b'24", Bop(And,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'7"), Bop(And, Mop(Not, bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), bVar"b'4")))))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("SIMD", CTy"instruction", Call ("UnsignedSumAbsoluteDifferences", CTy"SIMD", TP[Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"])])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), EQ(Var("Rm", F4), LW(15, 4)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "UnsignedSumAbsoluteDifferences"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,bVar"b'25", Bop(And,bVar"b'24", Bop(And,bVar"b'23", Bop(And,bVar"b'21", Bop(And,bVar"b'6", Bop(And, Mop(Not, bVar"b'5"), bVar"b'4"))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", Let(nVar"lsbit", Mop(Cast nTy, Mop(Cast(FTy 5), LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8", bVar"b'7"])), Let(nVar"widthminus1", Mop(Cast nTy, Mop(Cast (FTy 5), LL[bVar"b'20", bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"])), TP[Call ("Media", CTy"instruction", Call ("BitFieldExtract", CTy"Media", TP[EQ(Mop(Cast F1, LL[bVar"b'22"]), LW(1, 1)), Var("Rd", F4), Var("Rn", F4), nVar"lsbit", nVar"widthminus1"])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Lt, LN 31, Bop(Add, nVar"lsbit", nVar"widthminus1")))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "BitFieldExtract"]), qVar"s"), qVar"s")])), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))), (Bop(And,Mop(Not,bVar"b'27"), Bop(And,bVar"b'25", Bop(And,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'6"), Bop(And, Mop(Not, bVar"b'5"), bVar"b'4")))))))), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy,nTy), LU), qVar"state"), LN 6)]),qVar"state"), ITE(bVar"v", Let(nVar"lsbit", Mop(Cast nTy, Mop(Cast(FTy 5), LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8", bVar"b'7"])), Let(nVar"msbit", Mop(Cast nTy, Mop(Cast(FTy 5), LL[bVar"b'20", bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"])), TP[Call ("Media", CTy"instruction", Call ("BitFieldClearOrInsert", CTy"Media", TP[Var("Rd", F4), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), nVar"lsbit", nVar"msbit"])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15, 4)), Bop(Lt, nVar"msbit", nVar"lsbit")), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "BitFieldClearOrInsert"]), qVar"s"), qVar"s")])), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))), (Bop(And,bVar"b'27", Bop(And,bVar"b'25",bVar"b'24")), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4),LT]), qVar"state"), TP[ITE(bVar"v", Call ("System",CTy"instruction", Call ("SupervisorCall", CTy"System", Mop(SE F32, Mop(Cast(FTy 24), 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", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])))), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s")),qVar"s"])), (Bop(And,bVar"b'27", Bop(And,bVar"b'11", Bop(And,Mop(Not,bVar"b'10"), bVar"b'9"))), Let(TP[bVar"defined",sVar"unpred", Var("i",CTy"instruction")], Apply (Call ("DecodeVFP", ATy(qTy, PTy(bTy, PTy(sTy, CTy"instruction"))), Var("w",F32)),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), bVar"defined"]), qVar"state"), ITE(bVar"v", TP[Var("i",CTy"instruction"), ITE(Mop(Not, EQ(sVar"unpred", LS"")), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), CC[LS "DecodeVFP: ", sVar"unpred"]]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))], Apply (Call ("UndefinedARM", ATy(qTy,PTy(CTy"instruction",qTy)), Var("cond",F4)),qVar"state"))), (bVar"b'27", ITB([(Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'22", Mop(Not,bVar"b'20"))), Let(Var("registers",F16), Mop(Cast F16, LL[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"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("U",F1), Mop(Cast F1,LL[bVar"b'23"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("cond",F4), LT]), qVar"state"), ITE(bVar"v", TP[Call ("Store", CTy"instruction", Call ("StoreMultipleUserRegisters", CTy"Store", TP[EQ(Var("U", F1), LW(1, 1)), EQ(Mop(Cast F1, LL[bVar"b'24"]), Var("U", F1)), Var("Rn", F4), Var("registers", F16)])), ITE(Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, Bop(Lt, Call ("BitCount", nTy, Var("registers", F16)), LN 1), Mop(Not, EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(0, 1))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreMultipleUserRegisters"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,Mop(Not,bVar"b'25"), Bop(And,Mop(Not,bVar"b'22"), Mop(Not,bVar"b'20"))), Let(Var("registers",F16), Mop(Cast F16, LL[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"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4),LT]), qVar"state"), ITE(bVar"v", TP[Call ("Store", CTy"instruction", Call ("StoreMultiple", CTy"Store", TP[EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1,1)), EQ(Mop(Cast F1, LL[bVar"b'24"]), LW(1,1)), EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1,1)), Var("Rn",F4), Var("registers", F16)])), ITE(Bop(Or, EQ(Var("Rn", F4), LW(15,4)), Bop(Lt, Call ("BitCount", nTy, Var("registers", F16)), LN 1)), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreMultiple"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))), (Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'22", Bop(And,bVar"b'20", Mop(Not,bVar"b'15")))), Let(Var("registers",FTy 15), Mop(Cast(FTy 15), LL[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"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("U",F1), Mop(Cast F1,LL[bVar"b'23"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("cond",F4), LT]), qVar"state"), ITE(bVar"v", TP[Call ("Load", CTy"instruction", Call ("LoadMultipleUserRegisters", CTy"Load", TP[EQ(Var("U", F1), LW(1, 1)), EQ(Mop(Cast F1, LL[bVar"b'24"]), Var("U", F1)), Var("Rn", F4), Var("registers", FTy 15)])), ITE(Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, Bop(Lt, Call ("BitCount", nTy, Var("registers", FTy 15)), LN 1), Mop(Not, EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(0, 1))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadMultipleUserRegisters"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'22", Bop(And,bVar"b'20",bVar"b'15"))), Let(Var("registers",FTy 15), Mop(Cast(FTy 15), LL[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"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("U",F1), Mop(Cast F1,LL[bVar"b'23"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("cond",F4), LT]), qVar"state"), ITE(bVar"v", Let(bVar"wback", EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1,1)), TP[Call ("Load", CTy"instruction", Call ("LoadMultipleExceptionReturn", CTy"Load", TP[EQ(Var("U", F1), LW(1, 1)), EQ(Mop(Cast F1, LL[bVar"b'24"]), Var("U", F1)), bVar"wback", Var("Rn", F4), Var("registers", FTy 15)])), ITE(Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(And, bVar"wback", Bop(And, Bop(Bit, Var("registers", FTy 15), Mop(Cast nTy, Var("Rn", F4))), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 7)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadMultipleExceptionReturn"]), qVar"s"), qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,Mop(Not,bVar"b'25"), Bop(And,Mop(Not,bVar"b'22"), bVar"b'20")), Let(Var("registers",F16), Mop(Cast F16, LL[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"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4),LT]), qVar"state"), ITE(bVar"v", Let(bVar"wback", EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1,1)), TP[Call ("Load", CTy"instruction", Call ("LoadMultiple", CTy"Load", TP[EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1, 1)), EQ(Mop(Cast F1, LL[bVar"b'24"]), LW(1, 1)), bVar"wback", Var("Rn", F4), Var("registers", F16)])), ITE(Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, Bop(Lt, Call ("BitCount", nTy, Var("registers", F16)), LN 1), Bop(And, bVar"wback", Bop(And, Bop(Bit, Var("registers", F16), Mop(Cast nTy, Var("Rn", F4))), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 7))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadMultiple"]), qVar"s"), qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))), (Bop(And,bVar"b'25",Mop(Not,bVar"b'24")), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4),LT]), qVar"state"), TP[ITE(bVar"v", Call ("Branch",CTy"instruction", Call ("BranchTarget", CTy"Branch", Mop(SE F32, CC[Mop(Cast(FTy 24), 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", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), LW(0,2)]))), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s")),qVar"s"])), (Bop(And,bVar"b'25",bVar"b'24"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4),LT]), qVar"state"), TP[ITE(bVar"v", Call ("Branch",CTy"instruction", Call ("BranchLinkExchangeImmediate", CTy"Branch", TP[LC("InstrSet_ARM", CTy"InstrSet"), Mop(SE F32, CC[Mop(Cast (FTy 24), 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", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), LW(0,2)])])), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s")),qVar"s"]))], Apply (Call ("UndefinedARM", ATy(qTy,PTy(CTy"instruction",qTy)), Var("cond",F4)),qVar"state"))), (bVar"b'25", ITB([(Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,Mop(Not,bVar"b'21"), Mop(Not,bVar"b'20")))), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy),LU), qVar"state")]), qVar"state"), ITE(bVar"v", TP[Call ("Data", CTy"instruction", Call ("MoveHalfword", CTy"Data", TP[EQ(Mop(Cast F1, LL[bVar"b'22"]), LW(1,1)), Var("Rd",F4), CC[Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Mop(Cast (FTy 12), LL[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"])]])), ITE(EQ(Var("Rd",F4), LW(15,4)), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "MoveTopHalfword"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,Mop(Not,bVar"b'22"), Bop(And,bVar"b'21", Bop(And, Mop(Not,bVar"b'20"), Bop(And, Mop(Not, bVar"b'19"), Bop(And, Mop(Not, bVar"b'18"), Bop(And, Mop(Not, bVar"b'17"), Mop(Not, bVar"b'16"))))))))), Apply (Call ("DecodeHint", ATy(qTy,PTy(CTy"instruction",qTy)), TP[Var("cond",F4), Mop(Cast F8, LL[bVar"b'7",bVar"b'6", bVar"b'5",bVar"b'4", bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"])]), ITE(Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), LW(15,4)), EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(0,4)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"Hint"]),qVar"state"), qVar"state"))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'21", Mop(Not,bVar"b'20")))), Let(Var("mask",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4),LT]), qVar"state"), ITE(bVar"v", Let(TP[Var("v",F32),qVar"s"], Apply (Call ("ARMExpandImm", ATy(qTy, PTy(F32,qTy)), Mop(Cast(FTy 12), LL[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"])), ITE(Bop(Or, EQ(Var("mask", F4), LW(0,4)), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), LW(15, 4)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "MoveToSpecialFromImmediate"]), qVar"s"), qVar"s")), TP[Call ("System", CTy"instruction", Call ("MoveToSpecialFromImmediate", CTy"System", TP[EQ(Mop(Cast F1, LL[bVar"b'22"]), LW(1,1)), Var("v",F32), Var("mask", F4)])), qVar"s"]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))], Let(Var("imm12",FTy 12), Mop(Cast(FTy 12), LL[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"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("opc",F4), Mop(Cast F4, LL[bVar"b'24", bVar"b'23", bVar"b'22", bVar"b'21"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("cond",F4), LT]), qVar"state"), TP[ITE(bVar"v", Let(bVar"setflags", EQ(Mop(Cast F1, LL[bVar"b'20"]), LW(1,1)), Let(TP[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"], BL(4, Var("opc", F4)), ITE(bVar"b'3", ITB([(Bop(And, bVar"b'2", bVar"b'0"), Call ("Data", CTy"instruction", Call ("Move", CTy"Data", TP[bVar"setflags", Mop(Cast bTy, Mop(Cast F1, LL[bVar"b'1"])), Var("Rd", F4), Var("imm12", FTy 12)]))), (Mop(Not, bVar"b'2"), Call ("Data", CTy"instruction", Call ("TestCompareImmediate", CTy"Data", TP[Mop(Cast (FTy 2), LL[bVar"b'1", bVar"b'0"]), Var("Rn", F4), Var("imm12", FTy 12)])))], Call ("Data", CTy"instruction", Call ("ArithLogicImmediate", CTy"Data", TP[Var("opc", F4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("imm12", FTy 12)]))), Call ("Data", CTy"instruction", Call ("ArithLogicImmediate", CTy"Data", TP[Var("opc", F4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("imm12", FTy 12)]))))), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s")), qVar"s"]))))))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,Mop(Not,bVar"b'21"), Bop(And,Mop(Not,bVar"b'20"), Bop(And,bVar"b'9", Bop(And, Mop(Not,bVar"b'7"), Bop(And, Mop(Not,bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), Mop(Not, bVar"b'4"))))))))), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Apply (Call ("HaveVirtExt", ATy(qTy,bTy),LU), qVar"state")]),qVar"state"), ITE(bVar"v", TP[Call ("System",CTy"instruction", Call ("MoveToRegisterFromBankedOrSpecial", CTy"System", TP[EQ(Mop(Cast F1, LL[bVar"b'22"]), LW(1,1)), CC[Mop(Cast F1, LL[bVar"b'8"]), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"])], Var("Rd",F4)])), ITE(Bop(Or, EQ(Var("Rd",F4), LW(15,4)), Mop(Not, Bop(And, EQ(Mop(Cast (FTy 2), LL[bVar"b'11", bVar"b'10"]), LW(0,2)), EQ(Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), LW(0,4))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "MoveToRegisterFromBankedOrSpecial"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s"),qVar"s"])))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,Mop(Not,bVar"b'21"), Bop(And,Mop(Not,bVar"b'20"), Bop(And,Mop(Not,bVar"b'9"), Bop(And, Mop(Not,bVar"b'7"), Bop(And, Mop(Not,bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), Mop(Not, bVar"b'4"))))))))), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4),LT]), qVar"state"), ITE(bVar"v", TP[Call ("System",CTy"instruction", Call ("MoveToRegisterFromSpecial", CTy"System", TP[EQ(Mop(Cast F1, LL[bVar"b'22"]), LW(1,1)), Var("Rd",F4)])), ITE(Bop(Or, EQ(Var("Rd",F4), LW(15,4)), Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), LW(15,4)), Bop(And, EQ(Mop(Cast (FTy 2), LL[bVar"b'11", bVar"b'10"]), LW(0,2)), Bop(And, EQ(Mop(Cast F1, LL[bVar"b'8"]), LW(0, 1)), EQ(Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), LW(0, 4))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "MoveToRegisterFromSpecial"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s"),qVar"s"])))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'21", Bop(And,Mop(Not,bVar"b'20"), Bop(And,bVar"b'9", Bop(And, Mop(Not,bVar"b'7"), Bop(And, Mop(Not,bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), Mop(Not, bVar"b'4"))))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Apply (Call ("HaveVirtExt", ATy(qTy,bTy),LU), qVar"state")]),qVar"state"), ITE(bVar"v", TP[Call ("System",CTy"instruction", Call ("MoveToBankedOrSpecialRegister", CTy"System", TP[EQ(Mop(Cast F1, LL[bVar"b'22"]), LW(1,1)), CC[Mop(Cast F1, LL[bVar"b'8"]), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"])], Var("Rn",F4)])), ITE(Bop(Or, Bop(In,Var("Rn",F4), SL[LW(13,4), LW(15,4)]), Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), LW(15,4)), EQ(Mop(Cast (FTy 2), LL[bVar"b'11", bVar"b'10"]), LW(0,2))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "MoveToBankedOrSpecialRegister"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s"),qVar"s"])))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'21", Bop(And,Mop(Not,bVar"b'20"), Bop(And,Mop(Not,bVar"b'9"), Bop(And, Mop(Not,bVar"b'7"), Bop(And, Mop(Not,bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), Mop(Not, bVar"b'4"))))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("mask",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4),LT]), qVar"state"), ITE(bVar"v", TP[Call ("System", CTy"instruction", Call ("MoveToSpecialFromRegister", CTy"System", TP[EQ(Mop(Cast F1, LL[bVar"b'22"]), LW(1,1)), Var("Rn",F4), Var("mask",F4)])), ITE(Bop(Or, EQ(Var("Rn",F4), LW(15,4)), Bop(Or, EQ(Var("mask", F4), LW(0,4)), Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), LW(15, 4)), Bop(And, EQ(Mop(Cast (FTy 2), LL[bVar"b'11", bVar"b'10"]), LW(0, 2)), EQ(Mop(Cast F1, LL[bVar"b'8"]), LW(0, 1))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "MoveToSpecialFromRegister"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"),qVar"s"]))))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,Mop(Not,bVar"b'22"), Bop(And,bVar"b'21", Bop(And,Mop(Not,bVar"b'20"), Bop(And, Mop(Not,bVar"b'7"), Bop(And, Mop(Not,bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), bVar"b'4")))))))), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Mop(Not, EQ(Dest ("Architecture", CTy"Architecture", qVar"state"), LC("ARMv4", CTy"Architecture")))]), qVar"state"), ITE(bVar"v", TP[Call ("Branch",CTy"instruction", Call ("BranchExchange",CTy"Branch", Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]))), ITE(Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), LW(15,4)), Bop(And, EQ(Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), LW(15,4)), EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15,4))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"BX"]),qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"),LU), qVar"s"),qVar"s"]))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'22", Bop(And,bVar"b'21", Bop(And,Mop(Not,bVar"b'20"), Bop(And, Mop(Not,bVar"b'7"), Bop(And, Mop(Not,bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), bVar"b'4")))))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy,nTy),LU), qVar"state"),LN 5)]), qVar"state"), ITE(bVar"v", TP[Call ("Data",CTy"instruction", Call ("CountLeadingZeroes", CTy"Data", TP[Var("Rd",F4), Var("Rm",F4)])), ITE(Bop(Or, EQ(Var("Rd",F4), LW(15,4)), Bop(Or, EQ(Var("Rm",F4), LW(15,4)), Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), LW(15, 4)), EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15, 4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "CountLeadingZeroes"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"),qVar"s"]))))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,Mop(Not,bVar"b'22"), Bop(And,bVar"b'21", Bop(And,Mop(Not,bVar"b'20"), Bop(And, Mop(Not,bVar"b'7"), Bop(And, Mop(Not,bVar"b'6"), Bop(And,bVar"b'5", bVar"b'4")))))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy,nTy),LU), qVar"state"),LN 5)]), qVar"state"), ITE(bVar"v", TP[Call ("Branch",CTy"instruction", Call ("BranchLinkExchangeRegister", CTy"Branch",Var("Rm",F4))), ITE(Bop(Or, EQ(Var("Rm",F4), LW(15,4)), Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), LW(15,4)), Bop(And, EQ(Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), LW(15,4)), EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15,4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "BranchLinkExchangeRegister"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s"),qVar"s"])))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,Mop(Not,bVar"b'20"), Bop(And,Mop(Not,bVar"b'7"), Bop(And,bVar"b'6", Bop(And, Mop(Not,bVar"b'5"), bVar"b'4")))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Apply (Call ("HaveDSPSupport", ATy(qTy,bTy),LU), qVar"state")]), qVar"state"), ITE(bVar"v", TP[Call ("Media", CTy"instruction", Call ("SaturatingAddSubtract", CTy"Media", TP[Mop(Cast (FTy 2), LL[bVar"b'22", bVar"b'21"]), Var("Rd",F4), Var("Rm",F4), Var("Rn",F4)])), ITE(Bop(Or, EQ(Var("Rd",F4), LW(15,4)), Bop(Or, EQ(Var("Rn", F4), LW(15,4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(0, 4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "SaturatingAddSubtract"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,Mop(Not,bVar"b'22"), Bop(And,bVar"b'21", Bop(And,Mop(Not,bVar"b'20"), Bop(And, Mop(Not,bVar"b'7"), Bop(And,bVar"b'6", Bop(And,bVar"b'5", bVar"b'4")))))))), ITE(Bop(Ge, Apply (Call("ArchVersion",ATy(qTy,nTy),LU), qVar"state"),LN 5), TP[Call ("Hint",CTy"instruction", Call ("Breakpoint",CTy"Hint", Mop(Cast F32, CC[Mop(Cast(FTy 12), LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16", bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12", bVar"b'11", bVar"b'10", bVar"b'9",bVar"b'8"]), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1",bVar"b'0"])]))), Rupd ("CurrentCondition", TP[ITE(Mop(Not, EQ(Var("cond",F4), LW(14,4))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"Breakpoint"]), qVar"state"),qVar"state"), Var("cond",F4)])], Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4),LF]), qVar"state"), TP[ITE(bVar"v", Call ("Undefined", CTy"instruction",LW(0,32)), Const ("NoOperation", CTy"instruction")),qVar"s"]))), (Bop(And,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'20"), Bop(And, Mop(Not,bVar"b'7"), Bop(And,bVar"b'6", Bop(And,bVar"b'5", bVar"b'4")))))))), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Apply (Call ("HaveVirtExt",ATy(qTy,bTy), LU),qVar"state")]), qVar"state"), ITE(bVar"v", TP[Call ("System",CTy"instruction", Call ("HypervisorCall",CTy"System", CC[Mop(Cast(FTy 12), LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16", bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12", bVar"b'11", bVar"b'10", bVar"b'9",bVar"b'8"]), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1",bVar"b'0"])])), ITE(Mop(Not, EQ(Var("cond",F4),LW(14,4))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"HypervisorCall"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"),LU), qVar"s"),qVar"s"]))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'22", Bop(And,bVar"b'21", Bop(And,Mop(Not,bVar"b'20"), Bop(And, Mop(Not,bVar"b'7"), Bop(And,bVar"b'6", Bop(And,bVar"b'5", bVar"b'4")))))))), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Apply (Call ("HaveSecurityExt", ATy(qTy,bTy),LU), qVar"state")]),qVar"state"), ITE(bVar"v", TP[Call ("System",CTy"instruction", Call ("SecureMonitorCall", CTy"System", Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]))), ITE(Mop(Not, EQ(Mop(Cast(FTy 12), LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16", bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12", bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(0,12))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"SMC"]),qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"),LU), qVar"s"),qVar"s"]))), (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,bVar"b'7", Mop(Not,bVar"b'4"))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("Ra",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Apply (Call ("HaveDSPSupport", ATy(qTy,bTy), LU), qVar"state")]), qVar"state"), ITE(bVar"v", TP[Call ("Multiply", CTy"instruction", Call ("Signed16Multiply32Accumulate", CTy"Multiply", TP[EQ(Mop(Cast F1, LL[bVar"b'6"]), LW(1,1)), EQ(Mop(Cast F1, LL[bVar"b'5"]), LW(1,1)), Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("Ra", F4)])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15,4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), EQ(Var("Ra", F4), LW(15, 4))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Signed16Multiply32Accumulate"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,Mop(Not,bVar"b'22"), Bop(And,bVar"b'21", Bop(And,Mop(Not,bVar"b'20"), Bop(And,bVar"b'7", Bop(And, Mop(Not,bVar"b'5"), Mop(Not,bVar"b'4")))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("Ra",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Apply (Call ("HaveDSPSupport", ATy(qTy,bTy), LU), qVar"state")]), qVar"state"), ITE(bVar"v", TP[Call ("Multiply", CTy"instruction", Call ("Signed16x32Multiply32Accumulate", CTy"Multiply", TP[EQ(Mop(Cast F1, LL[bVar"b'6"]), LW(1,1)), Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("Ra", F4)])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15,4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), EQ(Var("Ra", F4), LW(15, 4))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Signed16x32Multiply32Accumulate"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,Mop(Not,bVar"b'22"), Bop(And,bVar"b'21", Bop(And,Mop(Not,bVar"b'20"), Bop(And,bVar"b'7", Bop(And,bVar"b'5", Mop(Not,bVar"b'4")))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Apply (Call ("HaveDSPSupport", ATy(qTy,bTy),LU), qVar"state")]), qVar"state"), ITE(bVar"v", TP[Call ("Multiply", CTy"instruction", Call ("Signed16x32Multiply32Result", CTy"Multiply", TP[EQ(Mop(Cast F1, LL[bVar"b'6"]), LW(1,1)), Var("Rd",F4), Var("Rn",F4), Var("Rm",F4)])), ITE(Bop(Or, EQ(Var("Rd",F4), LW(15,4)), Bop(Or, EQ(Var("Rn", F4), LW(15,4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), LW(0, 4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "Signed16x32Multiply32Result"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,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'20"), Bop(And,bVar"b'7", Mop(Not,bVar"b'4"))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("RdLo",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("RdHi",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Apply (Call ("HaveDSPSupport", ATy(qTy,bTy), LU), qVar"state")]), qVar"state"), ITE(bVar"v", TP[Call ("Multiply", CTy"instruction", Call ("Signed16Multiply64Accumulate", CTy"Multiply", TP[EQ(Mop(Cast F1, LL[bVar"b'6"]), LW(1,1)), EQ(Mop(Cast F1, LL[bVar"b'5"]), LW(1,1)), Var("RdHi", F4), Var("RdLo", F4), Var("Rn", F4), Var("Rm", F4)])), ITE(Bop(Or, EQ(Var("RdLo", F4), LW(15,4)), Bop(Or, EQ(Var("RdHi", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), EQ(Var("Rm", F4), LW(15, 4))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Signed16Multiply64Accumulate"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'22", Bop(And,bVar"b'21", Bop(And,Mop(Not,bVar"b'20"), Bop(And,bVar"b'7", Mop(Not,bVar"b'4"))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Apply (Call ("HaveDSPSupport", ATy(qTy,bTy),LU), qVar"state")]), qVar"state"), ITE(bVar"v", TP[Call ("Multiply", CTy"instruction", Call ("Signed16Multiply32Result", CTy"Multiply", TP[EQ(Mop(Cast F1, LL[bVar"b'6"]), LW(1,1)), EQ(Mop(Cast F1, LL[bVar"b'5"]), LW(1,1)), Var("Rd",F4), Var("Rn",F4), Var("Rm",F4)])), ITE(Bop(Or, EQ(Var("Rd",F4), LW(15,4)), Bop(Or, EQ(Var("Rn", F4), LW(15,4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), LW(0, 4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "Signed16Multiply32Result"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'22", Bop(And,bVar"b'21", Bop(And,Mop(Not,bVar"b'20"), Bop(And, Mop(Not,bVar"b'19"), Bop(And, Mop(Not,bVar"b'18"), Bop(And, Mop(Not, bVar"b'17"), Bop(And, Mop(Not, bVar"b'16"), Bop(And, Mop(Not, bVar"b'15"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'11"), Bop(And, Mop(Not, bVar"b'10"), Bop(And, Mop(Not, bVar"b'9"), Bop(And, Mop(Not, bVar"b'8"), Bop(And, Mop(Not, bVar"b'7"), Bop(And, bVar"b'6", Bop(And, bVar"b'5", Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", Bop(And, bVar"b'2", Bop(And, bVar"b'1", Mop(Not, bVar"b'0"))))))))))))))))))))))))), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Apply (Call ("HaveVirtExt",ATy(qTy,bTy), LU),qVar"state")]), qVar"state"), TP[ITE(bVar"v", Call ("System",CTy"instruction", Const ("ExceptionReturn",CTy"System")), Apply (Call ("Skip", ATy(qTy,CTy"instruction"),LU), qVar"s")),qVar"s"])), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,Mop(Not,bVar"b'20"), Mop(Not,bVar"b'7")))), TP[Call("Undefined",CTy"instruction",LW(0,32)), qVar"state"]), (Mop(Not,bVar"b'4"), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("opc",F4), Mop(Cast F4, LL[bVar"b'24",bVar"b'23", bVar"b'22",bVar"b'21"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4),LT]), qVar"state"), TP[ITE(bVar"v", Let(bVar"setflags", EQ(Mop(Cast F1, LL[bVar"b'20"]), LW(1,1)), Let(TP[Var("shift_t", CTy"SRType"), nVar"shift_n"], Call ("DecodeImmShift", PTy(CTy"SRType", nTy), TP[Mop(Cast (FTy 2), LL[bVar"b'6", bVar"b'5"]), Mop(Cast (FTy 5), LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8", bVar"b'7"])]), ITB([(EQ(EX(Var("opc", F4), LN 3, LN 2, FTy 2), LW(2, 2)), Call ("Data", CTy"instruction", Call ("TestCompareRegister", CTy"Data", TP[EX(Var("opc", F4), LN 1, LN 0, FTy 2), Var("Rn", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"]))), (Bop(In, Var("opc", F4), SL[LW(13, 4), LW(15, 4)]), Call ("Data", CTy"instruction", Call ("ShiftImmediate", CTy"Data", TP[Bop(Bit, Var("opc", F4), LN 1), bVar"setflags", Var("Rd", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"])))], Call ("Data", CTy"instruction", Call ("Register", CTy"Data", TP[Var("opc", F4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"]))))), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s")), qVar"s"])))))), (Bop(And,Mop(Not,bVar"b'7"),bVar"b'4"), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rs",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("opc",F4), Mop(Cast F4, LL[bVar"b'24", bVar"b'23", bVar"b'22", bVar"b'21"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("cond",F4), LT]), qVar"state"), ITE(bVar"v", TP[Let(bVar"setflags", EQ(Mop(Cast F1, LL[bVar"b'20"]), LW(1,1)), Let(Var("shift_t", CTy"SRType"), Call ("DecodeRegShift", CTy"SRType", Mop(Cast (FTy 2), LL[bVar"b'6", bVar"b'5"])), ITE(Bop(Or, EQ(Var("opc", F4), LW(13, 4)), EQ(Var("opc", F4), LW(15, 4))), Call ("Data", CTy"instruction", Call ("ShiftRegister", CTy"Data", TP[Bop(Bit, Var("opc", F4), LN 1), bVar"setflags", Var("Rd", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), Var("Rs", F4)])), Call ("Data", CTy"instruction", Call ("RegisterShiftedRegister", CTy"Data", TP[Var("opc", F4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), Var("Rs", F4)]))))), ITE(Bop(Or, Bop(And, EQ(Var("Rd", F4), LW(15, 4)), Mop(Not, EQ(EX(Var("opc", F4), LN 3, LN 2, FTy 2), LW(2, 2)))), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), EQ(Var("Rs", F4), LW(15, 4))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "RegisterShiftedRegister"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))))), (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'7", Bop(And,Mop(Not,bVar"b'6"), Bop(And, Mop(Not,bVar"b'5"), bVar"b'4")))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("Ra",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("A",F1), Mop(Cast F1,LL[bVar"b'21"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("cond",F4), LT]), qVar"state"), ITE(bVar"v", TP[Let(bVar"setflags", EQ(Mop(Cast F1, LL[bVar"b'20"]), LW(1,1)), ITE(EQ(Var("A", F1), LW(1, 1)), Call ("Multiply", CTy"instruction", Call ("MultiplyAccumulate", CTy"Multiply", TP[bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("Ra", F4)])), Call ("Multiply", CTy"instruction", Call ("Multiply32", CTy"Multiply", TP[bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4)])))), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Bop(Or, Bop(And, EQ(Var("A", F1), LW(1, 1)), EQ(Var("Ra", F4), LW(15, 4))), Bop(And, Bop(Lt, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 6), EQ(Var("Rd", F4), Var("Rn", F4))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Multiply"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))))), (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'20"), Bop(And,bVar"b'7", Bop(And, Mop(Not,bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), bVar"b'4")))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("RdLo",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("RdHi",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("Multiply", CTy"instruction", Call ("MultiplyAccumulateAccumulate", CTy"Multiply", TP[Var("RdHi", F4), Var("RdLo", F4), Var("Rn", F4), Var("Rm", F4)])), ITE(Bop(Or, EQ(Var("RdHi", F4), LW(15,4)), Bop(Or, EQ(Var("RdLo", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), EQ(Var("RdHi", F4), Var("RdLo", F4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "MultiplyAccumulateAccumulate"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))))), (Bop(And,Mop(Not,bVar"b'24"), Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'22", Bop(And,bVar"b'21", Bop(And,Mop(Not,bVar"b'20"), Bop(And,bVar"b'7", Bop(And, Mop(Not,bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), bVar"b'4")))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("Ra",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy), LU), qVar"state")]), qVar"state"), ITE(bVar"v", TP[Call ("Multiply", CTy"instruction", Call ("MultiplySubtract", CTy"Multiply", TP[Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("Ra", F4)])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15,4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), EQ(Var("Ra", F4), LW(15, 4))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "MultiplySubtract"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))))), (Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'23", Bop(And,bVar"b'7", Bop(And,Mop(Not,bVar"b'6"), Bop(And,Mop(Not,bVar"b'5"), bVar"b'4"))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("RdLo",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("RdHi",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4),LT]), qVar"state"), ITE(bVar"v", TP[Call ("Multiply", CTy"instruction", Call ("MultiplyLong", CTy"Multiply", TP[EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1,1)), EQ(Mop(Cast F1, LL[bVar"b'22"]), LW(1,1)), EQ(Mop(Cast F1, LL[bVar"b'20"]), LW(1,1)), Var("RdHi", F4), Var("RdLo", F4), Var("Rn", F4), Var("Rm", F4)])), ITE(Bop(Or, EQ(Var("RdLo", F4), LW(15,4)), Bop(Or, EQ(Var("RdHi", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Bop(Or, EQ(Var("RdHi", F4), Var("RdLo", F4)), Bop(And, Bop(Lt, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 6), Bop(Or, EQ(Var("RdHi", F4), Var("Rn", F4)), EQ(Var("RdLo", F4), Var("Rn", F4))))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "MultiplyLong"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,Mop(Not,bVar"b'21"), Bop(And,Mop(Not,bVar"b'20"), Bop(And,bVar"b'7", Bop(And, Mop(Not,bVar"b'6"), Bop(And, Mop(Not,bVar"b'5"), bVar"b'4"))))))), Let(Var("Rt2",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4),LT]), qVar"state"), ITE(bVar"v", TP[Call ("Swap", CTy"instruction", TP[EQ(Mop(Cast F1, LL[bVar"b'22"]), LW(1,1)), Var("Rt",F4), Var("Rt2",F4), Var("Rn",F4)]), ITE(Bop(Or, EQ(Var("Rt",F4), LW(15,4)), Bop(Or, EQ(Var("Rt2", F4), LW(15,4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), Var("Rt", F4)), Bop(Or, EQ(Var("Rn", F4), Var("Rt2", F4)), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(0, 4)))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"Swap"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,bVar"b'24", Bop(And,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,bVar"b'7", Bop(And, Mop(Not,bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), bVar"b'4")))))))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy,nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("Store", CTy"instruction", Call ("StoreExclusive", CTy"Store", TP[Var("Rd",F4), Var("Rt",F4), Var("Rn",F4), LW(0,32)])), ITE(Bop(Or, EQ(Var("Rd",F4), LW(15,4)), Bop(Or, EQ(Var("Rt", F4), LW(15,4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rd", F4), Var("Rn", F4)), Bop(Or, EQ(Var("Rd", F4), Var("Rt", F4)), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15, 4)))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreExclusive"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,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'7", Bop(And, Mop(Not,bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), bVar"b'4")))))))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy,nTy),LU), qVar"state"),LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("Load",CTy"instruction", Call ("LoadExclusive", CTy"Load", TP[Var("Rt",F4), Var("Rn",F4), LW(0,32)])), ITE(Bop(Or, EQ(Var("Rt",F4), LW(15,4)), Bop(Or, EQ(Var("Rn",F4), LW(15,4)), Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15, 4)), EQ(Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), LW(15, 4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadExclusive"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"),qVar"s"]))))), (Bop(And,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'20"), Bop(And,bVar"b'7", Bop(And, Mop(Not,bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), bVar"b'4")))))))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(In, Dest ("Architecture", CTy"Architecture", qVar"state"), SL[LC("ARMv6K", CTy"Architecture"), LC("ARMv7_A", CTy"Architecture"), LC("ARMv7_R", CTy"Architecture")])]), qVar"state"), ITE(bVar"v", Let(Var("Rt2",F4), Bop(Add,Var("Rt",F4), LW(1,4)), TP[Call ("Store", CTy"instruction", Call ("StoreExclusiveDoubleword", CTy"Store", TP[Var("Rd", F4), Var("Rt", F4), Var("Rt2", F4), Var("Rn", F4)])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(15,4)), Bop(Or, Bop(Bit, Var("Rt", F4), LN 0), Bop(Or, EQ(Var("Rt", F4), LW(14, 4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rd", F4), Var("Rn", F4)), Bop(Or, EQ(Var("Rd", F4), Var("Rt", F4)), Bop(Or, EQ(Var("Rd", F4), Var("Rt2", F4)), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15, 4)))))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreExclusiveDoubleword"]), qVar"s"), qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,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'7", Bop(And, Mop(Not,bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), bVar"b'4")))))))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(In, Dest ("Architecture", CTy"Architecture", qVar"state"), SL[LC("ARMv6K", CTy"Architecture"), LC("ARMv7_A", CTy"Architecture"), LC("ARMv7_R", CTy"Architecture")])]), qVar"state"), ITE(bVar"v", TP[Call ("Load",CTy"instruction", Call ("LoadExclusiveDoubleword", CTy"Load", TP[Var("Rt",F4), Bop(Add, Var("Rt",F4), LW(1,4)), Var("Rn",F4)])), ITE(Bop(Or, Bop(Bit, Var("Rt",F4), LN 0), Bop(Or, EQ(Var("Rt",F4), LW(14,4)), Bop(Or, EQ(Var("Rn", F4), LW(15,4)), Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15, 4)), EQ(Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), LW(15, 4))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadExclusiveDoubleword"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"),qVar"s"]))))), (Bop(And,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,bVar"b'7", Bop(And, Mop(Not,bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), bVar"b'4")))))))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(In, Dest ("Architecture", CTy"Architecture", qVar"state"), SL[LC("ARMv6K", CTy"Architecture"), LC("ARMv7_A", CTy"Architecture"), LC("ARMv7_R", CTy"Architecture")])]), qVar"state"), ITE(bVar"v", TP[Call ("Store", CTy"instruction", Call ("StoreExclusiveByte", CTy"Store", TP[Var("Rd",F4), Var("Rt",F4), Var("Rn",F4)])), ITE(Bop(Or, EQ(Var("Rd",F4), LW(15,4)), Bop(Or, EQ(Var("Rt", F4), LW(15,4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rd", F4), Var("Rn", F4)), Bop(Or, EQ(Var("Rd", F4), Var("Rt", F4)), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15, 4)))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreExclusiveByte"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,bVar"b'24", Bop(And,bVar"b'23", Bop(And,bVar"b'22", Bop(And,Mop(Not,bVar"b'21"), Bop(And,bVar"b'20", Bop(And,bVar"b'7", Bop(And, Mop(Not,bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), bVar"b'4")))))))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(In, Dest ("Architecture", CTy"Architecture", qVar"state"), SL[LC("ARMv6K", CTy"Architecture"), LC("ARMv7_A", CTy"Architecture"), LC("ARMv7_R", CTy"Architecture")])]), qVar"state"), ITE(bVar"v", TP[Call ("Load",CTy"instruction", Call ("LoadExclusiveByte", CTy"Load", TP[Var("Rt",F4), Var("Rn",F4)])), ITE(Bop(Or, EQ(Var("Rt",F4), LW(15,4)), Bop(Or, EQ(Var("Rn",F4), LW(15,4)), Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15, 4)), EQ(Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), LW(15, 4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadExclusiveByte"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"),qVar"s"]))))), (Bop(And,bVar"b'24", Bop(And,bVar"b'23", Bop(And,bVar"b'22", Bop(And,bVar"b'21", Bop(And,Mop(Not,bVar"b'20"), Bop(And,bVar"b'7", Bop(And, Mop(Not,bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), bVar"b'4")))))))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(In, Dest ("Architecture", CTy"Architecture", qVar"state"), SL[LC("ARMv6K", CTy"Architecture"), LC("ARMv7_A", CTy"Architecture"), LC("ARMv7_R", CTy"Architecture")])]), qVar"state"), ITE(bVar"v", TP[Call ("Store", CTy"instruction", Call ("StoreExclusiveHalf", CTy"Store", TP[Var("Rd",F4), Var("Rt",F4), Var("Rn",F4)])), ITE(Bop(Or, EQ(Var("Rd",F4), LW(15,4)), Bop(Or, EQ(Var("Rt", F4), LW(15,4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rd", F4), Var("Rn", F4)), Bop(Or, EQ(Var("Rd", F4), Var("Rt", F4)), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15, 4)))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreExclusiveHalf"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,bVar"b'24", Bop(And,bVar"b'23", Bop(And,bVar"b'22", Bop(And,bVar"b'21", Bop(And,bVar"b'20", Bop(And,bVar"b'7", Bop(And, Mop(Not,bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), bVar"b'4")))))))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(In, Dest ("Architecture", CTy"Architecture", qVar"state"), SL[LC("ARMv6K", CTy"Architecture"), LC("ARMv7_A", CTy"Architecture"), LC("ARMv7_R", CTy"Architecture")])]), qVar"state"), ITE(bVar"v", TP[Call ("Load",CTy"instruction", Call ("LoadExclusiveHalf", CTy"Load", TP[Var("Rt",F4), Var("Rn",F4)])), ITE(Bop(Or, EQ(Var("Rt",F4), LW(15,4)), Bop(Or, EQ(Var("Rn",F4), LW(15,4)), Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15, 4)), EQ(Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), LW(15, 4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadExclusiveHalf"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"),qVar"s"]))))), (Bop(And,Mop(Not,bVar"b'24"), Bop(And,Mop(Not,bVar"b'22"), Bop(And,bVar"b'21", Bop(And,Mop(Not,bVar"b'20"), Bop(And,bVar"b'7", Bop(And, Mop(Not,bVar"b'6"), Bop(And,bVar"b'5", bVar"b'4"))))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy),LU), qVar"state")]), qVar"state"), ITE(bVar"v", TP[Call ("Store", CTy"instruction", Call ("StoreHalfUnprivileged", CTy"Store", TP[EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1,1)), LT, Var("Rt",F4), Var("Rn",F4), Call ("register_form2", CTy"offset2", Var("Rm",F4))])), ITE(Bop(Or, EQ(Var("Rt",F4), LW(15,4)), Bop(Or, EQ(Var("Rn", F4), LW(15,4)), Bop(Or, EQ(Var("Rn", F4), Var("Rt", F4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(0, 4))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreHalfUnprivileged"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,Mop(Not,bVar"b'22"), Bop(And,Mop(Not,bVar"b'20"), Bop(And,bVar"b'7", Bop(And,Mop(Not,bVar"b'6"), Bop(And,bVar"b'5",bVar"b'4"))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("P",F1), Mop(Cast F1,LL[bVar"b'24"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4),LT]), qVar"state"), ITE(bVar"v", Let(bVar"wback", Bop(Or, EQ(Var("P",F1), LW(0,1)), EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1,1))), TP[Call ("Store", CTy"instruction", Call ("StoreHalf", CTy"Store", TP[EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1, 1)), EQ(Var("P", F1), LW(1, 1)), bVar"wback", Var("Rt", F4), Var("Rn", F4), Call ("register_form1", CTy"offset1", TP[Var("Rm", F4), LC("SRType_LSL", CTy"SRType"), LN 0])])), ITE(Bop(Or, EQ(Var("Rt", F4), LW(15, 4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Bop(Or, Bop(And, bVar"wback", Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), EQ(Var("Rn", F4), Var("Rt", F4)))), Bop(Or, Bop(And, Bop(Lt, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 6), Bop(And, bVar"wback", EQ(Var("Rm", F4), Var("Rn", F4)))), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(0, 4))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreHalf"]), qVar"s"), qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))))), (Bop(And,Mop(Not,bVar"b'24"), Bop(And,Mop(Not,bVar"b'22"), Bop(And,bVar"b'21", Bop(And,bVar"b'20", Bop(And,bVar"b'7",bVar"b'4"))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("H",F1), Mop(Cast F1,LL[bVar"b'5"]), Let(Var("S",F1), Mop(Cast F1,LL[bVar"b'6"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("cond",F4), Bop(And, Bop(Or, Mop(Not, EQ(Var("H", F1), LW(0, 1))), EQ(Var("S", F1), LW(1, 1))), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"state"))]), qVar"state"), ITE(bVar"v", TP[Let(bVar"add", EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1,1)), Let(Var("m", CTy"offset2"), Call ("register_form2", CTy"offset2", Var("Rm", F4)), ITE(EQ(Var("H", F1), LW(1, 1)), Call ("Load", CTy"instruction", Call ("LoadHalfUnprivileged", CTy"Load", TP[EQ(Var("S", F1), LW(0, 1)), bVar"add", LT, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset2")])), Call ("Load", CTy"instruction", Call ("LoadSignedByteUnprivileged", CTy"Load", TP[bVar"add", LT, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset2")]))))), ITE(Bop(Or, EQ(Var("Rt", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), Var("Rt", F4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(0, 4))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadHalf/Byte (unprivileged)"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))))), (Bop(And,Mop(Not,bVar"b'22"), Bop(And,bVar"b'20", Bop(And,bVar"b'7",bVar"b'4"))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("H",F1), Mop(Cast F1,LL[bVar"b'5"]), Let(Var("S",F1), Mop(Cast F1,LL[bVar"b'6"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Let(Var("P",F1), Mop(Cast F1, LL[bVar"b'24"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("cond", F4), Bop(Or, Mop(Not, EQ(Var("H", F1), LW(0, 1))), EQ(Var("S", F1), LW(1, 1)))]), qVar"state"), ITE(bVar"v", Let(bVar"wback", Bop(Or, EQ(Var("P", F1), LW(0, 1)), EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1, 1))), TP[Let(bVar"index", EQ(Var("P", F1), LW(1, 1)), Let(bVar"add", EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1, 1)), Let(bVar"unsigned", EQ(Var("S", F1), LW(0, 1)), Let(Var("m", CTy"offset1"), Call ("register_form1", CTy"offset1", TP[Var("Rm", F4), LC("SRType_LSL", CTy"SRType"), LN 0]), ITE(EQ(Var("H", F1), LW(1, 1)), Call ("Load", CTy"instruction", Call ("LoadHalf", CTy"Load", TP[bVar"unsigned", bVar"add", bVar"index", bVar"wback", Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])), Call ("Load", CTy"instruction", Call ("LoadByte", CTy"Load", TP[bVar"unsigned", bVar"add", bVar"index", bVar"wback", Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")]))))))), ITE(Bop(Or, EQ(Var("Rt", F4), LW(15, 4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Bop(Or, Bop(And, Bop(Lt, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 6), Bop(And, bVar"wback", EQ(Var("Rm", F4), Var("Rn", F4)))), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(0, 4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadHalf/Byte"]), qVar"s"), qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))))), (Bop(And,Mop(Not,bVar"b'22"), Bop(And,Mop(Not,bVar"b'20"), Bop(And,bVar"b'7", Bop(And,bVar"b'6",bVar"b'4")))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("W",F1), Mop(Cast F1,LL[bVar"b'21"]), Let(Var("P",F1), Mop(Cast F1,LL[bVar"b'24"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("cond",F4), Apply (Call ("HaveDSPSupport", ATy(qTy, bTy), LU), qVar"state")]), qVar"state"), ITE(bVar"v", Let(Var("Rt2",F4), Bop(Add, Var("Rt", F4), LW(1,4)), Let(bVar"wback", Bop(Or, EQ(Var("P", F1), LW(0, 1)), EQ(Var("W", F1), LW(1, 1))), Let(bVar"store", EQ(Mop(Cast F1, LL[bVar"b'5"]), LW(1, 1)), TP[Let(bVar"index", EQ(Var("P", F1), LW(1, 1)), Let(bVar"add", EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1, 1)), Let(Var("m", CTy"offset2"), Call ("register_form2", CTy"offset2", Var("Rm", F4)), ITE(bVar"store", Call ("Store", CTy"instruction", Call ("StoreDual", CTy"Store", TP[bVar"add", bVar"index", bVar"wback", Var("Rt", F4), Var("Rt2", F4), Var("Rn", F4), Var("m", CTy"offset2")])), Call ("Load", CTy"instruction", Call ("LoadDual", CTy"Load", TP[bVar"add", bVar"index", bVar"wback", Var("Rt", F4), Var("Rt2", F4), Var("Rn", F4), Var("m", CTy"offset2")])))))), ITE(Bop(Or, Bop(Bit, Var("Rt", F4), LN 0), Bop(Or, Bop(And, EQ(Var("P", F1), LW(0, 1)), EQ(Var("W", F1), LW(1, 1))), Bop(Or, EQ(Var("Rt2", F4), LW(15, 4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Bop(Or, Bop(And, Mop(Not, bVar"store"), Bop(Or, EQ(Var("Rm", F4), Var("Rt", F4)), EQ(Var("Rm", F4), Var("Rt2", F4)))), Bop(Or, Bop(And, bVar"wback", Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rn", F4), Var("Rt", F4)), EQ(Var("Rn", F4), Var("Rt2", F4))))), Bop(Or, Bop(And, Bop(Lt, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 6), Bop(And, bVar"wback", EQ(Var("Rm", F4), Var("Rn", F4)))), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(0, 4)))))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Load/StoreDual (register)"]), qVar"s"), qVar"s")]))), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))))), (Bop(And,bVar"b'22", Bop(And,Mop(Not,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,bVar"b'7", Bop(And,bVar"b'6", Bop(And, Mop(Not, bVar"b'5"), bVar"b'4"))))))))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Apply (Call ("HaveDSPSupport", ATy(qTy,bTy),LU), qVar"state")]),qVar"state"), ITE(bVar"v", Let(Var("Rt2",F4), Bop(Add,Var("Rt",F4),LW(1,4)), TP[Call ("Load",CTy"instruction", Call ("LoadDualLiteral", CTy"Load", TP[EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1,1)), Var("Rt",F4), Var("Rt2",F4), Mop(Cast F32, CC[Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])])])), ITE(Bop(Or, Bop(Bit, Var("Rt",F4), LN 0), Bop(Or, EQ(Var("Rt2",F4), LW(15,4)), Mop(Not, Bop(And, EQ(Mop(Cast F1, LL[bVar"b'24"]), LW(1, 1)), EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(0, 1)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadDual (literal)"]), qVar"s"),qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s"),qVar"s"])))), (Bop(And,bVar"b'22", Bop(And,Mop(Not,bVar"b'20"), Bop(And,bVar"b'7", Bop(And,bVar"b'6",bVar"b'4")))), Let(Var("S",F1),Mop(Cast F1,LL[bVar"b'5"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("W",F1), Mop(Cast F1,LL[bVar"b'21"]), Let(Var("P",F1), Mop(Cast F1,LL[bVar"b'24"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("cond",F4), Apply (Call ("HaveDSPSupport", ATy(qTy, bTy), LU), qVar"state")]), qVar"state"), ITE(bVar"v", Let(Var("Rt2",F4), Bop(Add, Var("Rt", F4), LW(1,4)), Let(bVar"wback", Bop(Or, EQ(Var("P", F1), LW(0, 1)), EQ(Var("W", F1), LW(1, 1))), TP[Let(bVar"index", EQ(Var("P", F1), LW(1, 1)), Let(bVar"add", EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1, 1)), Let(Var("m", CTy"offset2"), Call ("immediate_form2", CTy"offset2", Mop(Cast F32, CC[Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])])), ITE(EQ(Var("S", F1), LW(1, 1)), Call ("Store", CTy"instruction", Call ("StoreDual", CTy"Store", TP[bVar"add", bVar"index", bVar"wback", Var("Rt", F4), Var("Rt2", F4), Var("Rn", F4), Var("m", CTy"offset2")])), Call ("Load", CTy"instruction", Call ("LoadDual", CTy"Load", TP[bVar"add", bVar"index", bVar"wback", Var("Rt", F4), Var("Rt2", F4), Var("Rn", F4), Var("m", CTy"offset2")])))))), ITE(Bop(Or, Bop(Bit, Var("Rt", F4), LN 0), Bop(Or, Bop(And, EQ(Var("P", F1), LW(0, 1)), EQ(Var("W", F1), LW(1, 1))), Bop(Or, Bop(And, bVar"wback", Bop(Or, Bop(And, EQ(Var("S", F1), LW(1, 1)), EQ(Var("Rn", F4), LW(15, 4))), Bop(Or, EQ(Var("Rn", F4), Var("Rt", F4)), EQ(Var("Rn", F4), Var("Rt2", F4))))), EQ(Var("Rt2", F4), LW(15, 4))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Load/StoreDual (immediate)"]), qVar"s"), qVar"s")])), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))))), (Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'22", Bop(And,bVar"b'21", Bop(And,bVar"b'20", Bop(And,bVar"b'7",bVar"b'4"))))), Let(Var("H",F1),Mop(Cast F1,LL[bVar"b'5"]), Let(Var("S",F1), Mop(Cast F1,LL[bVar"b'6"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(And, Bop(Or, Mop(Not, EQ(Var("H", F1), LW(0, 1))), EQ(Var("S", F1), LW(1,1))), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"state"))]), qVar"state"), ITE(bVar"v", TP[Let(bVar"add", EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1,1)), Let(Var("m", CTy"offset2"), Call ("immediate_form2", CTy"offset2", Mop(Cast F32, CC[Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])])), ITE(EQ(Var("H", F1), LW(1, 1)), Call ("Load", CTy"instruction", Call ("LoadHalfUnprivileged", CTy"Load", TP[EQ(Var("S", F1), LW(0, 1)), bVar"add", LT, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset2")])), Call ("Load", CTy"instruction", Call ("LoadSignedByteUnprivileged", CTy"Load", TP[bVar"add", LT, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset2")]))))), ITE(Bop(Or, EQ(Var("Rt", F4), LW(15,4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), EQ(Var("Rn", F4), Var("Rt", F4)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadHalf/Byte (unprivileged)"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))))), (Bop(And,bVar"b'22", 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,bVar"b'7", bVar"b'4"))))))), Let(Var("H",F1),Mop(Cast F1,LL[bVar"b'5"]), Let(Var("S",F1), Mop(Cast F1,LL[bVar"b'6"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Or, Mop(Not, EQ(Var("H",F1), LW(0,1))), EQ(Var("S",F1), LW(1,1)))]), qVar"state"), ITE(bVar"v", TP[Let(bVar"add", EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1,1)), Let(bVar"unsigned", EQ(Var("S",F1), LW(0,1)), Let(Var("imm32", F32), Mop(Cast F32, CC[Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])]), ITE(EQ(Var("H", F1), LW(1, 1)), Call ("Load", CTy"instruction", Call ("LoadHalfLiteral", CTy"Load", TP[bVar"unsigned", bVar"add", Var("Rt", F4), Var("imm32", F32)])), Call ("Load", CTy"instruction", Call ("LoadByteLiteral", CTy"Load", TP[bVar"unsigned", bVar"add", Var("Rt", F4), Var("imm32", F32)])))))), ITE(Bop(Or, EQ(Var("Rt",F4), LW(15,4)), Mop(Not, Bop(And, EQ(Mop(Cast F1, LL[bVar"b'24"]), LW(1, 1)), EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(0, 1))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadHalf/Byte (literal)"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,bVar"b'22", Bop(And,bVar"b'20", Bop(And,bVar"b'7",bVar"b'4"))), Let(Var("H",F1),Mop(Cast F1,LL[bVar"b'5"]), Let(Var("S",F1), Mop(Cast F1,LL[bVar"b'6"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("P",F1), Mop(Cast F1,LL[bVar"b'24"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("cond",F4), Bop(Or, Mop(Not, EQ(Var("H", F1), LW(0, 1))), EQ(Var("S", F1), LW(1,1)))]), qVar"state"), ITE(bVar"v", Let(bVar"wback", Bop(Or, EQ(Var("P", F1), LW(0,1)), EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1,1))), TP[Let(bVar"index", EQ(Var("P", F1), LW(1, 1)), Let(bVar"add", EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1, 1)), Let(bVar"unsigned", EQ(Var("S", F1), LW(0, 1)), Let(Var("m", CTy"offset1"), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, CC[Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])])), ITE(EQ(Var("H", F1), LW(1, 1)), Call ("Load", CTy"instruction", Call ("LoadHalf", CTy"Load", TP[bVar"unsigned", bVar"add", bVar"index", bVar"wback", Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])), Call ("Load", CTy"instruction", Call ("LoadByte", CTy"Load", TP[bVar"unsigned", bVar"add", bVar"index", bVar"wback", Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")]))))))), ITE(Bop(Or, EQ(Var("Rt", F4), LW(15, 4)), Bop(And, bVar"wback", EQ(Var("Rn", F4), Var("Rt", F4)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadHalf/Byte (immediate)"]), qVar"s"), qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))))), (Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'22", Bop(And,bVar"b'21", Bop(And,Mop(Not,bVar"b'20"), Bop(And,bVar"b'7", Bop(And, Mop(Not,bVar"b'6"), Bop(And,bVar"b'5", bVar"b'4"))))))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy),LU), qVar"state")]), qVar"state"), ITE(bVar"v", TP[Call ("Store", CTy"instruction", Call ("StoreHalfUnprivileged", CTy"Store", TP[EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1,1)),LT, Var("Rt",F4), Var("Rn",F4), Call ("immediate_form2", CTy"offset2", Mop(Cast F32, CC[Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])]))])), ITE(Bop(Or, EQ(Var("Rt",F4), LW(15,4)), Bop(Or, EQ(Var("Rn",F4), LW(15,4)), EQ(Var("Rn",F4), Var("Rt",F4)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreHalf (immediate)"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"),qVar"s"]))))), (Bop(And,bVar"b'22", Bop(And,Mop(Not,bVar"b'20"), Bop(And,bVar"b'7", Bop(And,Mop(Not,bVar"b'6"), Bop(And,bVar"b'5",bVar"b'4"))))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14",bVar"b'13", bVar"b'12"]), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("P",F1), Mop(Cast F1,LL[bVar"b'24"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("cond",F4),LT]), qVar"state"), ITE(bVar"v", Let(bVar"wback", Bop(Or, EQ(Var("P",F1), LW(0,1)), EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1,1))), TP[Call ("Store", CTy"instruction", Call ("StoreHalf", CTy"Store", TP[EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1,1)), EQ(Var("P", F1), LW(1,1)), bVar"wback", Var("Rt", F4), Var("Rn", F4), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, CC[Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])]))])), ITE(Bop(Or, EQ(Var("Rt", F4), LW(15,4)), Bop(And, bVar"wback", Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), EQ(Var("Rn", F4), Var("Rt", F4))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreHalf (immediate)"]), qVar"s"), qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))))], Apply (Call ("UndefinedARM", ATy(qTy,PTy(CTy"instruction",qTy)), Var("cond",F4)),qVar"state")))))))) ; val DecodeThumb_def = Def ("DecodeThumb",Var("h",F16), Close (qVar"state", Let(Var("mc",CTy"MachineCode"), Call("Thumb",CTy"MachineCode",Var("h",F16)), Let(TP[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(16,Var("h",F16)), ITB([(bVar"b'13", ITB([(bVar"b'15", ITB([(Bop(And,Mop(Not,bVar"b'14"), Mop(Not,bVar"b'12")), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), TP[ITE(bVar"v", Call ("Data",CTy"instruction", Call ("ArithLogicImmediate", CTy"Data", TP[LW(4,4),LF, Mop(Cast F4, Mop(Cast (FTy 3), LL[bVar"b'10", bVar"b'9", bVar"b'8"])), ITE(EQ(Mop(Cast F1, LL[bVar"b'11"]), LW(1,1)), LW(13,4), LW(15,4)), CC[LW(15,4), Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])]])), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s")),qVar"s"]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'12", Bop(And,Mop(Not,bVar"b'11"), Bop(And,Mop(Not,bVar"b'10"), Bop(And, Mop(Not,bVar"b'9"), Mop(Not,bVar"b'8")))))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), TP[ITE(bVar"v", Call ("Data",CTy"instruction", Call ("ArithLogicImmediate", CTy"Data", TP[ITE(EQ(Mop(Cast F1, LL[bVar"b'7"]), LW(1,1)), LW(2,4), LW(4,4)),LF, LW(13,4),LW(13,4), CC[LW(30,5), Mop(Cast(FTy 7), LL[bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])]])), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s")),qVar"s"]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'12", Bop(And,Mop(Not,bVar"b'10"), bVar"b'8"))), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[LW(14,4), Apply (Call ("HaveThumb2", ATy(qTy,bTy),LU), qVar"state")]),qVar"state"), ITE(bVar"v", TP[Call ("Branch",CTy"instruction", Call ("CompareBranch", CTy"Branch", TP[EQ(Mop(Cast F1, LL[bVar"b'11"]), LW(1,1)), Mop(Cast F4, Mop(Cast(FTy 3), LL[bVar"b'2", bVar"b'1", bVar"b'0"])), Mop(Cast F32, CC[Mop(Cast F1, LL[bVar"b'9"]), Mop(Cast(FTy 5), LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3"]), LW(0,1)])])), ITE(Apply (Call ("InITBlock", ATy(qTy,bTy),LU), qVar"s"), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"CompareBranch"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s"),qVar"s"]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'12", Bop(And,Mop(Not,bVar"b'11"), Bop(And,Mop(Not,bVar"b'10"), Bop(And,bVar"b'9", Bop(And, Mop(Not,bVar"b'8"), Mop(Not,bVar"b'6"))))))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy,nTy),LU), qVar"s"),LN 6)]), qVar"s"), TP[ITE(bVar"v", Call ("Media", CTy"instruction", Call ("ExtendHalfword", CTy"Media", TP[EQ(Mop(Cast F1, LL[bVar"b'7"]), LW(1,1)), Mop(Cast F4, Mop(Cast (FTy 3), LL[bVar"b'2", bVar"b'1", bVar"b'0"])), LW(15,4), Mop(Cast F4, Mop(Cast (FTy 3), LL[bVar"b'5", bVar"b'4", bVar"b'3"])), LN 0])), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s")),qVar"s"]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'12", Bop(And,Mop(Not,bVar"b'11"), Bop(And,Mop(Not,bVar"b'10"), Bop(And,bVar"b'9", Bop(And, Mop(Not,bVar"b'8"), bVar"b'6")))))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy,nTy),LU), qVar"s"),LN 6)]), qVar"s"), TP[ITE(bVar"v", Call ("Media", CTy"instruction", Call ("ExtendByte", CTy"Media", TP[EQ(Mop(Cast F1, LL[bVar"b'7"]), LW(1,1)), Mop(Cast F4, Mop(Cast (FTy 3), LL[bVar"b'2", bVar"b'1", bVar"b'0"])), LW(15,4), Mop(Cast F4, Mop(Cast (FTy 3), LL[bVar"b'5", bVar"b'4", bVar"b'3"])), LN 0])), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s")),qVar"s"]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'12", Bop(And,Mop(Not,bVar"b'11"), Bop(And,bVar"b'10", Mop(Not,bVar"b'9"))))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), ITE(bVar"v", Let(Var("registers",F16), CC[LW(0,1), Mop(Cast F1, LL[bVar"b'8"]), LW(0,6), Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])], TP[Call ("Store", CTy"instruction", Call ("StoreMultiple", CTy"Store", TP[LF,LT,LT, LW(13,4), Var("registers", F16)])), ITE(Bop(Lt, Call ("BitCount", nTy, Var("registers", F16)), LN 1), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreMultiple"]), qVar"s"),qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"),qVar"s"])))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'12", Bop(And,Mop(Not,bVar"b'11"), Bop(And,bVar"b'10", Bop(And,bVar"b'9", Bop(And, Mop(Not,bVar"b'8"), Bop(And, Mop(Not, bVar"b'7"), Bop(And, bVar"b'6", Mop(Not, bVar"b'5"))))))))), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[LW(14,4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy,nTy),LU), qVar"state"),LN 6)]), qVar"state"), ITE(bVar"v", TP[Call ("System",CTy"instruction", Call ("Setend",CTy"System", EQ(Mop(Cast F1, LL[bVar"b'3"]), LW(1,1)))), ITE(Bop(Or, Apply (Call ("InITBlock", ATy(qTy,bTy),LU), qVar"s"), Mop(Not, Bop(And, EQ(Mop(Cast F1, LL[bVar"b'4"]), LW(1,1)), EQ(Mop(Cast (FTy 3), LL[bVar"b'2", bVar"b'1", bVar"b'0"]), LW(0,3))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"Setend"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s"),qVar"s"]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'12", Bop(And,Mop(Not,bVar"b'11"), Bop(And,bVar"b'10", Bop(And,bVar"b'9", Bop(And, Mop(Not,bVar"b'8"), Bop(And, Mop(Not, bVar"b'7"), Bop(And, bVar"b'6", bVar"b'5")))))))), Let(Var("F",F1), Mop(Cast F1,LL[bVar"b'0"]), Let(Var("I",F1), Mop(Cast F1,LL[bVar"b'1"]), Let(Var("A",F1), Mop(Cast F1,LL[bVar"b'2"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[LW(14,4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"state"), LN 6)]), qVar"state"), ITE(bVar"v", TP[Let(bVar"enable", EQ(Mop(Cast F1, LL[bVar"b'4"]), LW(0,1)), Call ("System", CTy"instruction", Call ("ChangeProcessorState", CTy"System", TP[bVar"enable", Mop(Not, bVar"enable"), EQ(Var("A", F1), LW(1, 1)), EQ(Var("I", F1), LW(1, 1)), EQ(Var("F", F1), LW(1, 1)), LO(FTy 5)]))), ITE(Bop(Or, EQ(CC[Var("A", F1), Var("I", F1), Var("F", F1)], LW(0,3)), Bop(Or, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s"), Mop(Not, EQ(Mop(Cast F1, LL[bVar"b'3"]), LW(0, 1))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "ChangeProcessorState"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'12", Bop(And,bVar"b'11", Bop(And,Mop(Not,bVar"b'10"), Bop(And,bVar"b'9", Mop(Not,bVar"b'8")))))), Let(Var("Rd",FTy 3), Mop(Cast(FTy 3), LL[bVar"b'2",bVar"b'1",bVar"b'0"]), Let(Var("Rm",FTy 3), Mop(Cast(FTy 3), LL[bVar"b'5",bVar"b'4", bVar"b'3"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 6)]), qVar"s"), TP[ITE(bVar"v", CS(Mop(Cast(FTy 2), LL[bVar"b'7", bVar"b'6"]), [(LW(0,2), Call ("Media", CTy"instruction", Call ("ByteReverse", CTy"Media", TP[Mop(Cast F4, Var("Rd", FTy 3)), Mop(Cast F4, Var("Rm", FTy 3))]))), (LW(1,2), Call ("Media", CTy"instruction", Call ("ByteReversePackedHalfword", CTy"Media", TP[Mop(Cast F4, Var("Rd", FTy 3)), Mop(Cast F4, Var("Rm", FTy 3))]))), (LW(3,2), Call ("Media", CTy"instruction", Call ("ByteReverseSignedHalfword", CTy"Media", TP[Mop(Cast F4, Var("Rd", FTy 3)), Mop(Cast F4, Var("Rm", FTy 3))]))), (AVar(FTy 2), Call ("Undefined", CTy"instruction", LW(0,32)))]), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s")), qVar"s"]))))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'12", Bop(And,bVar"b'11", Bop(And,bVar"b'10", Mop(Not,bVar"b'9"))))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), ITE(bVar"v", Let(Var("registers",F16), CC[Mop(Cast F1, LL[bVar"b'8"]), LW(0,7), Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])], TP[Call ("Load", CTy"instruction", Call ("LoadMultiple", CTy"Load", TP[LT,LF,LT, LW(13,4), Var("registers", F16)])), ITE(Bop(Or, Bop(Lt, Call ("BitCount", nTy, Var("registers", F16)), LN 1), Bop(And, Bop(Bit, Var("registers", F16), LN 15), Bop(And, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy, bTy), LU), qVar"s"))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadMultiple"]), qVar"s"),qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"),qVar"s"])))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'12", Bop(And,bVar"b'11", Bop(And,bVar"b'10", Bop(And,bVar"b'9", Mop(Not,bVar"b'8")))))), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[LW(14,4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy,nTy),LU), qVar"state"),LN 5)]), qVar"state"), TP[ITE(bVar"v", Call ("Hint",CTy"instruction", Call ("Breakpoint",CTy"Hint", Mop(Cast F32, Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])))), Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s")),qVar"s"])), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'12", Bop(And,bVar"b'11", Bop(And,bVar"b'10", Bop(And,bVar"b'9", Bop(And,bVar"b'8", 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")))))))))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Apply (Call ("DecodeHint", ATy(qTy, PTy(CTy"instruction",qTy)), TP[Var("v",F4), Mop(Cast F8, Mop(Cast F4, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4"]))]), qVar"s"))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'12", Bop(And,bVar"b'11", Bop(And,bVar"b'10", Bop(And,bVar"b'9", bVar"b'8"))))), Let(Var("mask",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("firstcond",F4), Mop(Cast F4, LL[bVar"b'7",bVar"b'6", bVar"b'5",bVar"b'4"]), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[LW(14,4), Apply (Call ("HaveThumb2", ATy(qTy,bTy),LU), qVar"state")]), qVar"state"), ITE(bVar"v", TP[Call ("IfThen", CTy"instruction", TP[Var("firstcond", F4), Var("mask",F4)]), ITE(Bop(Or, EQ(Var("firstcond", F4), LW(15,4)), Bop(Or, Bop(And, EQ(Var("firstcond", F4), LW(14, 4)), Mop(Not, EQ(Call ("BitCount", nTy, Var("mask", F4)), LN 1))), Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s"))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"IfThen"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))), (Bop(And,bVar"b'14", Bop(And,Mop(Not,bVar"b'12"), Mop(Not,bVar"b'11"))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), ITE(bVar"v", TP[Call ("Branch", CTy"instruction", Call ("BranchTarget", CTy"Branch", Mop(SE F32, CC[Mop(Cast (FTy 11), LL[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,1)]))), ITE(Bop(And, Apply (Call ("InITBlock", ATy(qTy,bTy), LU),qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy, bTy), LU), qVar"s"))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "BranchTarget"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"),qVar"s"]))))], Apply (Call ("UndefinedThumb", ATy(qTy,PTy(CTy"instruction",qTy)),LU), qVar"state"))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,Mop(Not,bVar"b'12"), Mop(Not,bVar"b'11"))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition",ATy(qTy,PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), TP[ITE(bVar"v", Call ("Data",CTy"instruction", Call ("Move",CTy"Data", TP[Mop(Not, Apply (Call ("InITBlock", ATy(qTy,bTy), LU),qVar"s")), LF, Mop(Cast F4, Mop(Cast(FTy 3), LL[bVar"b'10", bVar"b'9", bVar"b'8"])), Mop(Cast(FTy 12), Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]))])), Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s")),qVar"s"]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,Mop(Not,bVar"b'12"),bVar"b'11")), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition",ATy(qTy,PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), TP[ITE(bVar"v", Call ("Data",CTy"instruction", Call ("TestCompareImmediate", CTy"Data", TP[LW(2,2), Mop(Cast F4, Mop(Cast(FTy 3), LL[bVar"b'10", bVar"b'9", bVar"b'8"])), Mop(Cast(FTy 12), Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]))])), Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s")),qVar"s"]))), (Bop(And,Mop(Not,bVar"b'14"),bVar"b'12"), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition",ATy(qTy,PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), ITE(bVar"v", Let(Var("d",F4), Mop(Cast F4, Mop(Cast(FTy 3), LL[bVar"b'10",bVar"b'9", bVar"b'8"])), TP[Call ("Data",CTy"instruction", Call ("ArithLogicImmediate", CTy"Data", TP[ITE(EQ(Mop(Cast F1, LL[bVar"b'11"]), LW(1,1)), LW(2,4),LW(4,4)), Mop(Not, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s")), Var("d",F4), Var("d",F4), Mop(Cast(FTy 12), Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]))])), qVar"s"]), TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s"),qVar"s"])))), (Bop(And,bVar"b'14",Mop(Not,bVar"b'12")), Let(Var("Rt",FTy 3), Mop(Cast(FTy 3), LL[bVar"b'2",bVar"b'1",bVar"b'0"]), Let(Var("Rn",FTy 3), Mop(Cast(FTy 3), LL[bVar"b'5",bVar"b'4",bVar"b'3"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]), qVar"s"), TP[ITE(bVar"v", Let(Var("m",CTy"offset1"), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, CC[Mop(Cast (FTy 5), LL[bVar"b'10", bVar"b'9", bVar"b'8", bVar"b'7", bVar"b'6"]), LW(0,2)])), ITE(EQ(Mop(Cast F1, LL[bVar"b'11"]), LW(1,1)), Call ("Load", CTy"instruction", Call ("LoadWord", CTy"Load", TP[LT,LT, LF, Mop(Cast F4, Var("Rt", FTy 3)), Mop(Cast F4, Var("Rn", FTy 3)), Var("m", CTy"offset1")])), Call ("Store", CTy"instruction", Call ("StoreWord", CTy"Store", TP[LT,LT, LF, Mop(Cast F4, Var("Rt", FTy 3)), Mop(Cast F4, Var("Rn", FTy 3)), Var("m", CTy"offset1")])))), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s")), qVar"s"]))))), (Bop(And,bVar"b'14",bVar"b'12"), Let(Var("Rt",FTy 3), Mop(Cast(FTy 3), LL[bVar"b'2",bVar"b'1",bVar"b'0"]), Let(Var("Rn",FTy 3), Mop(Cast(FTy 3), LL[bVar"b'5",bVar"b'4",bVar"b'3"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]), qVar"s"), TP[ITE(bVar"v", Let(Var("m",CTy"offset1"), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast (FTy 5), LL[bVar"b'10", bVar"b'9", bVar"b'8", bVar"b'7", bVar"b'6"]))), ITE(EQ(Mop(Cast F1, LL[bVar"b'11"]), LW(1,1)), Call ("Load", CTy"instruction", Call ("LoadByte", CTy"Load", TP[LT,LT, LT,LF, Mop(Cast F4, Var("Rt", FTy 3)), Mop(Cast F4, Var("Rn", FTy 3)), Var("m", CTy"offset1")])), Call ("Store", CTy"instruction", Call ("StoreByte", CTy"Store", TP[LT,LT, LF, Mop(Cast F4, Var("Rt", FTy 3)), Mop(Cast F4, Var("Rn", FTy 3)), Var("m", CTy"offset1")])))), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s")), qVar"s"])))))], Apply (Call ("UndefinedThumb", ATy(qTy,PTy(CTy"instruction",qTy)),LU), qVar"state"))), (bVar"b'15", ITB([(Bop(And,Mop(Not,bVar"b'14"),Mop(Not,bVar"b'12")), Let(Var("Rt",FTy 3), Mop(Cast(FTy 3), LL[bVar"b'2",bVar"b'1",bVar"b'0"]), Let(Var("Rn",FTy 3), Mop(Cast(FTy 3), LL[bVar"b'5",bVar"b'4",bVar"b'3"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]), qVar"s"), TP[ITE(bVar"v", Let(Var("m",CTy"offset1"), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, CC[Mop(Cast (FTy 5), LL[bVar"b'10", bVar"b'9", bVar"b'8", bVar"b'7", bVar"b'6"]), LW(0,1)])), ITE(EQ(Mop(Cast F1, LL[bVar"b'11"]), LW(1,1)), Call ("Load", CTy"instruction", Call ("LoadHalf", CTy"Load", TP[LT,LT, LT,LF, Mop(Cast F4, Var("Rt", FTy 3)), Mop(Cast F4, Var("Rn", FTy 3)), Var("m", CTy"offset1")])), Call ("Store", CTy"instruction", Call ("StoreHalf", CTy"Store", TP[LT,LT, LF, Mop(Cast F4, Var("Rt", FTy 3)), Mop(Cast F4, Var("Rn", FTy 3)), Var("m", CTy"offset1")])))), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s")), qVar"s"]))))), (Bop(And,Mop(Not,bVar"b'14"),bVar"b'12"), Let(Var("Rt",FTy 3), Mop(Cast(FTy 3), LL[bVar"b'10",bVar"b'9",bVar"b'8"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), TP[ITE(bVar"v", Let(Var("m",CTy"offset1"), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, CC[Mop(Cast F8, LL[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'11"]), LW(1,1)), Call ("Load", CTy"instruction", Call ("LoadWord", CTy"Load", TP[LT,LT,LF, Mop(Cast F4, Var("Rt", FTy 3)), LW(13,4), Var("m", CTy"offset1")])), Call ("Store", CTy"instruction", Call ("StoreWord", CTy"Store", TP[LT,LT,LF, Mop(Cast F4, Var("Rt", FTy 3)), LW(13,4), Var("m", CTy"offset1")])))), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s")),qVar"s"])))), (Bop(And,bVar"b'14", Bop(And,Mop(Not,bVar"b'12"), Mop(Not,bVar"b'11"))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition",ATy(qTy,PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), ITE(bVar"v", Let(Var("registers",F16), Mop(Cast F16, Mop(Cast F8, LL[bVar"b'7",bVar"b'6", bVar"b'5",bVar"b'4", bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"])), TP[Call ("Store",CTy"instruction", Call ("StoreMultiple", CTy"Store", TP[LT,LF,LT, Mop(Cast F4, Mop(Cast(FTy 3), LL[bVar"b'10", bVar"b'9", bVar"b'8"])), Var("registers",F16)])), ITE(Bop(Lt, Call ("BitCount",nTy, Var("registers", F16)),LN 1), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreMultiple"]), qVar"s"),qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s"),qVar"s"])))), (Bop(And,bVar"b'14", Bop(And,Mop(Not,bVar"b'12"),bVar"b'11")), Let(Var("Rn",FTy 3), Mop(Cast(FTy 3), LL[bVar"b'10",bVar"b'9",bVar"b'8"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), ITE(bVar"v", Let(Var("registers",F16), Mop(Cast F16, Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])), TP[Call ("Load", CTy"instruction", Call ("LoadMultiple", CTy"Load", TP[LT,LF, Mop(Not, Bop(Bit, Var("registers", F16), Mop(Cast nTy, Var("Rn", FTy 3)))), Mop(Cast F4, Var("Rn", FTy 3)), Var("registers", F16)])), ITE(Bop(Lt, Call ("BitCount", nTy, Var("registers", F16)),LN 1), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadMultiple"]), qVar"s"),qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"),qVar"s"]))))), (Bop(And,bVar"b'14", Bop(And,bVar"b'12", Bop(And,bVar"b'11", Bop(And,bVar"b'10", Bop(And,bVar"b'9", Mop(Not,bVar"b'8")))))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition",ATy(qTy,PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), TP[ITE(bVar"v", Call ("Undefined",CTy"instruction", Mop(Cast F32, Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1",bVar"b'0"]))), Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s")),qVar"s"]))), (Bop(And,bVar"b'14", Bop(And,bVar"b'12", Bop(And,bVar"b'11", Bop(And,bVar"b'10", Bop(And,bVar"b'9",bVar"b'8"))))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition",ATy(qTy,PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), TP[ITE(bVar"v", Call ("System",CTy"instruction", Call ("SupervisorCall", CTy"System", Mop(Cast F32, Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])))), Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s")),qVar"s"]))), (Bop(And,bVar"b'14",bVar"b'12"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]),LT]), qVar"state"), ITE(bVar"v", TP[Call ("Branch",CTy"instruction", Call ("BranchTarget",CTy"Branch", Mop(SE F32, CC[Mop(Cast F8, LL[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,1)]))), ITE(Apply (Call ("InITBlock",ATy(qTy,bTy),LU), qVar"s"), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"BranchTarget"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"),LU), qVar"s"),qVar"s"])))], Apply (Call ("UndefinedThumb", ATy(qTy,PTy(CTy"instruction",qTy)),LU), qVar"state"))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'12", Bop(And,bVar"b'11",Mop(Not,bVar"b'10")))), Let(TP[Var("v",F4),qVar"s"], Apply (Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), TP[ITE(bVar"v", Call ("Data",CTy"instruction", Call ("Register",CTy"Data", TP[ITE(EQ(Mop(Cast F1, LL[bVar"b'9"]), LW(1,1)),LW(2,4), LW(4,4)), Mop(Not, Apply (Call ("InITBlock", ATy(qTy,bTy),LU), qVar"s")), Mop(Cast F4, Mop(Cast(FTy 3), LL[bVar"b'2", bVar"b'1",bVar"b'0"])), Mop(Cast F4, Mop(Cast(FTy 3), LL[bVar"b'5", bVar"b'4",bVar"b'3"])), Mop(Cast F4, Mop(Cast(FTy 3), LL[bVar"b'8", bVar"b'7",bVar"b'6"])), LC("SRType_LSL",CTy"SRType"), LN 0])), Apply (Call ("Skip",ATy(qTy,CTy"instruction"), LU),qVar"s")),qVar"s"]))), (Bop(And,Mop(Not,bVar"b'14"), Bop(And,bVar"b'12",Bop(And,bVar"b'11",bVar"b'10"))), Let(TP[Var("v",F4),qVar"s"], Apply (Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), TP[ITE(bVar"v", Call ("Data",CTy"instruction", Call ("ArithLogicImmediate",CTy"Data", TP[ITE(EQ(Mop(Cast F1, LL[bVar"b'9"]), LW(1,1)),LW(2,4), LW(4,4)), Mop(Not, Apply (Call ("InITBlock", ATy(qTy,bTy),LU), qVar"s")), Mop(Cast F4, Mop(Cast(FTy 3), LL[bVar"b'2", bVar"b'1",bVar"b'0"])), Mop(Cast F4, Mop(Cast(FTy 3), LL[bVar"b'5", bVar"b'4",bVar"b'3"])), Mop(Cast(FTy 12), Mop(Cast(FTy 3), LL[bVar"b'8", bVar"b'7",bVar"b'6"]))])), Apply (Call ("Skip",ATy(qTy,CTy"instruction"), LU),qVar"s")),qVar"s"]))), (Mop(Not,bVar"b'14"), Let(TP[Var("v",F4),qVar"s"], Apply (Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), TP[ITE(bVar"v", Let(TP[Var("shift_t",CTy"SRType"), nVar"shift_n"], Call ("DecodeImmShift", PTy(CTy"SRType",nTy), TP[Mop(Cast(FTy 2), LL[bVar"b'12",bVar"b'11"]), Mop(Cast(FTy 5), LL[bVar"b'10",bVar"b'9", bVar"b'8",bVar"b'7", bVar"b'6"])]), Call ("Data",CTy"instruction", Call ("ShiftImmediate",CTy"Data", TP[LF, Mop(Not, Apply (Call ("InITBlock", ATy(qTy,bTy),LU), qVar"s")), Mop(Cast F4, Mop(Cast(FTy 3), LL[bVar"b'2", bVar"b'1", bVar"b'0"])), Mop(Cast F4, Mop(Cast(FTy 3), LL[bVar"b'5", bVar"b'4", bVar"b'3"])), Var("shift_t",CTy"SRType"), nVar"shift_n"]))), Apply (Call ("Skip",ATy(qTy,CTy"instruction"), LU),qVar"s")),qVar"s"]))), (Bop(And,bVar"b'14", Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'11"), Mop(Not,bVar"b'10")))), Let(Var("Ry",FTy 3), Mop(Cast(FTy 3),LL[bVar"b'2",bVar"b'1",bVar"b'0"]), Let(Var("Rx",FTy 3), Mop(Cast(FTy 3), LL[bVar"b'5",bVar"b'4",bVar"b'3"]), Let(Var("opc",F4), Mop(Cast F4, LL[bVar"b'9",bVar"b'8",bVar"b'7", bVar"b'6"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), ITE(bVar"v", CS(Var("opc",F4), [(LW(0,4), Let(Var("d",F4), Mop(Cast F4, Var("Ry",FTy 3)), TP[Call ("Data", CTy"instruction", Call ("Register", CTy"Data", TP[Var("opc", F4), Mop(Not, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s")), Var("d", F4), Var("d", F4), Mop(Cast F4, Var("Rx", FTy 3)), LC("SRType_LSL", CTy"SRType"), LN 0])), qVar"s"])), (LW(1,4), Let(Var("d",F4), Mop(Cast F4, Var("Ry",FTy 3)), TP[Call ("Data", CTy"instruction", Call ("Register", CTy"Data", TP[Var("opc", F4), Mop(Not, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s")), Var("d", F4), Var("d", F4), Mop(Cast F4, Var("Rx", FTy 3)), LC("SRType_LSL", CTy"SRType"), LN 0])), qVar"s"])), (LW(5,4), Let(Var("d",F4), Mop(Cast F4, Var("Ry",FTy 3)), TP[Call ("Data", CTy"instruction", Call ("Register", CTy"Data", TP[Var("opc", F4), Mop(Not, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s")), Var("d", F4), Var("d", F4), Mop(Cast F4, Var("Rx", FTy 3)), LC("SRType_LSL", CTy"SRType"), LN 0])), qVar"s"])), (LW(6,4), Let(Var("d",F4), Mop(Cast F4, Var("Ry",FTy 3)), TP[Call ("Data", CTy"instruction", Call ("Register", CTy"Data", TP[Var("opc", F4), Mop(Not, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s")), Var("d", F4), Var("d", F4), Mop(Cast F4, Var("Rx", FTy 3)), LC("SRType_LSL", CTy"SRType"), LN 0])), qVar"s"])), (LW(12,4), Let(Var("d",F4), Mop(Cast F4, Var("Ry",FTy 3)), TP[Call ("Data", CTy"instruction", Call ("Register", CTy"Data", TP[Var("opc", F4), Mop(Not, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s")), Var("d", F4), Var("d", F4), Mop(Cast F4, Var("Rx", FTy 3)), LC("SRType_LSL", CTy"SRType"), LN 0])), qVar"s"])), (LW(14,4), Let(Var("d",F4), Mop(Cast F4, Var("Ry",FTy 3)), TP[Call ("Data", CTy"instruction", Call ("Register", CTy"Data", TP[Var("opc", F4), Mop(Not, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s")), Var("d", F4), Var("d", F4), Mop(Cast F4, Var("Rx", FTy 3)), LC("SRType_LSL", CTy"SRType"), LN 0])), qVar"s"])), (LW(2,4), Let(Var("d",F4), Mop(Cast F4, Var("Ry",FTy 3)), TP[Call ("Data", CTy"instruction", Call ("ShiftRegister", CTy"Data", TP[LF, Mop(Not, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s")), Var("d", F4), Var("d", F4), Call ("DecodeRegShift", CTy"SRType", Mop(Cast (FTy 2), Bop(Sub, Var("opc", F4), LW(2, 4)))), Mop(Cast F4, Var("Rx", FTy 3))])), qVar"s"])), (LW(3,4), Let(Var("d",F4), Mop(Cast F4, Var("Ry",FTy 3)), TP[Call ("Data", CTy"instruction", Call ("ShiftRegister", CTy"Data", TP[LF, Mop(Not, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s")), Var("d", F4), Var("d", F4), Call ("DecodeRegShift", CTy"SRType", Mop(Cast (FTy 2), Bop(Sub, Var("opc", F4), LW(2, 4)))), Mop(Cast F4, Var("Rx", FTy 3))])), qVar"s"])), (LW(4,4), Let(Var("d",F4), Mop(Cast F4, Var("Ry",FTy 3)), TP[Call ("Data", CTy"instruction", Call ("ShiftRegister", CTy"Data", TP[LF, Mop(Not, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s")), Var("d", F4), Var("d", F4), Call ("DecodeRegShift", CTy"SRType", Mop(Cast (FTy 2), Bop(Sub, Var("opc", F4), LW(2, 4)))), Mop(Cast F4, Var("Rx", FTy 3))])), qVar"s"])), (LW(7,4), Let(Var("d",F4), Mop(Cast F4, Var("Ry",FTy 3)), TP[Call ("Data", CTy"instruction", Call ("ShiftRegister", CTy"Data", TP[LF, Mop(Not, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s")), Var("d", F4), Var("d", F4), LC("SRType_ROR", CTy"SRType"), Mop(Cast F4, Var("Rx", FTy 3))])), qVar"s"])), (LW(8,4), TP[Call ("Data", CTy"instruction", Call ("TestCompareRegister", CTy"Data", TP[EX(Var("opc", F4), LN 1,LN 0, FTy 2), Mop(Cast F4, Var("Ry", FTy 3)), Mop(Cast F4, Var("Rx", FTy 3)), LC("SRType_LSL", CTy"SRType"), LN 0])), qVar"s"]), (LW(10,4), TP[Call ("Data", CTy"instruction", Call ("TestCompareRegister", CTy"Data", TP[EX(Var("opc", F4), LN 1,LN 0, FTy 2), Mop(Cast F4, Var("Ry", FTy 3)), Mop(Cast F4, Var("Rx", FTy 3)), LC("SRType_LSL", CTy"SRType"), LN 0])), qVar"s"]), (LW(11,4), TP[Call ("Data", CTy"instruction", Call ("TestCompareRegister", CTy"Data", TP[EX(Var("opc", F4), LN 1,LN 0, FTy 2), Mop(Cast F4, Var("Ry", FTy 3)), Mop(Cast F4, Var("Rx", FTy 3)), LC("SRType_LSL", CTy"SRType"), LN 0])), qVar"s"]), (LW(9,4), TP[Call ("Data", CTy"instruction", Call ("ArithLogicImmediate", CTy"Data", TP[LW(3,4), Mop(Not, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s")), Mop(Cast F4, Var("Ry", FTy 3)), Mop(Cast F4, Var("Rx", FTy 3)), LW(0,12)])), qVar"s"]), (LW(13,4), Let(Var("d",F4), Mop(Cast F4, Var("Ry",FTy 3)), Let(Var("n",F4), Mop(Cast F4, Var("Rx", FTy 3)), Let(TP[bVar"v", qVar"s"], Let(qVar"s0", ITE(Bop(And, Bop(Lt, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 6), EQ(Var("d", F4), Var("n", F4))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Multiply"]), qVar"s"), qVar"s"), TP[Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s0"), qVar"s0"]), TP[Call ("Multiply", CTy"instruction", Call ("Multiply32", CTy"Multiply", TP[Mop(Not, bVar"v"), Var("d", F4), Var("n", F4), Var("d", F4)])), qVar"s"])))), (LW(15,4), TP[Call ("Data", CTy"instruction", Call ("ShiftImmediate", CTy"Data", TP[LT, Mop(Not, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s")), Mop(Cast F4, Var("Ry", FTy 3)), Mop(Cast F4, Var("Rx", FTy 3)), LC("SRType_LSL", CTy"SRType"), LN 0])), qVar"s"])]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"),qVar"s"]))))))), (Bop(And,bVar"b'14", Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'11"), Bop(And,bVar"b'10", Bop(And,Mop(Not,bVar"b'9"), Mop(Not,bVar"b'8")))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'6",bVar"b'5",bVar"b'4",bVar"b'3"]), Let(Var("DN",F1),Mop(Cast F1,LL[bVar"b'7"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Bop(Or,Mop(Msb,Var("Rm",F4)), Bop(Or, EQ(Var("DN",F1), LW(1,1)), Apply (Call ("HaveThumb2", ATy(qTy,bTy),LU), qVar"s")))]), qVar"s"), ITE(bVar"v", Let(Var("d",F4), CC[Var("DN",F1), Mop(Cast(FTy 3), LL[bVar"b'2",bVar"b'1", bVar"b'0"])], TP[Call ("Data",CTy"instruction", Call ("Register",CTy"Data", TP[LW(4,4),LF, Var("d",F4), Var("d",F4), Var("Rm",F4), LC("SRType_LSL", CTy"SRType"), LN 0])), ITE(Bop(Or, Bop(And, EQ(Var("d",F4), LW(15,4)), EQ(Var("Rm",F4), LW(15,4))), Bop(And, EQ(Var("d",F4), LW(15,4)), Bop(And, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy, bTy), LU), qVar"s"))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"ADD"]), qVar"s"),qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s"),qVar"s"])))))), (Bop(And,bVar"b'14", Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'11"), Bop(And,bVar"b'10", Bop(And,Mop(Not,bVar"b'9"), Bop(And,bVar"b'8", Bop(And,Mop(Not,bVar"b'7"), Mop(Not,bVar"b'6")))))))), Apply (Call ("raise'exception", ATy(qTy,PTy(CTy"instruction",qTy)), Call ("UNPREDICTABLE",CTy"exception", LS"Thumb: 010001 0100 _")),qVar"state")), (Bop(And,bVar"b'14", Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'11"), Bop(And,bVar"b'10", Bop(And,Mop(Not,bVar"b'9"),bVar"b'8"))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'6",bVar"b'5",bVar"b'4",bVar"b'3"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), ITE(bVar"v", Let(Var("n",F4), CC[Mop(Cast F1,LL[bVar"b'7"]), Mop(Cast(FTy 3), LL[bVar"b'2",bVar"b'1", bVar"b'0"])], TP[Call ("Data",CTy"instruction", Call ("TestCompareRegister", CTy"Data", TP[LW(2,2),Var("n",F4), Var("Rm",F4), LC("SRType_LSL", CTy"SRType"),LN 0])), ITE(Bop(Or, Bop(And, Bop(Ult, Var("n",F4), LW(8,4)), Bop(Ult, Var("Rm",F4), LW(8,4))), Bop(Or, EQ(Var("n",F4), LW(15,4)), EQ(Var("Rm",F4), LW(15,4)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"CMP"]),qVar"s"), qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"),LU), qVar"s"),qVar"s"]))))), (Bop(And,bVar"b'14", Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'11"), Bop(And,bVar"b'10", Bop(And,bVar"b'9",Mop(Not,bVar"b'8")))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'6",bVar"b'5",bVar"b'4",bVar"b'3"]), Let(Var("D",F1),Mop(Cast F1,LL[bVar"b'7"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Bop(Or,Mop(Msb,Var("Rm",F4)), Bop(Or, EQ(Var("D",F1), LW(1,1)), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy,nTy), LU),qVar"s"), LN 6)))]),qVar"s"), ITE(bVar"v", Let(Var("d",F4), CC[Var("D",F1), Mop(Cast(FTy 3), LL[bVar"b'2",bVar"b'1", bVar"b'0"])], TP[Call ("Data",CTy"instruction", Call ("ShiftImmediate", CTy"Data", TP[LF,LF,Var("d",F4), Var("Rm",F4), LC("SRType_LSL", CTy"SRType"), LN 0])), ITE(Bop(And, EQ(Var("d",F4), LW(15,4)), Bop(And, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy, bTy), LU), qVar"s")))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"MOV"]), qVar"s"),qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s"),qVar"s"])))))), (Bop(And,bVar"b'14", Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'11"), Bop(And,bVar"b'10", Bop(And,bVar"b'9", Bop(And,bVar"b'8", Mop(Not,bVar"b'7"))))))), Let(TP[Var("v",F4),qVar"s"], Apply (Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), ITE(bVar"v", TP[Call ("Branch",CTy"instruction", Call ("BranchExchange",CTy"Branch", Mop(Cast F4, LL[bVar"b'6",bVar"b'5", bVar"b'4",bVar"b'3"]))), ITE(Bop(Or, Bop(And, Apply (Call ("InITBlock", ATy(qTy,bTy),LU), qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy,bTy),LU), qVar"s"))), Mop(Not, EQ(Mop(Cast(FTy 3), LL[bVar"b'2", bVar"b'1", bVar"b'0"]), LW(0,3)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc",CTy"MachineCode"), LS"BranchExchange"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip",ATy(qTy,CTy"instruction"), LU),qVar"s"),qVar"s"])))), (Bop(And,bVar"b'14", Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'11"), Bop(And,bVar"b'10", Bop(And,bVar"b'9", Bop(And,bVar"b'8",bVar"b'7")))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'6",bVar"b'5",bVar"b'4",bVar"b'3"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy,nTy),LU), qVar"s"),LN 5)]),qVar"s"), ITE(bVar"v", TP[Call ("Branch",CTy"instruction", Call ("BranchLinkExchangeRegister", CTy"Branch",Var("Rm",F4))), ITE(Bop(Or, EQ(Var("Rm",F4),LW(15,4)), Bop(Or, Bop(And, Apply (Call ("InITBlock", ATy(qTy,bTy), LU),qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy, bTy), LU), qVar"s"))), Mop(Not, EQ(Mop(Cast(FTy 3), LL[bVar"b'2", bVar"b'1", bVar"b'0"]), LW(0,3))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "BranchLinkExchangeRegister"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"),LU), qVar"s"),qVar"s"]))))), (Bop(And,bVar"b'14", Bop(And,Mop(Not,bVar"b'12"),bVar"b'11")), Let(TP[Var("v",F4),qVar"s"], Apply (Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), TP[ITE(bVar"v", Call ("Load",CTy"instruction", Call ("LoadLiteral",CTy"Load", TP[LT, Mop(Cast F4, Mop(Cast(FTy 3), LL[bVar"b'10", bVar"b'9",bVar"b'8"])), Mop(Cast F32, CC[Mop(Cast F8, LL[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)])])), Apply (Call ("Skip",ATy(qTy,CTy"instruction"), LU),qVar"s")),qVar"s"]))), (Bop(And,bVar"b'14",bVar"b'12"), Let(Var("Rt",FTy 3), Mop(Cast(FTy 3),LL[bVar"b'2",bVar"b'1",bVar"b'0"]), Let(Var("Rn",FTy 3), Mop(Cast(FTy 3), LL[bVar"b'5",bVar"b'4",bVar"b'3"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), TP[ITE(bVar"v", Let(Var("m",CTy"offset1"), Call ("register_form1", CTy"offset1", TP[Mop(Cast F4, Mop(Cast(FTy 3), LL[bVar"b'8", bVar"b'7", bVar"b'6"])), LC("SRType_LSL", CTy"SRType"),LN 0]), CS(Mop(Cast(FTy 3), LL[bVar"b'11", bVar"b'10", bVar"b'9"]), [(LW(0,3), Call ("Store", CTy"instruction", Call ("StoreWord", CTy"Store", TP[LT,LT,LF, Mop(Cast F4, Var("Rt", FTy 3)), Mop(Cast F4, Var("Rn", FTy 3)), Var("m", CTy"offset1")]))), (LW(1,3), Call ("Store", CTy"instruction", Call ("StoreHalf", CTy"Store", TP[LT,LT,LF, Mop(Cast F4, Var("Rt", FTy 3)), Mop(Cast F4, Var("Rn", FTy 3)), Var("m", CTy"offset1")]))), (LW(2,3), Call ("Store", CTy"instruction", Call ("StoreByte", CTy"Store", TP[LT,LT,LF, Mop(Cast F4, Var("Rt", FTy 3)), Mop(Cast F4, Var("Rn", FTy 3)), Var("m", CTy"offset1")]))), (LW(3,3), Call ("Load", CTy"instruction", Call ("LoadByte", CTy"Load", TP[LF,LT,LT,LF, Mop(Cast F4, Var("Rt", FTy 3)), Mop(Cast F4, Var("Rn", FTy 3)), Var("m", CTy"offset1")]))), (LW(4,3), Call ("Load", CTy"instruction", Call ("LoadWord", CTy"Load", TP[LT,LT,LF, Mop(Cast F4, Var("Rt", FTy 3)), Mop(Cast F4, Var("Rn", FTy 3)), Var("m", CTy"offset1")]))), (LW(5,3), Call ("Load", CTy"instruction", Call ("LoadHalf", CTy"Load", TP[LT,LT,LT,LF, Mop(Cast F4, Var("Rt", FTy 3)), Mop(Cast F4, Var("Rn", FTy 3)), Var("m", CTy"offset1")]))), (LW(6,3), Call ("Load", CTy"instruction", Call ("LoadByte", CTy"Load", TP[LT,LT,LT,LF, Mop(Cast F4, Var("Rt", FTy 3)), Mop(Cast F4, Var("Rn", FTy 3)), Var("m", CTy"offset1")]))), (LW(7,3), Call ("Load", CTy"instruction", Call ("LoadHalf", CTy"Load", TP[LF,LT,LT,LF, Mop(Cast F4, Var("Rt", FTy 3)), Mop(Cast F4, Var("Rn", FTy 3)), Var("m", CTy"offset1")])))])), Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s")),qVar"s"])))))], Apply (Call ("UndefinedThumb", ATy(qTy,PTy(CTy"instruction",qTy)),LU),qVar"state")))))) ; val DecodeThumbEE_def = Def ("DecodeThumbEE",Var("h",F16), Close (qVar"state", Let(Var("mc",CTy"MachineCode"), Call("Thumb",CTy"MachineCode",Var("h",F16)), Let(TP[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(16,Var("h",F16)), ITE(Bop(And,bVar"b'14",Mop(Not,bVar"b'13")), ITB([(Bop(And,Mop(Not,bVar"b'15"),bVar"b'12"), Let(Var("Rt",FTy 3), Mop(Cast(FTy 3), LL[bVar"b'2",bVar"b'1",bVar"b'0"]), Let(Var("Rn",FTy 3), Mop(Cast(FTy 3), LL[bVar"b'5",bVar"b'4",bVar"b'3"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), ITE(bVar"v", Let(Var("m",F4), Mop(Cast F4, Mop(Cast(FTy 3), LL[bVar"b'8", bVar"b'7", bVar"b'6"])), Let(Var("m1",CTy"offset1"), Call ("register_form1", CTy"offset1", TP[Var("m",F4), LC("SRType_LSL", CTy"SRType"), LN 1]), Let(Var("m2", CTy"offset1"), Call ("register_form1", CTy"offset1", TP[Var("m",F4), LC("SRType_LSL", CTy"SRType"), LN 2]), CS(Mop(Cast(FTy 3), LL[bVar"b'11", bVar"b'10", bVar"b'9"]), [(LW(0,3), TP[Call ("Store", CTy"instruction", Call ("StoreWord", CTy"Store", TP[LT, LT, LF, Mop(Cast F4, Var("Rt", FTy 3)), Mop(Cast F4, Var("Rn", FTy 3)), Var("m2", CTy"offset1")])), qVar"s"]), (LW(1,3), TP[Call ("Store", CTy"instruction", Call ("StoreHalf", CTy"Store", TP[LT, LT, LF, Mop(Cast F4, Var("Rt", FTy 3)), Mop(Cast F4, Var("Rn", FTy 3)), Var("m1", CTy"offset1")])), qVar"s"]), (LW(4,3), TP[Call ("Load", CTy"instruction", Call ("LoadWord", CTy"Load", TP[LT, LT, LF, Mop(Cast F4, Var("Rt", FTy 3)), Mop(Cast F4, Var("Rn", FTy 3)), Var("m2", CTy"offset1")])), qVar"s"]), (LW(5,3), TP[Call ("Load", CTy"instruction", Call ("LoadHalf", CTy"Load", TP[LT, LT, LT, LF, Mop(Cast F4, Var("Rt", FTy 3)), Mop(Cast F4, Var("Rn", FTy 3)), Var("m1", CTy"offset1")])), qVar"s"]), (LW(7,3), TP[Call ("Load", CTy"instruction", Call ("LoadHalf", CTy"Load", TP[LF, LT, LT, LF, Mop(Cast F4, Var("Rt", FTy 3)), Mop(Cast F4, Var("Rn", FTy 3)), Var("m1", CTy"offset1")])), qVar"s"]), (AVar(FTy 3), Apply (Call ("DecodeThumb", ATy(qTy, PTy(CTy"instruction", qTy)), Var("h", F16)), qVar"s"))])))), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"),qVar"s"])))))), (Bop(And,bVar"b'15", Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'11"), Bop(And,Mop(Not,bVar"b'10"), Bop(And,Mop(Not,bVar"b'9"), Mop(Not,bVar"b'8")))))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), ITE(bVar"v", TP[Call ("Branch",CTy"instruction", Call ("HandlerBranchParameter", CTy"Branch", TP[Mop(Cast F32, Mop(Cast(FTy 3), LL[bVar"b'7", bVar"b'6", bVar"b'5"])), Mop(Cast F32, CC[Mop(Cast(FTy 5), LL[bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), LW(0,5)])])), ITE(Bop(And, Apply (Call ("InITBlock", ATy(qTy,bTy),LU), qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy,bTy),LU), qVar"s"))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "HandlerBranchParameter"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"),LU), qVar"s"),qVar"s"])))), (Bop(And,bVar"b'15", Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'11"), Bop(And,Mop(Not,bVar"b'10"), Bop(And,Mop(Not,bVar"b'9"), bVar"b'8"))))), TP[Call("Undefined",CTy"instruction",LW(0,32)), qVar"state"]), (Bop(And,bVar"b'15", Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'11"), Bop(And,Mop(Not,bVar"b'10"),bVar"b'9")))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), ITE(bVar"v", TP[Call ("Branch",CTy"instruction", Call ("HandlerBranchLink", CTy"Branch", TP[EQ(Mop(Cast F1, LL[bVar"b'8"]), LW(1,1)), Mop(Cast F32, CC[Mop(Cast F8, LL[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,5)])])), ITE(Bop(And, Apply (Call ("InITBlock", ATy(qTy,bTy),LU), qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy,bTy),LU), qVar"s"))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"HandlerBranchLink"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"),LU), qVar"s"),qVar"s"])))), (Bop(And,bVar"b'15", Bop(And,Mop(Not,bVar"b'12"), Bop(And,Mop(Not,bVar"b'11"),bVar"b'10"))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), ITE(bVar"v", TP[Call ("Branch",CTy"instruction", Call ("HandlerBranchLinkParameter", CTy"Branch", TP[Mop(Cast F32, Mop(Cast(FTy 5), LL[bVar"b'9", bVar"b'8", bVar"b'7", bVar"b'6", bVar"b'5"])), Mop(Cast F32, CC[Mop(Cast(FTy 5), LL[bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), LW(0,5)])])), ITE(Bop(And, Apply (Call ("InITBlock", ATy(qTy,bTy),LU), qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy,bTy),LU), qVar"s"))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "HandlerBranchLinkParameter"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"),LU), qVar"s"),qVar"s"])))), (Bop(And,bVar"b'15", Bop(And,Mop(Not,bVar"b'12"), Bop(And,bVar"b'11", Bop(And,Mop(Not,bVar"b'10"), Mop(Not,bVar"b'9"))))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), TP[ITE(bVar"v", Call ("Load",CTy"instruction", Call ("LoadWord",CTy"Load", TP[LF,LT,LF, Mop(Cast F4, Mop(Cast(FTy 3), LL[bVar"b'2", bVar"b'1", bVar"b'0"])), Mop(Cast F4, Mop(Cast(FTy 3), LL[bVar"b'5", bVar"b'4", bVar"b'3"])), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, CC[Mop(Cast(FTy 3), LL[bVar"b'8", bVar"b'7", bVar"b'6"]), LW(0,2)]))])), Apply (Call ("Skip", ATy(qTy,CTy"instruction"),LU), qVar"s")),qVar"s"]))), (Bop(And,bVar"b'15", Bop(And,Mop(Not,bVar"b'12"), Bop(And,bVar"b'11", Bop(And,Mop(Not,bVar"b'10"), Bop(And,bVar"b'9", Mop(Not,bVar"b'8")))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'6",bVar"b'5",bVar"b'4",bVar"b'3"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), ITE(bVar"v", Let(Var("n",F4), CC[Mop(Cast F1,LL[bVar"b'7"]), Mop(Cast(FTy 3), LL[bVar"b'2",bVar"b'1", bVar"b'0"])], TP[Call ("Branch", CTy"instruction", Call ("CheckArray", CTy"Branch", TP[Var("Rm",F4), Var("n",F4)])), ITE(Bop(Or, EQ(Var("n",F4), LW(15,4)), Bop(In, Var("Rm",F4), SL[LW(13,4), LW(15,4)])), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"CheckArray"]), qVar"s"),qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s"),qVar"s"]))))), (Bop(And,bVar"b'15", Bop(And,Mop(Not,bVar"b'12"), Bop(And,bVar"b'11", Bop(And,Mop(Not,bVar"b'10"), Bop(And,bVar"b'9",bVar"b'8"))))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), TP[ITE(bVar"v", Call ("Load",CTy"instruction", Call ("LoadWord",CTy"Load", TP[LT,LT,LF, Mop(Cast F4, Mop(Cast(FTy 3), LL[bVar"b'2", bVar"b'1", bVar"b'0"])), LW(10,4), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, CC[Mop(Cast(FTy 5), LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3"]), LW(0,2)]))])), Apply (Call ("Skip", ATy(qTy,CTy"instruction"),LU), qVar"s")),qVar"s"]))), (Bop(And,bVar"b'15", Bop(And,Mop(Not,bVar"b'12"), Bop(And,bVar"b'11",bVar"b'10"))), Let(Var("Rt",FTy 3), Mop(Cast(FTy 3), LL[bVar"b'2",bVar"b'1",bVar"b'0"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4),LT]),qVar"s"), TP[ITE(bVar"v", Let(Var("m",CTy"offset1"), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, CC[Mop(Cast(FTy 6), LL[bVar"b'8", bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3"]), LW(0,2)])), ITE(EQ(Mop(Cast F1, LL[bVar"b'9"]), LW(1,1)), Call ("Store", CTy"instruction", Call ("StoreWord", CTy"Store", TP[LT,LT,LF, Mop(Cast F4, Var("Rt", FTy 3)), LW(9,4), Var("m", CTy"offset1")])), Call ("Load", CTy"instruction", Call ("LoadWord", CTy"Load", TP[LT,LT,LF, Mop(Cast F4, Var("Rt", FTy 3)), LW(9,4), Var("m", CTy"offset1")])))), Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s")),qVar"s"]))))], Apply (Call ("DecodeThumb", ATy(qTy,PTy(CTy"instruction",qTy)), Mop(Cast F16, LL[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"])), qVar"state")), Apply (Call ("DecodeThumb",ATy(qTy,PTy(CTy"instruction",qTy)), Mop(Cast F16, LL[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"])),qVar"state")))))) ; val DecodeThumb2_def = Def ("DecodeThumb2",Var("h",PTy(F16,F16)), Close (qVar"state", Let(Var("mc",CTy"MachineCode"), Call("Thumb2",CTy"MachineCode",Var("h",PTy(F16,F16))), Let(TP[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"], TP[BL(16,Mop(Fst,Var("h",PTy(F16,F16)))), BL(16,Mop(Snd,Var("h",PTy(F16,F16))))], ITB([(bVar"b'27", ITB([(bVar"b'28", ITB([(bVar"b'25", ITE(Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,bVar"b'29", Mop(Not,bVar"b'26")))), ITB([(Bop(And,Mop(Not,bVar"b'24"), Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'15", Bop(And,bVar"b'14", Bop(And, bVar"b'13", Bop(And, bVar"b'12", Bop(And, Mop(Not, bVar"b'7"), Bop(And, Mop(Not, bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), Mop(Not, bVar"b'4")))))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", TP[Call ("Data", CTy"instruction", Call ("ShiftRegister", CTy"Data", TP[LF, EQ(Mop(Cast F1, LL[bVar"b'20"]), LW(1, 1)), Var("Rd", F4), Var("Rn", F4), Call ("DecodeRegShift", CTy"SRType", Mop(Cast (FTy 2), LL[bVar"b'22", bVar"b'21"])), Var("Rm", F4)])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Shift (register)"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))), (Bop(And,Mop(Not,bVar"b'24"), Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'15", Bop(And,bVar"b'14", Bop(And, bVar"b'13", Bop(And, bVar"b'12", bVar"b'7")))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", TP[Let(TP[bVar"args0", nVar"args4"], TP[EQ(Mop(Cast F1, LL[bVar"b'20"]), LW(1, 1)), Mop(Cast nTy, CC[Mop(Cast (FTy 2), LL[bVar"b'5", bVar"b'4"]), LW(0, 3)])], CS(Mop(Cast (FTy 2), LL[bVar"b'22", bVar"b'21"]), [(LW(0, 2), Call ("Media", CTy"instruction", Call ("ExtendHalfword", CTy"Media", TP[bVar"args0", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), nVar"args4"]))), (LW(1, 2), Call ("Media", CTy"instruction", Call ("ExtendByte16", CTy"Media", TP[bVar"args0", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), nVar"args4"]))), (LW(2, 2), Call ("Media", CTy"instruction", Call ("ExtendByte", CTy"Media", TP[bVar"args0", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), nVar"args4"]))), (LW(3, 2), Call ("Undefined", CTy"instruction", LW(0, 32)))])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, EQ(Var("Rn", F4), LW(13, 4)), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, EQ(Mop(Cast F1, LL[bVar"b'6"]), LW(0, 1)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Extend (register)"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))), (Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'23", Bop(And,bVar"b'15", Bop(And,bVar"b'14", Bop(And, bVar"b'13", Bop(And, bVar"b'12", Mop(Not, bVar"b'7"))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", TP[Call ("DecodeParallelAdditionSubtraction", CTy"instruction", TP[Bop(Add, Mop(Cast (FTy 2), LL[bVar"b'5", bVar"b'4"]), LW(1, 2)), CS(Mop(Cast (FTy 3), LL[bVar"b'22", bVar"b'21", bVar"b'20"]), [(LW(1, 3), LW(0, 3)), (LW(2, 3), LW(1, 3)), (LW(6, 3), LW(2, 3)), (LW(5, 3), LW(3, 3)), (LW(0, 3), LW(4, 3)), (LW(4, 3), LW(7, 3)), (AVar (FTy 3), LW(5, 3))]), Mop(Cast F1, LL[bVar"b'6"]), Var("Rd", F4), Var("Rn", F4), Var("Rm", F4)]), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Parallel addition and subtraction"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))), (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, Mop(Not, bVar"b'20"), Bop(And, bVar"b'15", Bop(And, bVar"b'14", Bop(And, bVar"b'13", Bop(And, bVar"b'12", Bop(And, bVar"b'7", Mop(Not, bVar"b'6"))))))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", TP[Call ("Media", CTy"instruction", Call ("SaturatingAddSubtract", CTy"Media", TP[Mop(Rev, Mop(Cast (FTy 2), LL[bVar"b'5", bVar"b'4"])), Var("Rd", F4), Var("Rm", F4), Var("Rn", F4)])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "SaturatingAddSubtract"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))), (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'15", Bop(And, bVar"b'14", Bop(And, bVar"b'13", Bop(And, bVar"b'12", Bop(And, bVar"b'7", Mop(Not, bVar"b'6"))))))))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4,qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", TP[CS(Mop(Cast (FTy 2), LL[bVar"b'5", bVar"b'4"]), [(LW(0, 2), Call ("Media", CTy"instruction", Call ("ByteReverse", CTy"Media", TP[Var("Rd", F4), Var("Rm", F4)]))), (LW(1, 2), Call ("Media", CTy"instruction", Call ("ByteReversePackedHalfword", CTy"Media", TP[Var("Rd", F4), Var("Rm", F4)]))), (LW(2, 2), Call ("Media", CTy"instruction", Call ("ReverseBits", CTy"Media", TP[Var("Rd", F4), Var("Rm", F4)]))), (LW(3, 2), Call ("Media", CTy"instruction", Call ("ByteReverseSignedHalfword", CTy"Media", TP[Var("Rd", F4), Var("Rm", F4)])))]), ITE(Bop(Or, Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Var("Rm", F4))), Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Reverses"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))), (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'20"), Bop(And, bVar"b'15", Bop(And, bVar"b'14", Bop(And, bVar"b'13", Bop(And, bVar"b'12", Bop(And, bVar"b'7", Bop(And, Mop(Not, bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), Mop(Not, bVar"b'4"))))))))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", TP[Call ("Media", CTy"instruction", Call ("SelectBytes", CTy"Media", TP[Var("Rd", F4), Var("Rn", F4), Var("Rm", F4)])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "SelectBytes"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))), (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'15", Bop(And, bVar"b'14", Bop(And, bVar"b'13", Bop(And, bVar"b'12", Bop(And, bVar"b'7", Bop(And, Mop(Not, bVar"b'6"), Bop(And, Mop(Not, bVar"b'5"), Mop(Not, bVar"b'4"))))))))))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4,qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", TP[Call ("Data", CTy"instruction", Call ("CountLeadingZeroes", CTy"Data", TP[Var("Rd", F4), Var("Rm", F4)])), ITE(Bop(Or, Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Var("Rm", F4))), Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "CountLeadingZeroes"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And, Mop(Not,bVar"b'7"), Mop(Not,bVar"b'6")))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), Let(Var("Ra",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Let(TP[Var("v", F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", Let(qVar"s", ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), EQ(Var("Ra", F4), LW(13, 4))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Multiplies and absolute difference"]), qVar"s"), qVar"s"), CS(TP[Mop(Cast (FTy 3), LL[bVar"b'22", bVar"b'21", bVar"b'20"]), Var("Ra", F4), EQ(Mop(Cast F1, LL[bVar"b'5"]), LW(1, 1)), EQ(Mop(Cast F1, LL[bVar"b'4"]), LW(1, 1))], [(TP[LW(0, 3), LW(15, 4), LF, LF], TP[Call ("Multiply", CTy"instruction", Call ("Multiply32", CTy"Multiply", TP[LF, Var("Rd", F4), Var("Rn", F4), Var("Rm", F4)])), qVar"s"]), (TP[LW(0, 3), AVar F4, LF, LF], TP[Call ("Multiply", CTy"instruction", Call ("MultiplyAccumulate", CTy"Multiply", TP[LF, Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("Ra", F4)])), qVar"s"]), (TP[LW(0, 3), LW(15, 4), LF, LT], TP[LX(CTy"instruction"), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "MultiplySubtract"]), qVar"s")]), (TP[LW(0, 3), AVar F4, LF, LT], TP[Call ("Multiply", CTy"instruction", Call ("MultiplySubtract", CTy"Multiply", TP[Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("Ra", F4)])), qVar"s"]), (TP[LW(1, 3), LW(15, 4), bVar"n_high", bVar"m_high"], TP[Call ("Multiply", CTy"instruction", Call ("Signed16Multiply32Result", CTy"Multiply", TP[bVar"m_high", bVar"n_high", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4)])), qVar"s"]), (TP[LW(1, 3), AVar F4, bVar"n_high", bVar"m_high"], TP[Call ("Multiply", CTy"instruction", Call ("Signed16Multiply32Accumulate", CTy"Multiply", TP[bVar"m_high", bVar"n_high", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("Ra", F4)])), qVar"s"]), (TP[LW(2, 3), AVar F4, LF, bVar"m_swap"], TP[Call ("Multiply", CTy"instruction", Call ("SignedMultiplyDual", CTy"Multiply", TP[LF, bVar"m_swap", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("Ra", F4)])), qVar"s"]), (TP[LW(3, 3), LW(15, 4), LF, bVar"m_high"], TP[Call ("Multiply", CTy"instruction", Call ("Signed16x32Multiply32Result", CTy"Multiply", TP[bVar"m_high", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4)])), qVar"s"]), (TP[LW(3, 3), AVar F4, LF, bVar"m_high"], TP[Call ("Multiply", CTy"instruction", Call ("Signed16x32Multiply32Accumulate", CTy"Multiply", TP[bVar"m_high", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("Ra", F4)])), qVar"s"]), (TP[LW(4, 3), AVar F4, LF, bVar"m_swap"], TP[Call ("Multiply", CTy"instruction", Call ("SignedMultiplyDual", CTy"Multiply", TP[LT, bVar"m_swap", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("Ra", F4)])), qVar"s"]), (TP[LW(5, 3), AVar F4, LF, bVar"round"], TP[Call ("Multiply", CTy"instruction", Call ("SignedMostSignificantMultiply", CTy"Multiply", TP[bVar"round", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("Ra", F4)])), qVar"s"]), (TP[LW(6, 3), LW(15, 4), LF, AVar bTy], TP[LX(CTy"instruction"), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "SignedMostSignificantMultiplySubtract"]), qVar"s")]), (TP[LW(6, 3), AVar F4, LF, bVar"round"], TP[Call ("Multiply", CTy"instruction", Call ("SignedMostSignificantMultiplySubtract", CTy"Multiply", TP[bVar"round", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("Ra", F4)])), qVar"s"]), (TP[LW(7, 3), AVar F4, LF, LF], TP[Call ("SIMD", CTy"instruction", Call ("UnsignedSumAbsoluteDifferences", CTy"SIMD", TP[Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("Ra", F4)])), qVar"s"]), (AVar (PTy(FTy 3, PTy(F4, PTy(bTy, bTy)))), TP[Call ("Undefined", CTy"instruction", LW(0, 32)), qVar"s"])])), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))))), (Bop(And,bVar"b'24", Bop(And,bVar"b'23", Bop(And, Mop(Not,bVar"b'22"), Bop(And,bVar"b'20", Bop(And, bVar"b'7", Bop(And, bVar"b'6", Bop(And, bVar"b'5", bVar"b'4"))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Bop(Or, Apply (Call ("HaveVirtExt", ATy(qTy, bTy), LU), qVar"s"), EQ(Dest ("Architecture", CTy"Architecture", qVar"s"), LC("ARMv7_R", CTy"Architecture")))]), qVar"s"), ITE(bVar"v", TP[Call ("Divide", CTy"instruction", TP[EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1, 1)), Var("Rd", F4), Var("Rn", F4), Var("Rm", F4)]), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), LW(15, 4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Divide"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))), (Bop(And,bVar"b'24",bVar"b'23"), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), Let(Var("RdHi",F4), Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), Let(Var("RdLo",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Let(TP[Var("v", F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", TP[Let(TP[TP[bVar"b'6", bVar"b'5", bVar"b'4"], bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"], TP[BL(3, Mop(Cast (FTy 3), LL[bVar"b'22", bVar"b'21", bVar"b'20"])), BL(4, Mop(Cast F4, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4"]))], ITB([(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 ("Multiply", CTy"instruction", Call ("MultiplyLong", CTy"Multiply", TP[EQ(Mop(Cast F1, LL[bVar"b'6"]), LW(1, 1)), EQ(Mop(Cast F1, LL[bVar"b'5"]), LW(0, 1)), LF, Var("RdHi", F4), Var("RdLo", F4), Var("Rn", F4), Var("Rm", F4)]))), (Bop(And, bVar"b'6", Bop(And, Mop(Not, bVar"b'5"), Bop(And, Mop(Not, bVar"b'4"), Bop(And, bVar"b'3", Mop(Not, bVar"b'2"))))), Call ("Multiply", CTy"instruction", Call ("Signed16Multiply64Accumulate", CTy"Multiply", TP[EQ(Mop(Cast F1, LL[bVar"b'0"]), LW(1, 1)), EQ(Mop(Cast F1, LL[bVar"b'1"]), LW(1, 1)), Var("RdHi", F4), Var("RdLo", F4), Var("Rn", F4), Var("Rm", F4)]))), (Bop(And, bVar"b'6", Bop(And, Mop(Not, bVar"b'5"), Bop(And, bVar"b'3", Bop(And, bVar"b'2", Mop(Not, bVar"b'1"))))), Call ("Multiply", CTy"instruction", Call ("SignedMultiplyLongDual", CTy"Multiply", TP[EQ(Mop(Cast F1, LL[bVar"b'4"]), LW(1, 1)), EQ(Mop(Cast F1, LL[bVar"b'0"]), LW(1, 1)), Var("RdHi", F4), Var("RdLo", F4), Var("Rn", F4), Var("Rm", F4)]))), (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, bVar"b'2", Bop(And, bVar"b'1", Mop(Not, bVar"b'0"))))))), Call ("Multiply", CTy"instruction", Call ("MultiplyAccumulateAccumulate", CTy"Multiply", TP[Var("RdHi", F4), Var("RdLo", F4), Var("Rn", F4), Var("Rm", F4)])))], Call ("Undefined", CTy"instruction", LW(0, 32)))), ITE(Bop(Or, Bop(In, Var("RdLo", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("RdHi", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), EQ(Var("RdHi", F4), Var("RdLo", F4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Long multiply, long multiply accumulate"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))))], Apply (Call ("UndefinedThumb", ATy(qTy, PTy(CTy"instruction",qTy)), LU),qVar"state")), Apply (Call ("UndefinedThumb", ATy(qTy, PTy(CTy"instruction",qTy)), LU),qVar"state"))), (bVar"b'22", ITB([(bVar"b'20", ITE(Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,bVar"b'29", Bop(And, Mop(Not, bVar"b'26"), Bop(And, Mop(Not, bVar"b'24"), Mop(Not, bVar"b'21")))))), ITB([(Bop(And,bVar"b'19", Bop(And,bVar"b'18", Bop(And, bVar"b'17", bVar"b'16"))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", TP[Call ("Load", CTy"instruction", Call ("LoadLiteral", CTy"Load", TP[EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1, 1)), Var("Rt", F4), Mop(Cast F32, Mop(Cast (FTy 12), LL[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"]))])), ITE(Bop(And, EQ(Var("Rt", F4), LW(15, 4)), Bop(And, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy, bTy), LU), qVar"s")))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadLiteral"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))), (bVar"b'23", Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", TP[Call ("Load", CTy"instruction", Call ("LoadWord", CTy"Load", TP[LT, LT, LF, Var("Rt", F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast (FTy 12), LL[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"])))])), ITE(Bop(And, EQ(Var("Rt", F4), LW(15, 4)), Bop(And, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy, bTy), LU), qVar"s")))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadWord"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))), (Bop(And, Mop(Not,bVar"b'23"), Bop(And,bVar"b'11", Bop(And, bVar"b'10", Bop(And, bVar"b'9", Mop(Not, bVar"b'8"))))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", TP[Call ("Load", CTy"instruction", Call ("LoadUnprivileged", CTy"Load", TP[LT, LF, Var("Rt", F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])))])), ITE(Bop(In, Var("Rt", F4), SL[LW(13, 4), LW(15, 4)]), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadUnprivileged"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))), (Bop(And, Mop(Not,bVar"b'23"), bVar"b'11"), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Let(Var("W",F1), Mop(Cast F1, LL[bVar"b'8"]), Let(Var("P",F1), Mop(Cast F1, LL[bVar"b'10"]), Let(Var("Rt", F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Let(TP[Var("v", F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Bop(And, Bop(Or, EQ(Var("P", F1), LW(1, 1)), EQ(Var("W", F1), LW(1, 1))), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s"))]), qVar"s"), ITE(bVar"v", Let(bVar"wback", EQ(Var("W", F1), LW(1, 1)), TP[Call ("Load", CTy"instruction", Call ("LoadWord", CTy"Load", TP[EQ(Mop(Cast F1, LL[bVar"b'9"]), LW(1, 1)), EQ(Var("P", F1), LW(1, 1)), bVar"wback", Var("Rt", F4), Var("Rn", F4), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])))])), ITE(Bop(Or, Bop(And, bVar"wback", EQ(Var("Rn", F4), Var("Rt", F4))), Bop(And, EQ(Var("Rt", F4), LW(15, 4)), Bop(And, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy, bTy), LU), qVar"s"))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadWord"]), qVar"s"), qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))))), (Bop(And, Mop(Not,bVar"b'23"), Bop(And, Mop(Not,bVar"b'11"), Bop(And, Mop(Not, bVar"b'10"), Bop(And, Mop(Not, bVar"b'9"), Bop(And, Mop(Not, bVar"b'8"), Bop(And, Mop(Not, bVar"b'7"), Mop(Not, bVar"b'6"))))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", TP[Call ("Load", CTy"instruction", Call ("LoadWord", CTy"Load", TP[LT, LT, LF, Var("Rt", F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Call ("register_form1", CTy"offset1", TP[Var("Rm", F4), LC("SRType_LSL", CTy"SRType"), Mop(Cast nTy, Mop(Cast (FTy 2), LL[bVar"b'5", bVar"b'4"]))])])), ITE(Bop(Or, Bop(And, EQ(Var("Rt", F4), LW(15, 4)), Bop(And, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy, bTy), LU), qVar"s")))), Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)])), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadWord"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))], Apply (Call ("UndefinedThumb", ATy(qTy, PTy(CTy"instruction", qTy)),LU), qVar"state")), Apply (Call ("UndefinedThumb", ATy(qTy, PTy(CTy"instruction", qTy)),LU), qVar"state"))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,bVar"b'29", Bop(And, Mop(Not,bVar"b'26"), Bop(And, Mop(Not, bVar"b'24"), Mop(Not, bVar"b'21")))))), ITB([(Bop(And,Mop(Not,bVar"b'23"), Bop(And, Mop(Not,bVar"b'11"), Bop(And, Mop(Not,bVar"b'10"), Bop(And, Mop(Not, bVar"b'9"), Bop(And, Mop(Not, bVar"b'8"), Bop(And, Mop(Not, bVar"b'7"), Mop(Not, bVar"b'6"))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Bop(And, Mop(Not, EQ(Var("Rn", F4), LW(15, 4))), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s"))]), qVar"s"), ITE(bVar"v", TP[Call ("Store", CTy"instruction", Call ("StoreWord", CTy"Store", TP[LT, LT, LF, Var("Rt", F4), Var("Rn", F4), Call ("register_form1", CTy"offset1", TP[Var("Rm", F4), LC("SRType_LSL", CTy"SRType"), Mop(Cast nTy, Mop(Cast (FTy 2), LL[bVar"b'5", bVar"b'4"]))])])), ITE(Bop(Or, EQ(Var("Rt", F4), LW(15, 4)), Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)])), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Store (register)"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))), (Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'11", Bop(And,bVar"b'10", Bop(And,bVar"b'9", Mop(Not, bVar"b'8"))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Bop(And, Mop(Not, EQ(Var("Rn", F4), LW(15, 4))), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s"))]), qVar"s"), ITE(bVar"v", TP[Call ("Store", CTy"instruction", Call ("StoreUnprivileged", CTy"Store", TP[LT, LF, Var("Rt", F4), Var("Rn", F4), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])))])), ITE(Bop(In, Var("Rt", F4), SL[LW(13, 4), LW(15, 4)]), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreUnprivileged"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))), (Bop(And,Mop(Not,bVar"b'23"), bVar"b'11"), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Let(Var("W",F1), Mop(Cast F1, LL[bVar"b'8"]), Let(Var("P",F1), Mop(Cast F1, LL[bVar"b'10"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Let(TP[Var("v", F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Bop(And, Mop(Not, EQ(Var("Rn", F4), LW(15, 4))), Bop(And, Bop(Or, EQ(Var("P", F1), LW(1, 1)), EQ(Var("W", F1), LW(1, 1))), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")))]), qVar"s"), ITE(bVar"v", Let(bVar"wback", EQ(Var("W", F1), LW(1, 1)), TP[Call ("Store", CTy"instruction", Call ("StoreWord", CTy"Store", TP[EQ(Mop(Cast F1, LL[bVar"b'9"]), LW(1, 1)), EQ(Var("P", F1), LW(1, 1)), bVar"wback", Var("Rt", F4), Var("Rn", F4), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])))])), ITE(Bop(Or, EQ(Var("Rt", F4), LW(15, 4)), Bop(And, bVar"wback", EQ(Var("Rn", F4), Var("Rt", F4)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Store (immediate)"]), qVar"s"), qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))))), (bVar"b'23", Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Bop(And, Mop(Not, EQ(Var("Rn", F4), LW(15, 4))), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s"))]), qVar"s"), ITE(bVar"v", TP[Call ("Store", CTy"instruction", Call ("StoreWord", CTy"Store", TP[LT, LT, LF, Var("Rt", F4), Var("Rn", F4), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast (FTy 12), LL[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"])))])), ITE(EQ(Var("Rt", F4), LW(15, 4)), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Store (immediate)"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))], Apply (Call ("UndefinedThumb", ATy(qTy, PTy(CTy"instruction", qTy)),LU), qVar"state")))], Apply (Call ("UndefinedThumb", ATy(qTy, PTy(CTy"instruction",qTy)), LU),qVar"state"))), (bVar"b'20", ITE(Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,bVar"b'29", Mop(Not,bVar"b'26")))), ITB([(Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'21", Bop(And,bVar"b'19", Bop(And,bVar"b'18", Bop(And, bVar"b'17", Bop(And, bVar"b'16", Bop(And, bVar"b'15", Bop(And, bVar"b'14", Bop(And, bVar"b'13", bVar"b'12"))))))))), TP[LX(CTy"instruction"), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "PreloadDataLiteral"]), qVar"state")]), (Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'19", Bop(And,bVar"b'18", Bop(And,bVar"b'17", Bop(And, bVar"b'16", Bop(And, bVar"b'15", Bop(And, bVar"b'14", Bop(And, bVar"b'13", bVar"b'12")))))))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", TP[Call ("Hint", CTy"instruction", Call ("PreloadDataLiteral", CTy"Hint", TP[EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1, 1)), Mop(Cast F32, Mop(Cast (FTy 12), LL[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"]))])), ITE(Mop(Not, EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(0,1))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "PLD"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'21"), Bop(And,bVar"b'19", Bop(And,bVar"b'18", Bop(And, bVar"b'17", Bop(And, bVar"b'16", Bop(And, bVar"b'15", Bop(And, bVar"b'14", Bop(And, bVar"b'13", bVar"b'12"))))))))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("v",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 7)]), qVar"s"), TP[ITE(bVar"v", Call ("Hint", CTy"instruction", Call ("PreloadInstruction", CTy"Hint", TP[EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1, 1)), LW(15,4), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast (FTy 12), LL[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"])))])), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s")), qVar"s"]))), (Bop(And,bVar"b'24", Bop(And,bVar"b'23", Bop(And, Mop(Not,bVar"b'21"), Bop(And,bVar"b'15", Bop(And, bVar"b'14", Bop(And, bVar"b'13", bVar"b'12")))))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("v",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 7)]), qVar"s"), TP[ITE(bVar"v", Call ("Hint", CTy"instruction", Call ("PreloadInstruction", CTy"Hint", TP[LT, Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast (FTy 12), LL[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"])))])), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s")), qVar"s"]))), (Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'23", Bop(And,bVar"b'15", Bop(And,bVar"b'14", Bop(And, bVar"b'13", bVar"b'12"))))), Let(Var("W",F1), Mop(Cast F1,LL[bVar"b'21"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v",F4), ITE(EQ(Var("W", F1), LW(1, 1)), Apply (Call ("HaveMPExt", ATy(qTy, bTy), LU), qVar"s"), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s"))]), qVar"s"), TP[ITE(bVar"v", Call ("Hint", CTy"instruction", Call ("PreloadData", CTy"Hint", TP[LT, EQ(Var("W", F1), LW(1, 1)), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast (FTy 12), LL[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"])))])), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s")), qVar"s"])))), (Bop(And,bVar"b'24", Bop(And,bVar"b'21", Bop(And,bVar"b'19", Bop(And,bVar"b'18", Bop(And, bVar"b'17", Bop(And, bVar"b'16", Bop(And, bVar"b'15", Bop(And, bVar"b'14", Bop(And, bVar"b'13", bVar"b'12"))))))))), TP[Const ("NoOperation", CTy"instruction"), qVar"state"]), (Bop(And,bVar"b'19", Bop(And,bVar"b'18", Bop(And,bVar"b'17", bVar"b'16"))), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", TP[Let(Var("imm32", F32), Mop(Cast F32, Mop(Cast (FTy 12), LL[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"])), Let(bVar"add", EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1, 1)), Let(bVar"unsigned", EQ(Mop(Cast F1, LL[bVar"b'24"]), LW(0, 1)), ITE(EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1, 1)), Call ("Load", CTy"instruction", Call ("LoadHalfLiteral", CTy"Load", TP[bVar"unsigned", bVar"add", Var("Rt", F4), Var("imm32", F32)])), Call ("Load", CTy"instruction", Call ("LoadByteLiteral", CTy"Load", TP[bVar"unsigned", bVar"add", Var("Rt", F4), Var("imm32", F32)])))))), ITE(EQ(Var("Rt", F4), LW(13, 4)), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadByteLiteral/LoadHalfLiteral"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))), (bVar"b'23", Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4,qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", TP[Let(Var("m", CTy"offset1"), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast (FTy 12), LL[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"]))), Let(bVar"unsigned", EQ(Mop(Cast F1, LL[bVar"b'24"]), LW(0, 1)), ITE(EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1, 1)), Call ("Load", CTy"instruction", Call ("LoadHalf", CTy"Load", TP[bVar"unsigned", LT, LT, LF, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])), Call ("Load", CTy"instruction", Call ("LoadByte", CTy"Load", TP[bVar"unsigned", LT, LT, LF, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")]))))), ITE(EQ(Var("Rt", F4), LW(13, 4)), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadByte/LoadHalf (immediate)"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))), (Bop(And,Mop(Not,bVar"b'24"), Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'15", Bop(And,bVar"b'14", Bop(And, bVar"b'13", Bop(And, bVar"b'12", Bop(And, bVar"b'11", Bop(And, bVar"b'10", Bop(And, Mop(Not, bVar"b'9"), Mop(Not, bVar"b'8")))))))))), Let(Var("W",F1), Mop(Cast F1,LL[bVar"b'21"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v",F4), ITE(EQ(Var("W", F1), LW(1, 1)), Apply (Call ("HaveMPExt", ATy(qTy, bTy), LU), qVar"s"), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s"))]), qVar"s"), TP[ITE(bVar"v", Call ("Hint", CTy"instruction", Call ("PreloadData", CTy"Hint", TP[LF, EQ(Var("W", F1), LW(1, 1)), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])))])), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s")), qVar"s"])))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And, Mop(Not,bVar"b'21"), Bop(And,bVar"b'15", Bop(And, bVar"b'14", Bop(And, bVar"b'13", Bop(And, bVar"b'12", Bop(And, bVar"b'11", Bop(And, bVar"b'10", Bop(And, Mop(Not, bVar"b'9"), Mop(Not, bVar"b'8"))))))))))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("v",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 7)]), qVar"s"), TP[ITE(bVar"v", Call ("Hint", CTy"instruction", Call ("PreloadInstruction", CTy"Hint", TP[LF, Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])))])), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s")), qVar"s"]))), (Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'11", Bop(And, Mop(Not,bVar"b'10"), Mop(Not,bVar"b'8")))), TP[Call ("Undefined", CTy"instruction",LW(0,32)), qVar"state"]), (Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'11", Bop(And,bVar"b'10", Bop(And,bVar"b'9", Mop(Not, bVar"b'8"))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4,qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", TP[Let(bVar"unsigned", EQ(Mop(Cast F1, LL[bVar"b'24"]), LW(0, 1)), Let(Var("imm32", F32), Mop(Cast F32, Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])), Let(Var("m", CTy"offset2"), Call ("immediate_form2", CTy"offset2", Var("imm32", F32)), ITB([(EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1, 1)), Call ("Load", CTy"instruction", Call ("LoadHalfUnprivileged", CTy"Load", TP[bVar"unsigned", LT, LF, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset2")]))), (bVar"unsigned", Call ("Load", CTy"instruction", Call ("LoadByteUnprivileged", CTy"Load", TP[LT, LF, Var("Rt", F4), Var("Rn", F4), Call ("immediate_form1", CTy"offset1", Var("imm32", F32))])))], Call ("Load", CTy"instruction", Call ("LoadSignedByteUnprivileged", CTy"Load", TP[LT, LF, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset2")])))))), ITE(Bop(In, Var("Rt", F4), SL[LW(13, 4), LW(15, 4)]), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadUnprivileged"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'21", Bop(And,bVar"b'15", Bop(And, bVar"b'14", Bop(And, bVar"b'13", Bop(And, bVar"b'12", Bop(And, bVar"b'11", Bop(And, bVar"b'10", Bop(And, Mop(Not, bVar"b'9"), Mop(Not, bVar"b'8"))))))))))), TP[Const ("NoOperation", CTy"instruction"), qVar"state"]), (Bop(And,Mop(Not,bVar"b'23"), bVar"b'11"), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4,qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", Let(bVar"wback", EQ(Mop(Cast F1, LL[bVar"b'8"]), LW(1, 1)), TP[Let(bVar"add", EQ(Mop(Cast F1, LL[bVar"b'9"]), LW(1, 1)), Let(bVar"index", EQ(Mop(Cast F1, LL[bVar"b'10"]), LW(1, 1)), Let(bVar"unsigned", EQ(Mop(Cast F1, LL[bVar"b'24"]), LW(0, 1)), Let(Var("m", CTy"offset1"), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]))), ITE(EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1, 1)), Call ("Load", CTy"instruction", Call ("LoadHalf", CTy"Load", TP[bVar"unsigned", bVar"add", bVar"index", bVar"wback", Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])), Call ("Load", CTy"instruction", Call ("LoadByte", CTy"Load", TP[bVar"unsigned", bVar"add", bVar"index", bVar"wback", Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")]))))))), ITE(Bop(Or, EQ(Var("Rt", F4), LW(13, 4)), Bop(Or, Bop(And, EQ(Var("Rt", F4), LW(15, 4)), bVar"wback"), Bop(And, bVar"wback", EQ(Var("Rn", F4), Var("Rt", F4))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Load (immediate)"]), qVar"s"), qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))), (Bop(And,Mop(Not,bVar"b'24"), Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'15", Bop(And,bVar"b'14", Bop(And, bVar"b'13", Bop(And, bVar"b'12", Bop(And, Mop(Not, bVar"b'11"), Bop(And, Mop(Not, bVar"b'10"), Bop(And, Mop(Not, bVar"b'9"), Bop(And, Mop(Not, bVar"b'8"), Bop(And, Mop(Not, bVar"b'7"), Mop(Not, bVar"b'6")))))))))))), Let(Var("W",F1), Mop(Cast F1,LL[bVar"b'21"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4,qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), ITE(EQ(Var("W", F1), LW(1, 1)), Apply (Call ("HaveMPExt", ATy(qTy, bTy), LU), qVar"s"), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s"))]), qVar"s"), ITE(bVar"v", TP[Call ("Hint", CTy"instruction", Call ("PreloadData", CTy"Hint", TP[LT, EQ(Var("W", F1), LW(1, 1)), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Call ("register_form1", CTy"offset1", TP[Var("Rm", F4), LC("SRType_LSL", CTy"SRType"), Mop(Cast nTy, Mop(Cast (FTy 2), LL[bVar"b'5", bVar"b'4"]))])])), ITE(Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "PreloadData"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And, Mop(Not,bVar"b'21"), Bop(And,bVar"b'15", Bop(And, bVar"b'14", Bop(And, bVar"b'13", Bop(And, bVar"b'12", Bop(And, Mop(Not, bVar"b'11"), Bop(And, Mop(Not, bVar"b'10"), Bop(And, Mop(Not, bVar"b'9"), Bop(And, Mop(Not, bVar"b'8"), Bop(And, Mop(Not, bVar"b'7"), Mop(Not, bVar"b'6"))))))))))))), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 7)]), qVar"s"), ITE(bVar"v", TP[Call ("Hint", CTy"instruction", Call ("PreloadInstruction", CTy"Hint", TP[LT, Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Call ("register_form1", CTy"offset1", TP[Var("Rm", F4), LC("SRType_LSL", CTy"SRType"), Mop(Cast nTy, Mop(Cast (FTy 2), LL[bVar"b'5", bVar"b'4"]))])])), ITE(Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "PreloadInstruction"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))), (Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'21", Bop(And,bVar"b'15", Bop(And, bVar"b'14", Bop(And, bVar"b'13", Bop(And, bVar"b'12", Bop(And, Mop(Not, bVar"b'11"), Bop(And, Mop(Not, bVar"b'10"), Bop(And, Mop(Not, bVar"b'9"), Bop(And, Mop(Not, bVar"b'8"), Bop(And, Mop(Not, bVar"b'7"), Mop(Not, bVar"b'6"))))))))))))), TP[Const ("NoOperation", CTy"instruction"), qVar"state"]), (Bop(And,Mop(Not,bVar"b'23"), Bop(And,Mop(Not,bVar"b'11"), Bop(And, Mop(Not,bVar"b'10"), Bop(And, Mop(Not, bVar"b'9"), Bop(And, Mop(Not, bVar"b'8"), Bop(And, Mop(Not, bVar"b'7"), Mop(Not, bVar"b'6"))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", TP[Let(bVar"unsigned", EQ(Mop(Cast F1, LL[bVar"b'24"]), LW(0, 1)), Let(Var("m", CTy"offset1"), Call ("register_form1", CTy"offset1", TP[Var("Rm", F4), LC("SRType_LSL", CTy"SRType"), Mop(Cast nTy, Mop(Cast (FTy 2), LL[bVar"b'5", bVar"b'4"]))]), ITE(EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1, 1)), Call ("Load", CTy"instruction", Call ("LoadHalf", CTy"Load", TP[bVar"unsigned", LT, LT, LF, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])), Call ("Load", CTy"instruction", Call ("LoadByte", CTy"Load", TP[bVar"unsigned", LT, LT, LF, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")]))))), ITE(Bop(Or, EQ(Var("Rt", F4), LW(13, 4)), Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)])), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Load (register)"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))))], Apply (Call ("UndefinedThumb", ATy(qTy, PTy(CTy"instruction",qTy)), LU),qVar"state")), Apply (Call ("UndefinedThumb", ATy(qTy, PTy(CTy"instruction",qTy)), LU),qVar"state"))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,bVar"b'29", Bop(And,Mop(Not,bVar"b'26"), Mop(Not,bVar"b'24"))))), ITB([(Bop(And,Mop(Not,bVar"b'23"), Bop(And,Mop(Not,bVar"b'11"), Bop(And,Mop(Not,bVar"b'10"), Bop(And, Mop(Not,bVar"b'9"), Bop(And, Mop(Not, bVar"b'8"), Bop(And, Mop(Not, bVar"b'7"), Mop(Not, bVar"b'6"))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4,qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Bop(And, Mop(Not, EQ(Var("Rn", F4), LW(15, 4))), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s"))]), qVar"s"), ITE(bVar"v", TP[Let(Var("m", CTy"offset1"), Call ("register_form1", CTy"offset1", TP[Var("Rm", F4), LC("SRType_LSL", CTy"SRType"), Mop(Cast nTy, Mop(Cast (FTy 2), LL[bVar"b'5", bVar"b'4"]))]), ITE(EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1, 1)), Call ("Store", CTy"instruction", Call ("StoreHalf", CTy"Store", TP[LT, LT, LF, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])), Call ("Store", CTy"instruction", Call ("StoreByte", CTy"Store", TP[LT, LT, LF, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])))), ITE(Bop(Or, Bop(In, Var("Rt", F4), SL[LW(13, 4), LW(15, 4)]), Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)])), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreByte/Half (register)"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))), (Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'11", Bop(And,bVar"b'10", Bop(And,bVar"b'9", Mop(Not,bVar"b'8"))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v",F4), Bop(And, Mop(Not, EQ(Var("Rn", F4), LW(15, 4))), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s"))]), qVar"s"), ITE(bVar"v", TP[Let(Var("imm32", F32), Mop(Cast F32, Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])), ITE(EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1, 1)), Call ("Store", CTy"instruction", Call ("StoreHalfUnprivileged", CTy"Store", TP[LT, LF, Var("Rt", F4), Var("Rn", F4), Call ("immediate_form2", CTy"offset2", Var("imm32", F32))])), Call ("Store", CTy"instruction", Call ("StoreByteUnprivileged", CTy"Store", TP[LT, LF, Var("Rt", F4), Var("Rn", F4), Call ("immediate_form1", CTy"offset1", Var("imm32", F32))])))), ITE(Bop(In, Var("Rt", F4), SL[LW(13, 4), LW(15, 4)]), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreByte/HalfUnprivileged"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))), (Bop(And,Mop(Not,bVar"b'23"), bVar"b'11"), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("W",F1), Mop(Cast F1,LL[bVar"b'8"]), Let(Var("P",F1), Mop(Cast F1, LL[bVar"b'10"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Bop(And, Mop(Not, EQ(Var("Rn", F4), LW(15, 4))), Bop(And, Bop(Or, EQ(Var("P", F1), LW(1, 1)), EQ(Var("W", F1), LW(1, 1))), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")))]), qVar"s"), ITE(bVar"v", Let(bVar"wback", EQ(Var("W", F1), LW(1, 1)), TP[Let(bVar"add", EQ(Mop(Cast F1, LL[bVar"b'9"]), LW(1, 1)), Let(bVar"index", EQ(Var("P", F1), LW(1, 1)), Let(Var("m", CTy"offset1"), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]))), ITE(EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1, 1)), Call ("Store", CTy"instruction", Call ("StoreHalf", CTy"Store", TP[bVar"add", bVar"index", bVar"wback", Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])), Call ("Store", CTy"instruction", Call ("StoreByte", CTy"Store", TP[bVar"add", bVar"index", bVar"wback", Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])))))), ITE(Bop(Or, Bop(In, Var("Rt", F4), SL[LW(13, 4), LW(15, 4)]), Bop(And, bVar"wback", EQ(Var("Rn", F4), Var("Rt", F4)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreByte/Half (immediate)"]), qVar"s"), qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))))), (bVar"b'23", Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v",F4), Bop(And, Mop(Not, EQ(Var("Rn", F4), LW(15, 4))), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s"))]), qVar"s"), ITE(bVar"v", TP[Let(Var("m", CTy"offset1"), Call ("immediate_form1", CTy"offset1", Mop(Cast F32, Mop(Cast (FTy 12), LL[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"]))), ITE(EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1, 1)), Call ("Store", CTy"instruction", Call ("StoreHalf", CTy"Store", TP[LT, LT, LF, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])), Call ("Store", CTy"instruction", Call ("StoreByte", CTy"Store", TP[LT, LT, LF, Var("Rt", F4), Var("Rn", F4), Var("m", CTy"offset1")])))), ITE(Bop(In, Var("Rt", F4), SL[LW(13, 4), LW(15, 4)]), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreByte/Half (immediate)"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))], Apply (Call ("UndefinedThumb", ATy(qTy, PTy(CTy"instruction",qTy)), LU),qVar"state")))], Apply (Call ("UndefinedThumb", ATy(qTy,PTy(CTy"instruction",qTy)),LU), qVar"state"))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,bVar"b'29",Mop(Not,bVar"b'26")))), ITB([(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"), Mop(Not,bVar"b'20"))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy),LU), qVar"s")]),qVar"s"), ITE(bVar"v", Let(Var("registers",F16), CC[LW(0,1), Mop(Cast F1, LL[bVar"b'14"]), LW(0,1), Mop(Cast(FTy 13), LL[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"])], Let(bVar"wback", EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1,1)), TP[Call ("Store", CTy"instruction", Call ("StoreMultiple", CTy"Store", TP[LT,LF, bVar"wback", Var("Rn", F4), Var("registers", F16)])), ITE(Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, Bop(Lt, Call ("BitCount", nTy, Var("registers", F16)), LN 2), Bop(Or, Bop(And, bVar"wback", Bop(Bit, Var("registers", F16), Mop(Cast nTy, Var("Rn", F4)))), Mop(Not, Bop(And, EQ(Mop(Cast F1, LL[bVar"b'15"]), LW(0, 1)), EQ(Mop(Cast F1, LL[bVar"b'13"]), LW(0, 1))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreMultiple"]), qVar"s"), qVar"s")])), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))), (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"), Mop(Not,bVar"b'20"))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy),LU), qVar"s")]),qVar"s"), ITE(bVar"v", Let(Var("registers",F16), CC[LW(0,1), Mop(Cast F1, LL[bVar"b'14"]), LW(0,1), Mop(Cast(FTy 13), LL[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"])], Let(bVar"wback", EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1,1)), TP[Call ("Store", CTy"instruction", Call ("StoreMultiple", CTy"Store", TP[LF,LT, bVar"wback", Var("Rn", F4), Var("registers", F16)])), ITE(Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, Bop(Lt, Call ("BitCount", nTy, Var("registers", F16)), LN 2), Bop(Or, Bop(And, bVar"wback", Bop(Bit, Var("registers", F16), Mop(Cast nTy, Var("Rn", F4)))), Mop(Not, Bop(And, EQ(Mop(Cast F1, LL[bVar"b'15"]), LW(0, 1)), EQ(Mop(Cast F1, LL[bVar"b'13"]), LW(0, 1))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreMultiple"]), qVar"s"), qVar"s")])), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))), (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"), bVar"b'20")))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("M",F1), Mop(Cast F1,LL[bVar"b'14"]), Let(Var("P",F1), Mop(Cast F1,LL[bVar"b'15"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", Let(Var("registers", F16), CC[Var("P",F1), Var("M",F1), LW(0,1), Mop(Cast (FTy 13), LL[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"])], Let(bVar"wback", EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1,1)), TP[Call ("Load", CTy"instruction", Call ("LoadMultiple", CTy"Load", TP[LT, LF, bVar"wback", Var("Rn", F4), Var("registers", F16)])), ITE(Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, Bop(Lt, Call ("BitCount", nTy, Var("registers", F16)), LN 2), Bop(Or, Bop(And, EQ(Var("P", F1), LW(1, 1)), EQ(Var("M", F1), LW(1, 1))), Bop(Or, Bop(And, Bop(Bit, Var("registers", F16), LN 15), Bop(And, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy, bTy), LU), qVar"s")))), Bop(Or, Bop(And, bVar"wback", Bop(Bit, Var("registers", F16), Mop(Cast nTy, Var("Rn", F4)))), Mop(Not, EQ(Mop(Cast F1, LL[bVar"b'13"]), LW(0, 1)))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadMultiple"]), qVar"s"), qVar"s")])), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))), (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")))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("M",F1), Mop(Cast F1,LL[bVar"b'14"]), Let(Var("P",F1), Mop(Cast F1,LL[bVar"b'15"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", Let(Var("registers", F16), CC[Var("P",F1), Var("M",F1), LW(0,1), Mop(Cast (FTy 13), LL[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"])], Let(bVar"wback", EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1,1)), TP[Call ("Load", CTy"instruction", Call ("LoadMultiple", CTy"Load", TP[LF, LT, bVar"wback", Var("Rn", F4), Var("registers", F16)])), ITE(Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, Bop(Lt, Call ("BitCount", nTy, Var("registers", F16)), LN 2), Bop(Or, Bop(And, EQ(Var("P", F1), LW(1, 1)), EQ(Var("M", F1), LW(1, 1))), Bop(Or, Bop(And, Bop(Bit, Var("registers", F16), LN 15), Bop(And, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy, bTy), LU), qVar"s")))), Bop(Or, Bop(And, bVar"wback", Bop(Bit, Var("registers", F16), Mop(Cast nTy, Var("Rn", F4)))), Mop(Not, EQ(Mop(Cast F1, LL[bVar"b'13"]), LW(0, 1)))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadMultiple"]), qVar"s"), qVar"s")])), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))), (Bop(And,Mop(Not,bVar"b'25"), Bop(And,Mop(Not,bVar"b'22"), Mop(Not,bVar"b'20"))), Let(Var("op",FTy 2), Mop(Cast(FTy 2), LL[bVar"b'24",bVar"b'23"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Bop(And, Bop(In, Var("op", FTy 2), SL[LW(0,2), LW(3,2)]), Apply (Call ("HaveThumb2", ATy(qTy,bTy), LU),qVar"s"))]), qVar"s"), ITE(bVar"v", TP[Call ("System", CTy"instruction", Call ("StoreReturnState", CTy"System", TP[EQ(Var("op", FTy 2), LW(3,2)), LF, EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1,1)), Mop(Cast (FTy 5), LL[bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])])), ITE(Bop(Or, EQ(Apply (Call ("CurrentInstrSet", ATy(qTy, CTy"InstrSet"), LU), qVar"s"), LC("InstrSet_ThumbEE", CTy"InstrSet")), Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), LW(13, 4)), EQ(Mop(Cast (FTy 11), LL[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(1536, 11))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreReturnState"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))), (Bop(And,Mop(Not,bVar"b'25"), Bop(And,Mop(Not,bVar"b'22"),bVar"b'20")), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("op",FTy 2), Mop(Cast(FTy 2), LL[bVar"b'24",bVar"b'23"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Bop(And, Bop(In, Var("op", FTy 2), SL[LW(0,2), LW(3,2)]), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s"))]), qVar"s"), ITE(bVar"v", TP[Call ("System", CTy"instruction", Call ("ReturnFromException", CTy"System", TP[EQ(Var("op", FTy 2), LW(3,2)), LF, EQ(Mop(Cast F1, LL[bVar"b'21"]), LW(1,1)), Var("Rn", F4)])), ITE(Bop(Or, EQ(Apply (Call ("CurrentInstrSet", ATy(qTy, CTy"InstrSet"), LU), qVar"s"), LC("InstrSet_ThumbEE", CTy"InstrSet")), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, Bop(And, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy, bTy), LU), qVar"s"))), Mop(Not, EQ(Mop(Cast F16, LL[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(49152, 16)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "ReturnFromException"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (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"), Mop(Not,bVar"b'20")))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", TP[Call ("Store", CTy"instruction", Call ("StoreExclusive", CTy"Store", TP[Var("Rd", F4), Var("Rt", F4), Var("Rn", F4), Mop(Cast F32, CC[Mop(Cast F8, LL[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(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rt", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rd", F4), Var("Rn", F4)), EQ(Var("Rd", F4), Var("Rt", F4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreExclusive"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))), (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"), bVar"b'20"))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy), LU),qVar"s")]), qVar"s"), ITE(bVar"v", TP[Call ("Load", CTy"instruction", Call ("LoadExclusive", CTy"Load", TP[Var("Rt", F4), Var("Rn", F4), Mop(Cast F32, CC[Mop(Cast F8, LL[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(Bop(Or, Bop(In, Var("Rt", F4), SL[LW(13, 4), LW(15, 4)]), EQ(Var("Rn", F4), LW(15,4))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreExclusive"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (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, Mop(Not,bVar"b'21"), Bop(And, Mop(Not,bVar"b'20"), Bop(And, Mop(Not, bVar"b'7"), Bop(And, bVar"b'6", Mop(Not, bVar"b'5"))))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("v",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 7)]), qVar"s"), ITE(bVar"v", TP[ITE(EQ(Mop(Cast F1, LL[bVar"b'4"]), LW(1,1)), Call ("Store", CTy"instruction", Call ("StoreExclusiveHalf", CTy"Store", TP[Var("Rd", F4), Var("Rt", F4), Var("Rn", F4)])), Call ("Store", CTy"instruction", Call ("StoreExclusiveByte", CTy"Store", TP[Var("Rd", F4), Var("Rt", F4), Var("Rn", F4)]))), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rt", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rd", F4), Var("Rn", F4)), Bop(Or, EQ(Var("Rd", F4), Var("Rt", F4)), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15, 4)))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreExclusive: Byte or Halfword"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))), (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, Mop(Not,bVar"b'21"), Bop(And, Mop(Not,bVar"b'20"), Bop(And, Mop(Not, bVar"b'7"), Bop(And, bVar"b'6", Bop(And, bVar"b'5", bVar"b'4"))))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rt2",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 7)]), qVar"s"), ITE(bVar"v", TP[Call ("Store", CTy"instruction", Call ("StoreExclusiveDoubleword", CTy"Store", TP[Var("Rd", F4), Var("Rt", F4), Var("Rt2", F4), Var("Rn", F4)])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rt", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rt2", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, EQ(Var("Rd", F4), Var("Rn", F4)), EQ(Var("Rd", F4), Var("Rt", F4))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreExclusivDoubleword"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))))), (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, Mop(Not,bVar"b'21"), Bop(And,bVar"b'20", Bop(And, Mop(Not, bVar"b'7"), Bop(And, Mop(Not, bVar"b'6"), Mop(Not, bVar"b'5"))))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy), LU),qVar"s")]), qVar"s"), ITE(bVar"v", TP[Call ("Branch", CTy"instruction", Call ("TableBranchByte", CTy"Branch", TP[EQ(Mop(Cast F1, LL[bVar"b'4"]), LW(1,1)), Var("Rm", F4), Var("Rn", F4)])), ITE(Bop(Or, EQ(Var("Rn", F4), LW(13,4)), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(And, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy, bTy), LU), qVar"s"))), Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), LW(15, 4)), EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(0, 4))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "TableBranchByte"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (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, Mop(Not,bVar"b'21"), Bop(And,bVar"b'20", Bop(And, Mop(Not, bVar"b'7"), Bop(And, bVar"b'6", Mop(Not, bVar"b'5"))))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 7)]), qVar"s"), ITE(bVar"v", TP[ITE(EQ(Mop(Cast F1, LL[bVar"b'4"]), LW(1,1)), Call ("Load", CTy"instruction", Call ("LoadExclusiveHalf", CTy"Load", TP[Var("Rt", F4), Var("Rn", F4)])), Call ("Load", CTy"instruction", Call ("LoadExclusiveByte", CTy"Load", TP[Var("Rt", F4), Var("Rn", F4)]))), ITE(Bop(Or, Bop(In, Var("Rt", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15, 4))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadExclusive: Byte or Halfword"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (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, Mop(Not,bVar"b'21"), Bop(And,bVar"b'20", Bop(And, Mop(Not, bVar"b'7"), Bop(And, bVar"b'6", Bop(And, bVar"b'5", bVar"b'4"))))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("Rt2",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("v",F4), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 7)]), qVar"s"), ITE(bVar"v", TP[Call ("Load", CTy"instruction", Call ("LoadExclusiveDoubleword", CTy"Load", TP[Var("Rt", F4), Var("Rt2", F4), Var("Rn", F4)])), ITE(Bop(Or, Bop(In, Var("Rt", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rt2", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, EQ(Var("Rt", F4), Var("Rt2", F4)), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Mop(Not, EQ(Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), LW(15, 4))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadExclusiveDoubleword"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))), (Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'22",Mop(Not,bVar"b'20"))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("W",F1), Mop(Cast F1,LL[bVar"b'21"]), Let(Var("P",F1), Mop(Cast F1,LL[bVar"b'24"]), Let(Var("Rt2",F4), Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Bop(And, Bop(Or, EQ(Var("P", F1), LW(1, 1)), EQ(Var("W", F1), LW(1, 1))), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s"))]), qVar"s"), ITE(bVar"v", Let(bVar"wback", EQ(Var("W", F1), LW(1, 1)), TP[Call ("Store", CTy"instruction", Call ("StoreDual", CTy"Store", TP[EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1, 1)), EQ(Var("P", F1), LW(1, 1)), bVar"wback", Var("Rt", F4), Var("Rt2", F4), Var("Rn", F4), Call ("immediate_form2", CTy"offset2", Mop(Cast F32, CC[Mop(Cast F8, LL[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(Bop(Or, Bop(And, bVar"wback", Bop(Or, EQ(Var("Rn", F4), Var("Rt", F4)), EQ(Var("Rn", F4), Var("Rt2", F4)))), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, Bop(In, Var("Rt", F4), SL[LW(13, 4), LW(15, 4)]), Bop(In, Var("Rt2", F4), SL[LW(13, 4), LW(15, 4)])))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "StoreDual"]), qVar"s"), qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))))), (Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'22", Bop(And,bVar"b'20", Bop(And,bVar"b'19", Bop(And,bVar"b'18", Bop(And,bVar"b'17", bVar"b'16")))))), Let(Var("W",F1), Mop(Cast F1,LL[bVar"b'21"]), Let(Var("Rt2",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15",bVar"b'14", bVar"b'13",bVar"b'12"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("v",F4), Bop(And, Bop(Or, EQ(Mop(Cast F1, LL[bVar"b'24"]), LW(1, 1)), EQ(Var("W", F1), LW(1, 1))), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s"))]), qVar"s"), ITE(bVar"v", TP[Call ("Load", CTy"instruction", Call ("LoadDualLiteral", CTy"Load", TP[EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1, 1)), Var("Rt", F4), Var("Rt2", F4), Mop(Cast F32, CC[Mop(Cast F8, LL[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(Bop(Or, Bop(In, Var("Rt", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rt2", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, EQ(Var("Rt", F4), Var("Rt2", F4)), EQ(Var("W", F1), LW(1, 1))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadDual: literal"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))), (Bop(And,Mop(Not,bVar"b'25"), Bop(And,bVar"b'22",bVar"b'20")), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("W",F1), Mop(Cast F1,LL[bVar"b'21"]), Let(Var("P",F1), Mop(Cast F1,LL[bVar"b'24"]), Let(Var("Rt2",F4), Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9",bVar"b'8"]), Let(Var("Rt",F4), Mop(Cast F4, LL[bVar"b'15", bVar"b'14", bVar"b'13", bVar"b'12"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Bop(And, Bop(Or, EQ(Var("P", F1), LW(1, 1)), EQ(Var("W", F1), LW(1, 1))), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s"))]), qVar"s"), ITE(bVar"v", Let(bVar"wback", EQ(Var("W", F1), LW(1, 1)), TP[Call ("Load", CTy"instruction", Call ("LoadDual", CTy"Load", TP[EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1, 1)), EQ(Var("P", F1), LW(1, 1)), bVar"wback", Var("Rt", F4), Var("Rt2", F4), Var("Rn", F4), Call ("immediate_form2", CTy"offset2", Mop(Cast F32, CC[Mop(Cast F8, LL[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(Bop(Or, Bop(And, bVar"wback", Bop(Or, EQ(Var("Rn", F4), Var("Rt", F4)), EQ(Var("Rn", F4), Var("Rt2", F4)))), Bop(Or, Bop(In, Var("Rt", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rt2", F4), SL[LW(13, 4), LW(15, 4)]), EQ(Var("Rt", F4), Var("Rt2", F4))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "LoadDual"]), qVar"s"), qVar"s")]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))))), (bVar"b'25", Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), Let(Var("S",F1), Mop(Cast F1,LL[bVar"b'20"]), Let(Var("Rm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("typ",FTy 2), Mop(Cast(FTy 2), LL[bVar"b'5",bVar"b'4"]), Let(Var("imm2",FTy 2), Mop(Cast(FTy 2), LL[bVar"b'7", bVar"b'6"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), Let(Var("imm3", FTy 3), Mop(Cast (FTy 3), LL[bVar"b'14", bVar"b'13", bVar"b'12"]), Let(bVar"GOOD_MATCH", EQ(Mop(Cast F1, LL[bVar"b'15"]), LW(0,1)), Let(TP[Var("v", F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", Let(TP[Var("shift_t", CTy"SRType"), nVar"shift_n"], Call ("DecodeImmShift", PTy(CTy"SRType", nTy), TP[Var("typ", FTy 2), CC[Var("imm3", FTy 3), Var("imm2", FTy 2)]]), Let(bVar"setflags", EQ(Var("S", F1), LW(1, 1)), CS(TP[Mop(Cast F4, LL[bVar"b'24", bVar"b'23", bVar"b'22", bVar"b'21"]), Var("Rn", F4), Var("Rd", F4), Var("S", F1)], [(TP[LW(0, 4), AVar F4, LW(15, 4), LW(1, 1)], TP[Call ("Data", CTy"instruction", Call ("TestCompareRegister", CTy"Data", TP[LW(0, 2), Var("Rn", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"])), ITE(Bop(Or, Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, bVar"GOOD_MATCH"))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "TST (register)"]), qVar"s"), qVar"s")]), (TP[LW(0, 4), AVar (PTy(F4, PTy(F4, F1)))], TP[Call ("Data", CTy"instruction", Call ("Register", CTy"Data", TP[LW(0, 4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(13, 4)), Bop(Or, Bop(And, EQ(Var("Rd", F4), LW(15, 4)), Mop(Not, bVar"setflags")), Bop(Or, Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, bVar"GOOD_MATCH"))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "AND (register)"]), qVar"s"), qVar"s")]), (TP[LW(1, 4), AVar (PTy(F4, PTy(F4, F1)))], TP[Call ("Data", CTy"instruction", Call ("Register", CTy"Data", TP[LW(14, 4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, bVar"GOOD_MATCH")))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "BIC (register)"]), qVar"s"), qVar"s")]), (TP[LW(2, 4), LW(15, 4), AVar (PTy(F4, F1))], TP[Call ("Data", CTy"instruction", Call ("ShiftImmediate", CTy"Data", TP[LF, bVar"setflags", Var("Rd", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"])), ITB([(Bop(And, EQ(Var("typ", FTy 2), LW(0, 2)), Bop(And, EQ(Var("imm3", FTy 3), LW(0, 3)), EQ(Var("imm2", FTy 2), LW(0, 2)))), ITE(Bop(Or, Bop(And, bVar"setflags", Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]))), Bop(Or, Bop(And, Mop(Not, bVar"setflags"), Bop(Or, EQ(Var("Rd", F4), LW(15, 4)), Bop(Or, EQ(Var("Rm", F4), LW(15, 4)), Bop(And, EQ(Var("Rd", F4), LW(13, 4)), EQ(Var("Rm", F4), LW(13, 4)))))), Mop(Not, bVar"GOOD_MATCH"))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "MOV (register)"]), qVar"s"), qVar"s")), (Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, bVar"GOOD_MATCH"))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "SHIFT (register)"]), qVar"s"))], qVar"s")]), (TP[LW(2, 4), AVar (PTy(F4, PTy(F4, F1)))], TP[Call ("Data", CTy"instruction", Call ("Register", CTy"Data", TP[LW(12, 4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, EQ(Var("Rn", F4), LW(13, 4)), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, bVar"GOOD_MATCH")))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "ORR (register)"]), qVar"s"), qVar"s")]), (TP[LW(3, 4), LW(15, 4), AVar (PTy(F4, F1))], TP[Call ("Data", CTy"instruction", Call ("ShiftImmediate", CTy"Data", TP[LT, bVar"setflags", Var("Rd", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, bVar"GOOD_MATCH"))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "MVN (register)"]), qVar"s"), qVar"s")]), (TP[LW(3, 4), AVar (PTy(F4, PTy(F4, F1)))], TP[Call ("Data", CTy"instruction", Call ("Register", CTy"Data", TP[LW(15, 4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, EQ(Var("Rn", F4), LW(13, 4)), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, bVar"GOOD_MATCH")))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "ORN (register)"]), qVar"s"), qVar"s")]), (TP[LW(4, 4), AVar F4, LW(15, 4), LW(1, 1)], TP[Call ("Data", CTy"instruction", Call ("TestCompareRegister", CTy"Data", TP[LW(1, 2), Var("Rn", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"])), ITE(Bop(Or, Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, bVar"GOOD_MATCH"))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "TEQ (register)"]), qVar"s"), qVar"s")]), (TP[LW(4, 4), AVar (PTy(F4, PTy(F4, F1)))], TP[Call ("Data", CTy"instruction", Call ("Register", CTy"Data", TP[LW(1, 4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(13, 4)), Bop(Or, Bop(And, EQ(Var("Rd", F4), LW(15, 4)), Mop(Not, bVar"setflags")), Bop(Or, Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, bVar"GOOD_MATCH"))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "EOR (register)"]), qVar"s"), qVar"s")]), (TP[LW(6, 4), AVar F4, AVar F4, LW(0, 1)], ITE(Bop(Bit, Var("typ", FTy 2), LN 0), TP[Call ("Undefined", CTy"instruction", LW(0, 32)), qVar"s"], TP[Call ("Media", CTy"instruction", Call ("PackHalfword", CTy"Media", TP[Var("shift_t", CTy"SRType"), nVar"shift_n", Bop(Bit, Var("typ", FTy 2), LN 1), Var("Rd", F4), Var("Rn", F4), Var("Rm", F4)])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, bVar"GOOD_MATCH")))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "PackHalfword"]), qVar"s"), qVar"s")])), (TP[LW(8, 4), AVar F4, LW(15, 4), LW(1, 1)], TP[Call ("Data", CTy"instruction", Call ("TestCompareRegister", CTy"Data", TP[LW(3, 2), Var("Rn", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"])), ITE(Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, bVar"GOOD_MATCH"))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "CMN (register)"]), qVar"s"), qVar"s")]), (TP[LW(8, 4), AVar (PTy(F4, PTy(F4, F1)))], TP[Let(TP[Var("shift_t", CTy"SRType"), nVar"shift_n"], Call ("DecodeImmShift", PTy(CTy"SRType", nTy), TP[Var("typ", FTy 2), CC[Var("imm3", FTy 3), Var("imm2", FTy 2)]]), Call ("Data", CTy"instruction", Call ("Register", CTy"Data", TP[LW(4, 4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"]))), ITE(Bop(Or, EQ(Var("Rd", F4), LW(13, 4)), Bop(Or, Bop(And, EQ(Var("Rd", F4), LW(15, 4)), Mop(Not, bVar"setflags")), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, bVar"GOOD_MATCH"))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "ADD (register)"]), qVar"s"), qVar"s")]), (TP[LW(10, 4), AVar (PTy(F4, PTy(F4, F1)))], TP[Call ("Data", CTy"instruction", Call ("Register", CTy"Data", TP[LW(5, 4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, bVar"GOOD_MATCH")))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "ADC (register)"]), qVar"s"), qVar"s")]), (TP[LW(11, 4), AVar (PTy(F4, PTy(F4, F1)))], TP[Call ("Data", CTy"instruction", Call ("Register", CTy"Data", TP[LW(6, 4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, bVar"GOOD_MATCH")))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "SBC (register)"]), qVar"s"), qVar"s")]), (TP[LW(13, 4), AVar F4, LW(15, 4), LW(1, 1)], TP[Call ("Data", CTy"instruction", Call ("TestCompareRegister", CTy"Data", TP[LW(2, 2), Var("Rn", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"])), ITE(Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, bVar"GOOD_MATCH"))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "CMP (register)"]), qVar"s"), qVar"s")]), (TP[LW(13, 4), AVar (PTy(F4, PTy(F4, F1)))], TP[Call ("Data", CTy"instruction", Call ("Register", CTy"Data", TP[LW(2, 4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(13, 4)), Bop(Or, Bop(And, EQ(Var("Rd", F4), LW(15, 4)), Mop(Not, bVar"setflags")), Bop(Or, EQ(Var("Rn", F4), LW(15, 4)), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, bVar"GOOD_MATCH"))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "SUB (register)"]), qVar"s"), qVar"s")]), (TP[LW(14, 4), AVar (PTy(F4, PTy(F4, F1)))], TP[Call ("Data", CTy"instruction", Call ("Register", CTy"Data", TP[LW(3, 4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("Rm", F4), Var("shift_t", CTy"SRType"), nVar"shift_n"])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rm", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, bVar"GOOD_MATCH")))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "RSB (register)"]), qVar"s"), qVar"s")]), (AVar (PTy(F4, PTy(F4, PTy(F4, F1)))), TP[Call ("Undefined", CTy"instruction", LW(0, 32)), qVar"s"])]))), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"]))))))))))))], Apply (Call ("UndefinedThumb", ATy(qTy,PTy(CTy"instruction",qTy)),LU), qVar"state")))], Apply (Call ("UndefinedThumb", ATy(qTy,PTy(CTy"instruction",qTy)),LU), qVar"state"))), (bVar"b'15", ITE(Bop(And,bVar"b'31", Bop(And,bVar"b'30", Bop(And,bVar"b'29",bVar"b'28"))), ITB([(Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And,bVar"b'24", Bop(And,bVar"b'23", Bop(And,Mop(Not,bVar"b'22"), Bop(And, Mop(Not,bVar"b'21"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'12"), bVar"b'5")))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveVirtExt", ATy(qTy,bTy),LU), qVar"s")]),qVar"s"), ITE(bVar"v", TP[Call ("System", CTy"instruction", Call ("MoveToBankedOrSpecialRegister", CTy"System", TP[EQ(Mop(Cast F1, LL[bVar"b'20"]), LW(1,1)), CC[Mop(Cast F1, LL[bVar"b'4"]), Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"])], Var("Rn",F4)])), ITE(Bop(Or, Bop(In, Var("Rn",F4), SL[LW(13,4), LW(15,4)]), Mop(Not, Bop(And, EQ(Mop(Cast F1, LL[bVar"b'13"]), LW(0,1)), Bop(And, EQ(Mop(Cast (FTy 2), LL[bVar"b'7", bVar"b'6"]), LW(0, 2)), EQ(Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), LW(0, 4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "MoveToBankedOrSpecialRegister"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))), (Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And,bVar"b'24", Bop(And,bVar"b'23", Bop(And,Mop(Not,bVar"b'22"), Bop(And, Mop(Not,bVar"b'21"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'12"), Mop(Not, bVar"b'5"))))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Let(Var("mask",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy), LU),qVar"s")]), qVar"s"), ITE(bVar"v", TP[Call ("System", CTy"instruction", Call ("MoveToSpecialFromRegister", CTy"System", TP[EQ(Mop(Cast F1, LL[bVar"b'20"]), LW(1,1)), Var("Rn",F4), Var("mask", F4)])), ITE(Bop(Or, EQ(Var("mask", F4), LW(0,4)), Bop(Or, Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, Bop(And, EQ(Mop(Cast F1, LL[bVar"b'13"]), LW(0, 1)), Bop(And, EQ(Mop(Cast (FTy 2), LL[bVar"b'7", bVar"b'6"]), LW(0, 2)), EQ(Mop(Cast (FTy 5), LL[bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), LW(0, 5))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "MoveToSpecialFromRegister"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And,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'20"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'10"), Bop(And, Mop(Not, bVar"b'9"), Mop(Not, bVar"b'8")))))))))))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), ITE(Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), LW(15,4)), Bop(And, EQ(Mop(Cast F1, LL[bVar"b'13"]), LW(0,1)), EQ(Mop(Cast F1, LL[bVar"b'11"]), LW(0,1))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"Hint"]),qVar"state"), qVar"state")), Apply (Call ("DecodeHint", ATy(qTy,PTy(CTy"instruction",qTy)), TP[Var("v",F4), Mop(Cast F8, LL[bVar"b'7",bVar"b'6", bVar"b'5",bVar"b'4", bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"])]), qVar"s"))), (Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And,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'20"), Bop(And, Mop(Not, bVar"b'14"), Mop(Not, bVar"b'12"))))))))), Let(Var("mode",FTy 5), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("F",F1), Mop(Cast F1,LL[bVar"b'5"]), Let(Var("I",F1), Mop(Cast F1,LL[bVar"b'6"]), Let(Var("A",F1), Mop(Cast F1,LL[bVar"b'7"]), Let(Var("M",F1), Mop(Cast F1, LL[bVar"b'8"]), Let(Var("imod",FTy 2), Mop(Cast(FTy 2), LL[bVar"b'10", bVar"b'9"]), Let(TP[Var("v",F4), qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4, qTy)), LU), qVar"state"), Let(TP[bVar"v", qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v", F4), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")]), qVar"s"), ITE(bVar"v", TP[Call ("System", CTy"instruction", Call ("ChangeProcessorState", CTy"System", TP[EQ(Var("imod", FTy 2), LW(2, 2)), EQ(Var("imod", FTy 2), LW(3, 2)), EQ(Var("A", F1), LW(1, 1)), EQ(Var("I", F1), LW(1, 1)), EQ(Var("F", F1), LW(1, 1)), ITE(EQ(Var("M", F1), LW(1, 1)), Mop(Some, Var("mode", FTy 5)), LO(FTy 5))])), ITE(Bop(Or, Bop(And, Mop(Not, EQ(Var("mode", FTy 5), LW(0, 5))), EQ(Var("M", F1), LW(0, 1))), Bop(Or, EQ(Bop(Bit, Var("imod", FTy 2), LN 1), EQ(CC[Var("A", F1), Var("I", F1), Var("F", F1)], LW(0, 3))), Bop(Or, EQ(Var("imod", FTy 2), LW(1, 2)), Bop(Or, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s"), Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), LW(15, 4)), Bop(And, EQ(Mop(Cast F1, LL[bVar"b'13"]), LW(0, 1)), EQ(Mop(Cast F1, LL[bVar"b'11"]), LW(0, 1))))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "ChangeProcessorState"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))))))), (Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And,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, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'7"), Bop(And, Mop(Not, bVar"b'6"), Mop(Not, bVar"b'5")))))))))))), Let(Var("J",F1),Mop(Cast F1,LL[bVar"b'4"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumbEE", ATy(qTy,bTy), LU),qVar"s")]), qVar"s"), TP[Bop(And,bVar"v", Mop(Not, Bop(And, EQ(Apply (Call ("CurrentInstrSet", ATy(qTy, CTy"InstrSet"), LU), qVar"s"), LC("InstrSet_Thumb", CTy"InstrSet")), EQ(Var("J",F1), LW(0,1))))), qVar"s"]), ITE(bVar"v", TP[Call ("System", CTy"instruction", Call ("EnterxLeavex", CTy"System", EQ(Var("J",F1), LW(1,1)))), ITE(Bop(Or, Apply (Call ("InITBlock", ATy(qTy,bTy), LU),qVar"s"), Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), LW(15, 4)), Bop(And, EQ(Mop(Cast F1, LL[bVar"b'13"]), LW(0, 1)), Bop(And, EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15, 4)), EQ(Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), LW(15, 4))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "EnterxLeavex"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))), (Bop(And,Mop(Not,bVar"b'26"), Bop(And,bVar"b'25", Bop(And,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, Mop(Not, bVar"b'14"), Mop(Not, bVar"b'12"))))))))), Let(Var("option",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(bVar"GOOD_MATCH", Bop(And, EQ(Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), LW(15,4)), Bop(And, EQ(Mop(Cast F1, LL[bVar"b'13"]), LW(0,1)), EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15,4)))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy), LU),qVar"s")]), qVar"s"), ITE(bVar"v", CS(Mop(Cast F4, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4"]), [(LW(2,4), TP[Const ("ClearExclusive", CTy"instruction"), ITE(Mop(Not, bVar"GOOD_MATCH"), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "CLREX"]), qVar"s"), qVar"s")]), (LW(4,4), TP[Call ("Hint", CTy"instruction", Call ("DataSynchronizationBarrier", CTy"Hint", Var("option", F4))), ITE(Mop(Not, bVar"GOOD_MATCH"), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "DSB"]), qVar"s"), qVar"s")]), (LW(5,4), TP[Call ("Hint", CTy"instruction", Call ("DataMemoryBarrier", CTy"Hint", Var("option", F4))), ITE(Mop(Not, bVar"GOOD_MATCH"), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "DMB"]), qVar"s"), qVar"s")]), (LW(6,4), TP[Call ("Hint", CTy"instruction", Call ("InstructionSynchronizationBarrier", CTy"Hint", Var("option", F4))), ITE(Mop(Not, bVar"GOOD_MATCH"), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "ISB"]), qVar"s"), qVar"s")]), (AVar F4, ITE(Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 7), TP[Call ("Undefined", CTy"instruction", LW(0,32)), qVar"s"], TP[LX(CTy"instruction"), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "Miscellaneous control"]), qVar"s")]))]), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (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", Bop(And, Mop(Not,bVar"b'21"), Bop(And,bVar"b'20", Bop(And, Mop(Not, bVar"b'14"), Mop(Not, bVar"b'12"))))))))), Let(Var("imm8",F8), Mop(Cast F8, LL[bVar"b'7",bVar"b'6",bVar"b'5", bVar"b'4",bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(bVar"GOOD_MATCH", Bop(And, EQ(Mop(Cast F4, LL[bVar"b'19",bVar"b'18", bVar"b'17",bVar"b'16"]), LW(15,4)), Bop(And, EQ(Mop(Cast F1, LL[bVar"b'13"]), LW(0,1)), EQ(Mop(Cast F4, LL[bVar"b'11", bVar"b'10", bVar"b'9", bVar"b'8"]), LW(15,4)))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy), LU),qVar"s")]), qVar"s"), ITE(bVar"v", ITE(Bop(And, Apply (Call ("HaveVirtExt", ATy(qTy, bTy), LU), qVar"s"), Bop(And, EQ(Var("imm8", F8), LW(0,8)), bVar"GOOD_MATCH")), TP[Call ("System", CTy"instruction", Const ("ExceptionReturn", CTy"System")), qVar"s"], Let(TP[bVar"v", qVar"s"], Apply (Call ("CurrentModeIsHyp", ATy(qTy, PTy(bTy, qTy)), LU), ITE(Bop(Or, EQ(Apply (Call ("CurrentInstrSet", ATy(qTy, CTy"InstrSet"), LU), qVar"s"), LC("InstrSet_ThumbEE", CTy"InstrSet")), Bop(Or, Bop(And, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy, bTy), LU), qVar"s"))), Mop(Not, bVar"GOOD_MATCH"))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "SUBS PC, LR, #0"]), qVar"s"), qVar"s")), TP[ITE(bVar"v", Call ("Undefined", CTy"instruction", LW(0, 32)), Call ("Data", CTy"instruction", Call ("ArithLogicImmediate", CTy"Data", TP[LW(2, 4), LT, LW(15, 4), LW(14, 4), Mop(Cast (FTy 12), Var("imm8", F8))]))), qVar"s"])), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (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", Bop(And,bVar"b'21", Bop(And, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'12"), bVar"b'5")))))))), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveVirtExt", ATy(qTy,bTy),LU), qVar"s")]),qVar"s"), ITE(bVar"v", TP[Call ("System", CTy"instruction", Call ("MoveToRegisterFromBankedOrSpecial", CTy"System", TP[EQ(Mop(Cast F1, LL[bVar"b'20"]), LW(1,1)), CC[Mop(Cast F1, LL[bVar"b'4"]), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"])], Var("Rd",F4)])), ITE(Bop(Or, Bop(In, Var("Rd",F4), SL[LW(13,4), LW(15,4)]), Mop(Not, Bop(And, EQ(Mop(Cast F1, LL[bVar"b'13"]), LW(0,1)), Bop(And, EQ(Mop(Cast (FTy 2), LL[bVar"b'7", bVar"b'6"]), LW(0, 2)), EQ(Mop(Cast F4, LL[bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), LW(0, 4)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "MoveToRegisterFromBankedOrSpecial"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))), (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", Bop(And,bVar"b'21", Bop(And, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'12"), Mop(Not, bVar"b'5"))))))))), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy),LU), qVar"s")]),qVar"s"), ITE(bVar"v", TP[Call ("System", CTy"instruction", Call ("MoveToRegisterFromSpecial", CTy"System", TP[EQ(Mop(Cast F1, LL[bVar"b'20"]), LW(1,1)), Var("Rd",F4)])), ITE(Bop(Or, Bop(In, Var("Rd",F4), SL[LW(13,4), LW(15,4)]), Mop(Not, Bop(And, EQ(Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), LW(15, 4)), Bop(And, EQ(Mop(Cast F1, LL[bVar"b'13"]), LW(0, 1)), Bop(And, EQ(Mop(Cast (FTy 2), LL[bVar"b'7", bVar"b'6"]), LW(0, 2)), EQ(Mop(Cast (FTy 5), LL[bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"]), LW(0, 5))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "MoveToRegisterFromSpecial"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))), (Bop(And,bVar"b'26", Bop(And,bVar"b'25", Bop(And,bVar"b'24", Bop(And,bVar"b'23", Bop(And,bVar"b'22", Bop(And,bVar"b'21", Bop(And, Mop(Not, bVar"b'20"), Bop(And, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Mop(Not, bVar"b'12")))))))))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveVirtExt", ATy(qTy,bTy),LU), qVar"s")]),qVar"s"), ITE(bVar"v", TP[Call ("System",CTy"instruction", Call ("HypervisorCall", CTy"System", CC[Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 12), LL[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"])])), ITE(Apply (Call ("InITBlock", ATy(qTy,bTy),LU), qVar"s"), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "HypervisorCall"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"),qVar"s"])))), (Bop(And,bVar"b'26", Bop(And,bVar"b'25", Bop(And,bVar"b'24", Bop(And,bVar"b'23", Bop(And,bVar"b'22", Bop(And,bVar"b'21", Bop(And,bVar"b'20", Bop(And, Mop(Not, bVar"b'14"), Bop(And, Mop(Not, bVar"b'13"), Mop(Not, bVar"b'12")))))))))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Bop(And, Apply (Call ("HaveSecurityExt", ATy(qTy,bTy),LU), qVar"s"), Mop(Not, EQ(Dest ("Architecture", CTy"Architecture", qVar"s"), LC("ARMv6K", CTy"Architecture"))))]), qVar"s"), ITE(bVar"v", TP[Call ("System",CTy"instruction", Call ("SecureMonitorCall", CTy"System", Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]))), ITE(Bop(Or, Bop(And, Apply (Call ("InITBlock", ATy(qTy,bTy), LU),qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy, bTy), LU), qVar"s"))), Mop(Not, EQ(Mop(Cast (FTy 12), LL[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,12)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "SecureMonitorCall"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"),qVar"s"])))), (Bop(And,bVar"b'26", Bop(And,bVar"b'25", Bop(And,bVar"b'24", Bop(And,bVar"b'23", Bop(And,bVar"b'22", Bop(And,bVar"b'21", Bop(And,bVar"b'20", Bop(And, Mop(Not, bVar"b'14"), Bop(And, bVar"b'13", Mop(Not, bVar"b'12")))))))))), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy),LU), qVar"s")]),qVar"s"), TP[ITE(bVar"v", Call ("Undefined", CTy"instruction", Mop(Cast F32, CC[Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 12), LL[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"])])), Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s")),qVar"s"]))), (Bop(And,Mop(Not,bVar"b'14"), Mop(Not,bVar"b'12")), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Mop(Cast F4, LL[bVar"b'25",bVar"b'24", bVar"b'23",bVar"b'22"]), Apply (Call ("HaveThumb2", ATy(qTy,bTy),LU), qVar"state")]),qVar"state"), ITE(bVar"v", TP[Call ("Branch",CTy"instruction", Call ("BranchTarget",CTy"Branch", Mop(SE F32, CC[Mop(Cast F1, LL[bVar"b'26"]), Mop(Cast F1, LL[bVar"b'11"]), Mop(Cast F1, LL[bVar"b'13"]), Mop(Cast(FTy 6), LL[bVar"b'21", bVar"b'20", bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Mop(Cast(FTy 11), LL[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,1)]))), ITE(Apply (Call ("InITBlock", ATy(qTy,bTy),LU), qVar"s"), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS"BranchTarget"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy,CTy"instruction"), LU),qVar"s"),qVar"s"]))), (bVar"b'12", Let(Var("S",F1),Mop(Cast F1,LL[bVar"b'26"]), Let(Var("J2",F1), Mop(Cast F1,LL[bVar"b'11"]), Let(Var("J1",F1), Mop(Cast F1,LL[bVar"b'13"]), Let(Var("L",F1), Mop(Cast F1,LL[bVar"b'14"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy, PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy, qTy)), TP[Var("v",F4), Bop(Or, Bop(And, EQ(Var("L", F1), LW(1, 1)), Bop(And, EQ(Var("J1", F1), LW(1, 1)), EQ(Var("J1", F1), Var("J2", F1)))), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s"))]), qVar"s"), ITE(bVar"v", TP[Let(Var("imm32", F32), Mop(SE F32, CC[Var("S", F1), Mop(BNot, Bop(BXor, Var("J1", F1), Var("S", F1))), Mop(BNot, Bop(BXor, Var("J2", F1), Var("S", F1))), Mop(Cast (FTy 10), 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"]), Mop(Cast (FTy 11), LL[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, 1)]), ITE(EQ(Var("L", F1), LW(1, 1)), Call ("Branch", CTy"instruction", Call ("BranchLinkExchangeImmediate", CTy"Branch", TP[LC("InstrSet_Thumb", CTy"InstrSet"), Var("imm32", F32)])), Call ("Branch", CTy"instruction", Call ("BranchTarget", CTy"Branch", Var("imm32", F32))))), ITE(Bop(And, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy, bTy), LU), qVar"s"))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "BranchTarget or BranchLinkExchangeImmediate"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU), qVar"s"), qVar"s"])))))))), (Bop(And,bVar"b'14",Mop(Not,bVar"b'12")), Let(Var("S",F1),Mop(Cast F1,LL[bVar"b'26"]), Let(Var("J2",F1), Mop(Cast F1,LL[bVar"b'11"]), Let(Var("J1",F1), Mop(Cast F1,LL[bVar"b'13"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)), LU),qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy, PTy(bTy,qTy)), TP[Var("v",F4), Bop(And, Mop(Not, Bop(Or, EQ(Apply (Call ("CurrentInstrSet", ATy(qTy, CTy"InstrSet"), LU), qVar"s"), LC("InstrSet_ThumbEE", CTy"InstrSet")), EQ(Mop(Cast F1, LL[bVar"b'0"]), LW(1, 1)))), ITE(Bop(And, EQ(Var("J1", F1), LW(1, 1)), EQ(Var("J1", F1), Var("J2", F1))), Bop(Ge, Apply (Call ("ArchVersion", ATy(qTy, nTy), LU), qVar"s"), LN 5), Apply (Call ("HaveThumb2", ATy(qTy, bTy), LU), qVar"s")))]), qVar"s"), ITE(bVar"v", TP[Call ("Branch", CTy"instruction", Call ("BranchLinkExchangeImmediate", CTy"Branch", TP[LC("InstrSet_ARM", CTy"InstrSet"), Mop(SE F32, CC[Var("S", F1), Mop(BNot, Bop(BXor, Var("J1", F1), Var("S", F1))), Mop(BNot, Bop(BXor, Var("J2", F1), Var("S", F1))), Mop(Cast (FTy 10), 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"]), Mop(Cast (FTy 10), LL[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"]), LW(0, 2)])])), ITE(Bop(And, Apply (Call ("InITBlock", ATy(qTy, bTy), LU), qVar"s"), Mop(Not, Apply (Call ("LastInITBlock", ATy(qTy, bTy), LU), qVar"s"))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "BranchLinkExchangeImmediate"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))))], Apply (Call ("UndefinedThumb", ATy(qTy,PTy(CTy"instruction",qTy)),LU), qVar"state")), Apply (Call ("UndefinedThumb", ATy(qTy,PTy(CTy"instruction",qTy)),LU), qVar"state"))), (Bop(And,bVar"b'31", Bop(And,bVar"b'30",Bop(And,bVar"b'29",bVar"b'28"))), ITB([(Mop(Not,bVar"b'25"), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Let(Var("S",F1),Mop(Cast F1,LL[bVar"b'20"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy), LU),qVar"s")]), qVar"s"), ITE(bVar"v", Let(Var("imm12",FTy 12), CC[Mop(Cast F1, LL[bVar"b'26"]), Mop(Cast(FTy 3), LL[bVar"b'14", bVar"b'13", bVar"b'12"]), Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])], Let(bVar"setflags", EQ(Var("S",F1), LW(1,1)), CS(TP[Mop(Cast F4, LL[bVar"b'24", bVar"b'23", bVar"b'22", bVar"b'21"]), Var("Rn", F4), Var("Rd", F4), Var("S",F1)], [(TP[LW(0,4), AVar F4, LW(15,4), LW(1,1)], TP[Call ("Data", CTy"instruction", Call ("TestCompareImmediate", CTy"Data", TP[LW(0, 2), Var("Rn", F4), Var("imm12", FTy 12)])), ITE(Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "TST (immediate)"]), qVar"s"), qVar"s")]), (TP[LW(0,4), AVar (PTy(F4, PTy(F4, F1)))], TP[Call ("Data", CTy"instruction", Call ("ArithLogicImmediate", CTy"Data", TP[LW(0, 4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("imm12", FTy 12)])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(13, 4)), Bop(Or, Bop(And, EQ(Var("Rd", F4), LW(15, 4)), Mop(Not, bVar"setflags")), Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "AND (immediate)"]), qVar"s"), qVar"s")]), (TP[LW(1,4), AVar (PTy(F4, PTy(F4, F1)))], TP[Call ("Data", CTy"instruction", Call ("ArithLogicImmediate", CTy"Data", TP[LW(14, 4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("imm12", FTy 12)])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)])), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "BIC (immediate)"]), qVar"s"), qVar"s")]), (TP[LW(2,4), LW(15,4), AVar (PTy(F4, F1))], TP[Call ("Data", CTy"instruction", Call ("Move", CTy"Data", TP[bVar"setflags", LF, Var("Rd", F4), Var("imm12", FTy 12)])), ITE(Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "MOV (immediate)"]), qVar"s"), qVar"s")]), (TP[LW(2,4), AVar (PTy(F4, PTy(F4, F1)))], TP[Call ("Data", CTy"instruction", Call ("ArithLogicImmediate", CTy"Data", TP[LW(12, 4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("imm12", FTy 12)])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), EQ(Var("Rn", F4), LW(13, 4))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "ORR (immediate)"]), qVar"s"), qVar"s")]), (TP[LW(3,4), LW(15,4), AVar (PTy(F4, F1))], TP[Call ("Data", CTy"instruction", Call ("Move", CTy"Data", TP[bVar"setflags", LT, Var("Rd", F4), Var("imm12", FTy 12)])), ITE(Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "MVN (immediate)"]), qVar"s"), qVar"s")]), (TP[LW(3,4), AVar (PTy(F4, PTy(F4, F1)))], TP[Call ("Data", CTy"instruction", Call ("ArithLogicImmediate", CTy"Data", TP[LW(15, 4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("imm12", FTy 12)])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), EQ(Var("Rn", F4), LW(13, 4))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "ORN (immediate)"]), qVar"s"), qVar"s")]), (TP[LW(4,4), AVar F4, LW(15,4), LW(1,1)], TP[Call ("Data", CTy"instruction", Call ("TestCompareImmediate", CTy"Data", TP[LW(1, 2), Var("Rn", F4), Var("imm12", FTy 12)])), ITE(Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "TEQ (immediate)"]), qVar"s"), qVar"s")]), (TP[LW(4,4), AVar (PTy(F4, PTy(F4, F1)))], TP[Call ("Data", CTy"instruction", Call ("ArithLogicImmediate", CTy"Data", TP[LW(1, 4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("imm12", FTy 12)])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(13, 4)), Bop(Or, Bop(And, EQ(Var("Rd", F4), LW(15, 4)), Mop(Not, bVar"setflags")), Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "EOR (immediate)"]), qVar"s"), qVar"s")]), (TP[LW(8,4), AVar F4, LW(15,4), LW(1,1)], TP[Call ("Data", CTy"instruction", Call ("TestCompareImmediate", CTy"Data", TP[LW(3, 2), Var("Rn", F4), Var("imm12", FTy 12)])), ITE(EQ(Var("Rn", F4), LW(15, 4)), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "CMN (immediate)"]), qVar"s"), qVar"s")]), (TP[LW(8,4), AVar (PTy(F4, PTy(F4, F1)))], TP[Call ("Data", CTy"instruction", Call ("ArithLogicImmediate", CTy"Data", TP[LW(4, 4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("imm12", FTy 12)])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(13, 4)), Bop(Or, Bop(And, EQ(Var("Rd", F4), LW(15, 4)), Mop(Not, bVar"setflags")), EQ(Var("Rn", F4), LW(15, 4)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "ADD (immediate)"]), qVar"s"), qVar"s")]), (TP[LW(10,4), AVar (PTy(F4, PTy(F4, F1)))], TP[Call ("Data", CTy"instruction", Call ("ArithLogicImmediate", CTy"Data", TP[LW(5, 4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("imm12", FTy 12)])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)])), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "ADC (immediate)"]), qVar"s"), qVar"s")]), (TP[LW(11,4), AVar (PTy(F4, PTy(F4, F1)))], TP[Call ("Data", CTy"instruction", Call ("ArithLogicImmediate", CTy"Data", TP[LW(6, 4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("imm12", FTy 12)])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)])), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "SBC (immediate)"]), qVar"s"), qVar"s")]), (TP[LW(13,4), AVar F4, LW(15,4), LW(1,1)], TP[Call ("Data", CTy"instruction", Call ("TestCompareImmediate", CTy"Data", TP[LW(2, 2), Var("Rn", F4), Var("imm12", FTy 12)])), ITE(EQ(Var("Rn", F4), LW(15, 4)), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "CMP (immediate)"]), qVar"s"), qVar"s")]), (TP[LW(13,4), AVar (PTy(F4, PTy(F4, F1)))], TP[Call ("Data", CTy"instruction", Call ("ArithLogicImmediate", CTy"Data", TP[LW(2, 4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("imm12", FTy 12)])), ITE(Bop(Or, EQ(Var("Rd", F4), LW(13, 4)), Bop(Or, Bop(And, EQ(Var("Rd", F4), LW(15, 4)), Mop(Not, bVar"setflags")), EQ(Var("Rn", F4), LW(15, 4)))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "SUB (immediate)"]), qVar"s"), qVar"s")]), (TP[LW(14,4), AVar (PTy(F4, PTy(F4, F1)))], TP[Call ("Data", CTy"instruction", Call ("ArithLogicImmediate", CTy"Data", TP[LW(3, 4), bVar"setflags", Var("Rd", F4), Var("Rn", F4), Var("imm12", FTy 12)])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)])), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "RSB (immediate)"]), qVar"s"), qVar"s")]), (AVar (PTy(F4, PTy(F4, PTy(F4, F1)))), TP[Call ("Undefined", CTy"instruction", LW(0, 32)), qVar"s"])]))), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))))), (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"), Mop(Not,bVar"b'20")))))), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy),LU), qVar"s")]),qVar"s"), ITE(bVar"v", TP[Call ("Data",CTy"instruction", Call ("AddSub",CTy"Data", TP[LF,Var("Rd",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), CC[Mop(Cast F1, LL[bVar"b'26"]), Mop(Cast(FTy 3), LL[bVar"b'14", bVar"b'13", bVar"b'12"]), Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])]])), ITE(Bop(In,Var("Rd",F4), SL[LW(13,4),LW(15,4)]), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "ADDW (immediate)"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"),qVar"s"]))))), (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", Mop(Not,bVar"b'20")))))), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy),LU), qVar"s")]),qVar"s"), ITE(bVar"v", TP[Call ("Data",CTy"instruction", Call ("AddSub",CTy"Data", TP[LT,Var("Rd",F4), Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), CC[Mop(Cast F1, LL[bVar"b'26"]), Mop(Cast(FTy 3), LL[bVar"b'14", bVar"b'13", bVar"b'12"]), Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])]])), ITE(Bop(In,Var("Rd",F4), SL[LW(13,4),LW(15,4)]), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "SUBW (immediate)"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"),qVar"s"]))))), (Bop(And,bVar"b'25", Bop(And,Mop(Not,bVar"b'24"), Bop(And,bVar"b'22", Bop(And,Mop(Not,bVar"b'21"), Mop(Not,bVar"b'20"))))), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do",ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy),LU), qVar"s")]),qVar"s"), ITE(bVar"v", TP[Call ("Data",CTy"instruction", Call ("MoveHalfword", CTy"Data", TP[EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1,1)), Var("Rd",F4), CC[Mop(Cast F4, LL[bVar"b'19", bVar"b'18", bVar"b'17", bVar"b'16"]), Mop(Cast F1, LL[bVar"b'26"]), Mop(Cast(FTy 3), LL[bVar"b'14", bVar"b'13", bVar"b'12"]), Mop(Cast F8, LL[bVar"b'7", bVar"b'6", bVar"b'5", bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])]])), ITE(Bop(In,Var("Rd",F4), SL[LW(13,4),LW(15,4)]), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "MOVT or MOVW (immediate)"]), qVar"s"),qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"),qVar"s"]))))), (Bop(And,bVar"b'25", Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'22"), Bop(And,bVar"b'21", Bop(And,Mop(Not,bVar"b'20"), Bop(And,Mop(Not,bVar"b'14"), Bop(And, Mop(Not,bVar"b'13"), Bop(And, Mop(Not, bVar"b'12"), Bop(And, Mop(Not, bVar"b'7"), Mop(Not, bVar"b'6")))))))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Let(Var("sat_imm",F4), Mop(Cast F4, LL[bVar"b'3",bVar"b'2",bVar"b'1", bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy), LU),qVar"s")]), qVar"s"), ITE(bVar"v", TP[Let(bVar"unsigned", EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1,1)), Call ("Media", CTy"instruction", Call ("Saturate16", CTy"Media", TP[ITE(bVar"unsigned", Mop(Cast nTy, Var("sat_imm", F4)), Bop(Add, Mop(Cast nTy, Var("sat_imm", F4)), LN 1)), bVar"unsigned", Var("Rd", F4), Var("Rn", F4)]))), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, Bop(And, EQ(Mop(Cast F1, LL[bVar"b'26"]), LW(0, 1)), EQ(Mop(Cast (FTy 2), LL[bVar"b'5", bVar"b'4"]), LW(0, 2)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "Saturate16"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))))), (Bop(And,bVar"b'25", Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'22"), Mop(Not,bVar"b'20")))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Let(Var("sat_imm",FTy 5), Mop(Cast(FTy 5), LL[bVar"b'4",bVar"b'3",bVar"b'2", bVar"b'1",bVar"b'0"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10", bVar"b'9",bVar"b'8"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy), LU),qVar"s")]), qVar"s"), ITE(bVar"v", TP[Let(bVar"unsigned", EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1,1)), Let(TP[Var("shift_t", CTy"SRType"), nVar"shift_n"], Call ("DecodeImmShift", PTy(CTy"SRType", nTy), TP[CC[Mop(Cast F1, LL[bVar"b'21"]), LW(0, 1)], CC[Mop(Cast (FTy 3), LL[bVar"b'14", bVar"b'13", bVar"b'12"]), Mop(Cast (FTy 2), LL[bVar"b'7", bVar"b'6"])]]), Call ("Media", CTy"instruction", Call ("Saturate", CTy"Media", TP[Var("shift_t", CTy"SRType"), nVar"shift_n", ITE(bVar"unsigned", Mop(Cast nTy, Var("sat_imm", FTy 5)), Bop(Add, Mop(Cast nTy, Var("sat_imm", FTy 5)), LN 1)), bVar"unsigned", Var("Rd", F4), Var("Rn", F4)])))), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Mop(Not, Bop(And, EQ(Mop(Cast F1, LL[bVar"b'26"]), LW(0, 1)), EQ(Mop(Cast F1, LL[bVar"b'5"]), LW(0, 1)))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy,qTy), TP[Var("mc", CTy"MachineCode"), LS "Saturate"]), qVar"s"), qVar"s")], TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))))), (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'20"))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy),LU), qVar"s")]),qVar"s"), ITE(bVar"v", Let(nVar"widthminus1", Mop(Cast nTy, Mop(Cast(FTy 5), LL[bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])), Let(nVar"lsbit", Mop(Cast nTy, CC[Mop(Cast (FTy 3), LL[bVar"b'14", bVar"b'13", bVar"b'12"]), Mop(Cast (FTy 2), LL[bVar"b'7", bVar"b'6"])]), TP[Call ("Media", CTy"instruction", Call ("BitFieldExtract", CTy"Media", TP[EQ(Mop(Cast F1, LL[bVar"b'23"]), LW(1, 1)), Var("Rd", F4), Var("Rn", F4), nVar"lsbit", nVar"widthminus1"])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(In, Var("Rn", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, Bop(Lt, LN 31, Bop(Add, nVar"lsbit", nVar"widthminus1")), Mop(Not, Bop(And, EQ(Mop(Cast F1, LL[bVar"b'26"]), LW(0, 1)), EQ(Mop(Cast F1, LL[bVar"b'5"]), LW(0, 1))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "BitFieldExtract"]), qVar"s"), qVar"s")])), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"])))))), (Bop(And,bVar"b'25", Bop(And,bVar"b'24", Bop(And,Mop(Not,bVar"b'23"), Bop(And,bVar"b'22", Bop(And,bVar"b'21", Mop(Not,bVar"b'20")))))), Let(Var("Rn",F4), Mop(Cast F4, LL[bVar"b'19",bVar"b'18",bVar"b'17", bVar"b'16"]), Let(Var("Rd",F4), Mop(Cast F4, LL[bVar"b'11",bVar"b'10",bVar"b'9", bVar"b'8"]), Let(TP[Var("v",F4),qVar"s"], Apply (Call ("ThumbCondition", ATy(qTy,PTy(F4,qTy)),LU), qVar"state"), Let(TP[bVar"v",qVar"s"], Apply (Call ("Do", ATy(qTy,PTy(bTy,qTy)), TP[Var("v",F4), Apply (Call ("HaveThumb2", ATy(qTy,bTy),LU), qVar"s")]),qVar"s"), ITE(bVar"v", Let(nVar"msbit", Mop(Cast nTy, Mop(Cast(FTy 5), LL[bVar"b'4", bVar"b'3", bVar"b'2", bVar"b'1", bVar"b'0"])), Let(nVar"lsbit", Mop(Cast nTy, CC[Mop(Cast (FTy 3), LL[bVar"b'14", bVar"b'13", bVar"b'12"]), Mop(Cast (FTy 2), LL[bVar"b'7", bVar"b'6"])]), TP[Call ("Media", CTy"instruction", Call ("BitFieldClearOrInsert", CTy"Media", TP[Var("Rd", F4), Var("Rn", F4), nVar"lsbit", nVar"msbit"])), ITE(Bop(Or, Bop(In, Var("Rd", F4), SL[LW(13, 4), LW(15, 4)]), Bop(Or, EQ(Var("Rn", F4), LW(13, 4)), Bop(Or, Bop(Lt, nVar"msbit", nVar"lsbit"), Mop(Not, Bop(And, EQ(Mop(Cast F1, LL[bVar"b'26"]), LW(0, 1)), EQ(Mop(Cast F1, LL[bVar"b'5"]), LW(0, 1))))))), Apply (Call ("DECODE_UNPREDICTABLE", ATy(qTy, qTy), TP[Var("mc", CTy"MachineCode"), LS "BitFieldClearOrInsert"]), qVar"s"), qVar"s")])), TP[Apply (Call ("Skip", ATy(qTy, CTy"instruction"), LU),qVar"s"), qVar"s"]))))))], Apply (Call ("UndefinedThumb", ATy(qTy,PTy(CTy"instruction",qTy)),LU), qVar"state")))], Apply (Call ("UndefinedThumb", ATy(qTy,PTy(CTy"instruction",qTy)),LU),qVar"state")))))) ; val Decode_def = Def ("Decode",Var("mc",CTy"MachineCode"), Close (qVar"state", CS(Var("mc",CTy"MachineCode"), [(Call("ARM",CTy"MachineCode",Var("w",F32)), Apply (Call ("DecodeARM",ATy(qTy,PTy(CTy"instruction",qTy)), Var("w",F32)),qVar"state")), (Call("Thumb",CTy"MachineCode",Var("h",F16)), Apply (Call ("DecodeThumb",ATy(qTy,PTy(CTy"instruction",qTy)), Var("h",F16)),qVar"state")), (Call("ThumbEE",CTy"MachineCode",Var("h",F16)), Apply (Call ("DecodeThumbEE",ATy(qTy,PTy(CTy"instruction",qTy)), Var("h",F16)),qVar"state")), (Call("Thumb2",CTy"MachineCode",Var("hs",PTy(F16,F16))), Apply (Call ("DecodeThumb2",ATy(qTy,PTy(CTy"instruction",qTy)), Var("hs",PTy(F16,F16))),qVar"state")), (Call("BadCode",CTy"MachineCode",sVar"s"), Apply (Call ("raise'exception",ATy(qTy,PTy(CTy"instruction",qTy)), Call("UNPREDICTABLE",CTy"exception",sVar"s")),qVar"state"))]))) ; val Next_def = Def ("Next",qVar"state", Let(TP[Var("v",CTy"MachineCode"),qVar"s"], Apply (Const("Fetch",ATy(qTy,PTy(CTy"MachineCode",qTy))),qVar"state"), Apply (Call("ITAdvance",ATy(qTy,qTy),LU), Let(TP[Var("v",CTy"instruction"),qVar"s"], Apply (Call ("Decode",ATy(qTy,PTy(CTy"instruction",qTy)), Var("v",CTy"MachineCode")),qVar"s"), Apply (Call("Run",ATy(qTy,qTy),Var("v",CTy"instruction")), qVar"s"))))) ; val EncodeARMImmediate_aux_def = Def ("EncodeARMImmediate_aux",TP[Var("n",F4),Var("x",F32)], ITB([(EQ(EX(Var("x",F32),LN 31,LN 8,FTy 24),LW(0,24)), Mop(Some, CC[Bop(Sub,LW(15,4),Var("n",F4)), EX(Var("x",F32),LN 7,LN 0,F8)])), (EQ(Var("n",F4),LW(0,4)),LO(FTy 12))], Call ("EncodeARMImmediate_aux",OTy(FTy 12), TP[Bop(Sub,Var("n",F4),LW(1,4)),Bop(Rol,Var("x",F32),LN 2)]))) ; val EncodeARMImmediate_def = Def ("EncodeARMImmediate",Var("x",F32), Call("EncodeARMImmediate_aux",OTy(FTy 12),TP[LW(15,4),Var("x",F32)])) ; val EncodeImmShift_def = Def ("EncodeImmShift",TP[Var("shift_t",CTy"SRType"),nVar"shift_n"], CS(Var("shift_t",CTy"SRType"), [(LC("SRType_LSL",CTy"SRType"), TP[LW(0,2),Mop(Cast(FTy 5),nVar"shift_n")]), (LC("SRType_LSR",CTy"SRType"), TP[LW(1,2), ITE(EQ(nVar"shift_n",LN 32),LW(0,5), Mop(Cast(FTy 5),nVar"shift_n"))]), (LC("SRType_ASR",CTy"SRType"), TP[LW(2,2), ITE(EQ(nVar"shift_n",LN 32),LW(0,5), Mop(Cast(FTy 5),nVar"shift_n"))]), (LC("SRType_ROR",CTy"SRType"), TP[LW(3,2),Mop(Cast(FTy 5),nVar"shift_n")]), (LC("SRType_RRX",CTy"SRType"),TP[LW(3,2),LW(0,5)])])) ; val EncodeRegShift_def = Def ("EncodeRegShift",Var("shift_t",CTy"SRType"), CS(Var("shift_t",CTy"SRType"), [(LC("SRType_LSL",CTy"SRType"),LW(0,2)), (LC("SRType_LSR",CTy"SRType"),LW(1,2)), (LC("SRType_ASR",CTy"SRType"),LW(2,2)), (LC("SRType_ROR",CTy"SRType"),LW(3,2)), (LC("SRType_RRX",CTy"SRType"),LX(FTy 2))])) ; val EncodeAddSubOpc_def = Def ("EncodeAddSubOpc",Var("opc",FTy 2), CS(Var("opc",FTy 2), [(LW(0,2),LW(1,3)),(LW(1,2),LW(2,3)),(LW(2,2),LW(6,3)), (LW(3,2),LW(5,3))])) ; val EncodeVFPImmediate_def = Def ("EncodeVFPImmediate",TP[Var("imm64",F64),bVar"single_register"], ITB([(bVar"single_register", ITE(Bop(And,EQ(EX(Var("imm64",F64),LN 18,LN 0,FTy 19),LW(0,19)), Bop(And, Bop(In,EX(Var("imm64",F64),LN 29,LN 25,FTy 5), SL[LW(0,5),LW(31,5)]), Bop(And, Mop(Not, EQ(Bop(Bit,Var("imm64",F64),LN 25), Bop(Bit,Var("imm64",F64),LN 30))), EQ(EX(Var("imm64",F64),LN 63,LN 32,F32),LW(0,32))))), Mop(Some, CC[EX(Var("imm64",F64),LN 31,LN 31,F1), EX(Var("imm64",F64),LN 25,LN 25,F1), EX(Var("imm64",F64),LN 24,LN 19,FTy 6)]),LO F8)), (Bop(And,EQ(EX(Var("imm64",F64),LN 47,LN 0,FTy 48),LW(0,48)), Bop(And, Bop(In,EX(Var("imm64",F64),LN 61,LN 54,F8), SL[LW(0,8),LW(255,8)]), Mop(Not, EQ(Bop(Bit,Var("imm64",F64),LN 61), Bop(Bit,Var("imm64",F64),LN 62))))), Mop(Some, CC[EX(Var("imm64",F64),LN 63,LN 63,F1), EX(Var("imm64",F64),LN 54,LN 54,F1), EX(Var("imm64",F64),LN 53,LN 48,FTy 6)]))],LO F8)) ; val EncodeVFPReg_def = Def ("EncodeVFPReg",TP[Var("d",FTy 5),bVar"single_register"], ITE(bVar"single_register", TP[EX(Var("d",FTy 5),LN 0,LN 0,F1),EX(Var("d",FTy 5),LN 4,LN 1,F4)], TP[EX(Var("d",FTy 5),LN 4,LN 4,F1),EX(Var("d",FTy 5),LN 3,LN 0,F4)])) ; val e_branch_def = Def ("e_branch",TP[Var("c",F4),Var("ast",CTy"Branch")], CS(Var("ast",CTy"Branch"), [(Call("BranchTarget",CTy"Branch",Var("imm32",F32)), ITE(Bop(And,Bop(Le,Mop(Neg,LW(33554432,32)),Var("imm32",F32)), Bop(And,Bop(Le,Var("imm32",F32),LW(33554428,32)), Call("Aligned",bTy,TP[Var("imm32",F32),LN 4]))), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(10,4), EX(Var("imm32",F32),LN 25,LN 2,FTy 24)]), Call("BadCode",CTy"MachineCode",LS"B: bad offset"))), (Call("BranchExchange",CTy"Branch",Var("Rm",F4)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(1245169,24),Var("Rm",F4)])), (Call ("BranchLinkExchangeImmediate",CTy"Branch", TP[Var("targetInstrSet",CTy"InstrSet"),Var("imm32",F32)]), ITE(EQ(Var("c",F4),LW(14,4)), ITB([(EQ(Var("targetInstrSet",CTy"InstrSet"), LC("InstrSet_ARM",CTy"InstrSet")), ITE(Bop(And, Bop(Le,Mop(Neg,LW(33554432,32)),Var("imm32",F32)), Bop(And, Bop(Le,Var("imm32",F32),LW(33554428,32)), Call ("Aligned",bTy,TP[Var("imm32",F32),LN 4]))), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(11,4), EX(Var("imm32",F32),LN 25,LN 2,FTy 24)]), Call("BadCode",CTy"MachineCode",LS"BL: bad offset"))), (Bop(And, Bop(Le,Mop(Neg,LW(33554432,32)),Var("imm32",F32)), Bop(And,Bop(Le,Var("imm32",F32),LW(33554430,32)), Call("Aligned",bTy,TP[Var("imm32",F32),LN 2]))), Call ("ARM",CTy"MachineCode", CC[LW(125,7),EX(Var("imm32",F32),LN 1,LN 1,F1), EX(Var("imm32",F32),LN 25,LN 2,FTy 24)]))], Call ("BadCode",CTy"MachineCode", LS"BLX (immediate): bad offset")), Call("BadCode",CTy"MachineCode",LS"BLX (immediate)"))), (Call("BranchLinkExchangeRegister",CTy"Branch",Var("Rm",F4)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(1245171,24),Var("Rm",F4)])), (Call ("CompareBranch",CTy"Branch", TP[bVar"nonzero",Var("n",F4),Var("imm32",F32)]), Call("BadCode",CTy"MachineCode",LS"CBZ")), (Call ("TableBranchByte",CTy"Branch", TP[bVar"is_tbh",Var("Rm",F4),Var("Rn",F4)]), Call("BadCode",CTy"MachineCode",LS"CBZ")), (Call("CheckArray",CTy"Branch",TP[Var("Rm",F4),Var("n",F4)]), Call("BadCode",CTy"MachineCode",LS"CHKA")), (Call ("HandlerBranchLink",CTy"Branch", TP[bVar"generate_link",Var("handler_offset",F32)]), Call("BadCode",CTy"MachineCode",LS"HB{L}")), (Call ("HandlerBranchLinkParameter",CTy"Branch", TP[Var("imm32",F32),Var("handler_offset",F32)]), Call("BadCode",CTy"MachineCode",LS"HBLP")), (Call ("HandlerBranchParameter",CTy"Branch", TP[Var("imm32",F32),Var("handler_offset",F32)]), Call("BadCode",CTy"MachineCode",LS"CBZ"))])) ; val e_vfp_def = Def ("e_vfp",TP[Var("c",F4),Var("ast",CTy"VFP")], CS(Var("ast",CTy"VFP"), [(Call("vmrs",CTy"VFP",Var("t",F4)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(3825,12),Var("t",F4),LW(2576,12)])), (Call("vmsr",CTy"VFP",Var("t",F4)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(3809,12),Var("t",F4),LW(2576,12)])), (Call ("vcmp",CTy"VFP", TP[bVar"dp_operation",Var("d",FTy 5),Mop(Some,Var("m",FTy 5))]), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),Mop(Not,bVar"dp_operation")]), Let(TP[Var("M",F1),Var("Vm",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("m",FTy 5),Mop(Not,bVar"dp_operation")]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(29,5),Var("D",F1),LW(52,6), Var("Vd",F4),LW(5,3), Mop(Cast F1,bVar"dp_operation"),LW(3,2),Var("M",F1), LW(0,1),Var("Vm",F4)])))), (Call ("vcmp",CTy"VFP",TP[bVar"dp_operation",Var("d",FTy 5),LO(FTy 5)]), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),Mop(Not,bVar"dp_operation")]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(29,5),Var("D",F1),LW(53,6),Var("Vd",F4), LW(5,3),Mop(Cast F1,bVar"dp_operation"),LW(192,8)]))), (Call ("vcvt_float",CTy"VFP", TP[bVar"double_to_single",Var("d",FTy 5),Var("m",FTy 5)]), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),bVar"double_to_single"]), Let(TP[Var("M",F1),Var("Vm",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("m",FTy 5),Mop(Not,bVar"double_to_single")]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(29,5),Var("D",F1),LW(55,6), Var("Vd",F4),LW(5,3), Mop(Cast F1,bVar"double_to_single"),LW(3,2), Var("M",F1),LW(0,1),Var("Vm",F4)])))), (Call ("vcvt_from_integer",CTy"VFP", TP[bVar"dp_operation",bVar"unsigned",Var("d",FTy 5), Var("m",FTy 5)]), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),Mop(Not,bVar"dp_operation")]), Let(TP[Var("M",F1),Var("Vm",F4)], Call("EncodeVFPReg",PTy(F1,F4),TP[Var("m",FTy 5),LT]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(29,5),Var("D",F1),LW(56,6), Var("Vd",F4),LW(5,3), Mop(Cast F1,bVar"dp_operation"), Mop(Cast F1,Mop(Not,bVar"unsigned")),LW(1,1), Var("M",F1),LW(0,1),Var("Vm",F4)])))), (Call ("vcvt_to_integer",CTy"VFP", TP[bVar"dp_operation",bVar"unsigned",bVar"round_zero", Var("d",FTy 5),Var("m",FTy 5)]), Let(TP[Var("D",F1),Var("Vd",F4)], Call("EncodeVFPReg",PTy(F1,F4),TP[Var("d",FTy 5),LT]), Let(TP[Var("M",F1),Var("Vm",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("m",FTy 5),Mop(Not,bVar"dp_operation")]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(29,5),Var("D",F1),LW(30,5), Mop(Cast F1,Mop(Not,bVar"unsigned")),Var("Vd",F4), LW(5,3),Mop(Cast F1,bVar"dp_operation"), Mop(Cast F1,bVar"round_zero"),LW(1,1),Var("M",F1), LW(0,1),Var("Vm",F4)])))), (Call ("vmov_imm",CTy"VFP", TP[bVar"single_register",Var("d",FTy 5),Var("imm64",F64)]), CS(Call ("EncodeVFPImmediate",OTy F8, TP[Var("imm64",F64),bVar"single_register"]), [(Mop(Some,Var("v#0",F8)), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),bVar"single_register"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(29,5),Var("D",F1),LW(3,2), EX(Var("v#0",F8),LN 7,LN 4,F4),Var("Vd",F4), LW(5,3), Mop(Cast F1,Mop(Not,bVar"single_register")), LW(0,4),EX(Var("v#0",F8),LN 3,LN 0,F4)]))), (LO F8,Call("BadCode",CTy"MachineCode",LS"VMOV (immediate)"))])), (Call ("vmov",CTy"VFP", TP[bVar"single_register",Var("d",FTy 5),Var("m",FTy 5)]), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),bVar"single_register"]), Let(TP[Var("M",F1),Var("Vm",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("m",FTy 5),bVar"single_register"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(29,5),Var("D",F1),LW(48,6), Var("Vd",F4),LW(5,3), Mop(Cast F1,Mop(Not,bVar"single_register")),LW(1,2), Var("M",F1),LW(0,1),Var("Vm",F4)])))), (Call ("vmov_single",CTy"VFP", TP[bVar"to_arm_register",Var("t",F4),Var("n",FTy 5)]), Let(TP[Var("N",F1),Var("Vn",F4)], Call("EncodeVFPReg",PTy(F1,F4),TP[Var("n",FTy 5),LT]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(112,7), Mop(Cast F1,bVar"to_arm_register"),Var("Vn",F4), Var("t",F4),LW(10,4),Var("N",F1),LW(16,7)]))), (Call ("vmov_two_singles",CTy"VFP", TP[bVar"to_arm_registers",Var("t",F4),Var("t2",F4), Var("m",FTy 5)]), Let(TP[Var("M",F1),Var("Vm",F4)], Call("EncodeVFPReg",PTy(F1,F4),TP[Var("m",FTy 5),LT]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(98,7), Mop(Cast F1,bVar"to_arm_registers"),Var("t2",F4), Var("t",F4),LW(40,6),Var("M",F1),LW(1,1),Var("Vm",F4)]))), (Call ("vmov_double",CTy"VFP", TP[bVar"to_arm_registers",Var("t",F4),Var("t2",F4), Var("m",FTy 5)]), Let(TP[Var("M",F1),Var("Vm",F4)], Call("EncodeVFPReg",PTy(F1,F4),TP[Var("m",FTy 5),LF]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(98,7), Mop(Cast F1,bVar"to_arm_registers"),Var("t2",F4), Var("t",F4),LW(44,6),Var("M",F1),LW(1,1),Var("Vm",F4)]))), (Call ("vabs",CTy"VFP", TP[bVar"dp_operation",Var("d",FTy 5),Var("m",FTy 5)]), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),Mop(Not,bVar"dp_operation")]), Let(TP[Var("M",F1),Var("Vm",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("m",FTy 5),Mop(Not,bVar"dp_operation")]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(29,5),Var("D",F1),LW(48,6), Var("Vd",F4),LW(5,3), Mop(Cast F1,bVar"dp_operation"),LW(3,2),Var("M",F1), LW(0,1),Var("Vm",F4)])))), (Call ("vneg",CTy"VFP", TP[bVar"dp_operation",Var("d",FTy 5),Var("m",FTy 5)]), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),Mop(Not,bVar"dp_operation")]), Let(TP[Var("M",F1),Var("Vm",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("m",FTy 5),Mop(Not,bVar"dp_operation")]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(29,5),Var("D",F1),LW(49,6), Var("Vd",F4),LW(5,3), Mop(Cast F1,bVar"dp_operation"),LW(1,2),Var("M",F1), LW(0,1),Var("Vm",F4)])))), (Call ("vsqrt",CTy"VFP", TP[bVar"dp_operation",Var("d",FTy 5),Var("m",FTy 5)]), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),Mop(Not,bVar"dp_operation")]), Let(TP[Var("M",F1),Var("Vm",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("m",FTy 5),Mop(Not,bVar"dp_operation")]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(29,5),Var("D",F1),LW(49,6), Var("Vd",F4),LW(5,3), Mop(Cast F1,bVar"dp_operation"),LW(3,2),Var("M",F1), LW(0,1),Var("Vm",F4)])))), (Call ("vadd",CTy"VFP", TP[bVar"dp_operation",Var("d",FTy 5),Var("n",FTy 5), Var("m",FTy 5)]), Let(bVar"single_register",Mop(Not,bVar"dp_operation"), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),bVar"single_register"]), Let(TP[Var("N",F1),Var("Vn",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("n",FTy 5),bVar"single_register"]), Let(TP[Var("M",F1),Var("Vm",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("m",FTy 5),bVar"single_register"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(28,5),Var("D",F1),LW(3,2), Var("Vn",F4),Var("Vd",F4),LW(5,3), Mop(Cast F1,bVar"dp_operation"),Var("N",F1), LW(0,1),Var("M",F1),LW(0,1),Var("Vm",F4)])))))), (Call ("vsub",CTy"VFP", TP[bVar"dp_operation",Var("d",FTy 5),Var("n",FTy 5), Var("m",FTy 5)]), Let(bVar"single_register",Mop(Not,bVar"dp_operation"), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),bVar"single_register"]), Let(TP[Var("N",F1),Var("Vn",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("n",FTy 5),bVar"single_register"]), Let(TP[Var("M",F1),Var("Vm",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("m",FTy 5),bVar"single_register"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(28,5),Var("D",F1),LW(3,2), Var("Vn",F4),Var("Vd",F4),LW(5,3), Mop(Cast F1,bVar"dp_operation"),Var("N",F1), LW(1,1),Var("M",F1),LW(0,1),Var("Vm",F4)])))))), (Call ("vmul",CTy"VFP", TP[bVar"dp_operation",Var("d",FTy 5),Var("n",FTy 5), Var("m",FTy 5)]), Let(bVar"single_register",Mop(Not,bVar"dp_operation"), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),bVar"single_register"]), Let(TP[Var("N",F1),Var("Vn",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("n",FTy 5),bVar"single_register"]), Let(TP[Var("M",F1),Var("Vm",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("m",FTy 5),bVar"single_register"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(28,5),Var("D",F1),LW(2,2), Var("Vn",F4),Var("Vd",F4),LW(5,3), Mop(Cast F1,bVar"dp_operation"),Var("N",F1), LW(0,1),Var("M",F1),LW(0,1),Var("Vm",F4)])))))), (Call ("vdiv",CTy"VFP", TP[bVar"dp_operation",Var("d",FTy 5),Var("n",FTy 5), Var("m",FTy 5)]), Let(bVar"single_register",Mop(Not,bVar"dp_operation"), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),bVar"single_register"]), Let(TP[Var("N",F1),Var("Vn",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("n",FTy 5),bVar"single_register"]), Let(TP[Var("M",F1),Var("Vm",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("m",FTy 5),bVar"single_register"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(29,5),Var("D",F1),LW(0,2), Var("Vn",F4),Var("Vd",F4),LW(5,3), Mop(Cast F1,bVar"dp_operation"),Var("N",F1), LW(0,1),Var("M",F1),LW(0,1),Var("Vm",F4)])))))), (Call ("vneg_mul",CTy"VFP", TP[bVar"dp_operation",Var("typ",CTy"VFPNegMul"),Var("d",FTy 5), Var("n",FTy 5),Var("m",FTy 5)]), Let(bVar"single_register",Mop(Not,bVar"dp_operation"), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),bVar"single_register"]), Let(TP[Var("N",F1),Var("Vn",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("n",FTy 5),bVar"single_register"]), Let(TP[Var("M",F1),Var("Vm",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("m",FTy 5),bVar"single_register"]), Let(TP[Var("op1",FTy 2),Var("op2",F1)], CS(Var("typ",CTy"VFPNegMul"), [(LC("VFPNegMul_VNMUL",CTy"VFPNegMul"), TP[LW(2,2),LW(1,1)]), (LC("VFPNegMul_VNMLA",CTy"VFPNegMul"), TP[LW(1,2),LW(1,1)]), (LC("VFPNegMul_VNMLS",CTy"VFPNegMul"), TP[LW(1,2),LW(0,1)])]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(28,5),Var("D",F1), Var("op1",FTy 2),Var("Vn",F4), Var("Vd",F4),LW(5,3), Mop(Cast F1,bVar"dp_operation"), Var("N",F1),Var("op2",F1),Var("M",F1), LW(0,1),Var("Vm",F4)]))))))), (Call ("vmla_vmls",CTy"VFP", TP[bVar"dp_operation",bVar"add",Var("d",FTy 5),Var("n",FTy 5), Var("m",FTy 5)]), Let(bVar"single_register",Mop(Not,bVar"dp_operation"), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),bVar"single_register"]), Let(TP[Var("N",F1),Var("Vn",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("n",FTy 5),bVar"single_register"]), Let(TP[Var("M",F1),Var("Vm",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("m",FTy 5),bVar"single_register"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(28,5),Var("D",F1),LW(0,2), Var("Vn",F4),Var("Vd",F4),LW(5,3), Mop(Cast F1,bVar"dp_operation"),Var("N",F1), Mop(Cast F1,Mop(Not,bVar"add")),Var("M",F1), LW(0,1),Var("Vm",F4)])))))), (Call ("vfma_vfms",CTy"VFP", TP[bVar"dp_operation",bVar"add",Var("d",FTy 5),Var("n",FTy 5), Var("m",FTy 5)]), Let(bVar"single_register",Mop(Not,bVar"dp_operation"), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),bVar"single_register"]), Let(TP[Var("N",F1),Var("Vn",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("n",FTy 5),bVar"single_register"]), Let(TP[Var("M",F1),Var("Vm",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("m",FTy 5),bVar"single_register"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(29,5),Var("D",F1),LW(2,2), Var("Vn",F4),Var("Vd",F4),LW(5,3), Mop(Cast F1,bVar"dp_operation"),Var("N",F1), Mop(Cast F1,Mop(Not,bVar"add")),Var("M",F1), LW(0,1),Var("Vm",F4)])))))), (Call ("vfnma_vfnms",CTy"VFP", TP[bVar"dp_operation",bVar"add",Var("d",FTy 5),Var("n",FTy 5), Var("m",FTy 5)]), Let(bVar"single_register",Mop(Not,bVar"dp_operation"), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),bVar"single_register"]), Let(TP[Var("N",F1),Var("Vn",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("n",FTy 5),bVar"single_register"]), Let(TP[Var("M",F1),Var("Vm",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("m",FTy 5),bVar"single_register"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(29,5),Var("D",F1),LW(1,2), Var("Vn",F4),Var("Vd",F4),LW(5,3), Mop(Cast F1,bVar"dp_operation"),Var("N",F1), Mop(Cast F1,Mop(Not,bVar"add")),Var("M",F1), LW(0,1),Var("Vm",F4)])))))), (Call ("vldr",CTy"VFP", TP[bVar"single_register",bVar"add",Var("d",FTy 5),Var("n",F4), Var("imm32",F32)]), ITE(Bop(Or,Mop(Not,Call("Aligned",bTy,TP[Var("imm32",F32),LN 4])), Mop(Not, EQ(EX(Var("imm32",F32),LN 31,LN 10,FTy 22),LW(0,22)))), Call("BadCode",CTy"MachineCode",LS"VLDR: bad immediate"), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),bVar"single_register"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(13,4),Mop(Cast F1,bVar"add"), Var("D",F1),LW(1,2),Var("n",F4),Var("Vd",F4), LW(5,3),Mop(Cast F1,Mop(Not,bVar"single_register")), EX(Var("imm32",F32),LN 9,LN 2,F8)])))), (Call ("vstr",CTy"VFP", TP[bVar"single_register",bVar"add",Var("d",FTy 5),Var("n",F4), Var("imm32",F32)]), ITE(Bop(Or,Mop(Not,Call("Aligned",bTy,TP[Var("imm32",F32),LN 4])), Mop(Not, EQ(EX(Var("imm32",F32),LN 31,LN 10,FTy 22),LW(0,22)))), Call("BadCode",CTy"MachineCode",LS"VSTR: bad immediate"), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),bVar"single_register"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(13,4),Mop(Cast F1,bVar"add"), Var("D",F1),LW(0,2),Var("n",F4),Var("Vd",F4), LW(5,3),Mop(Cast F1,Mop(Not,bVar"single_register")), EX(Var("imm32",F32),LN 9,LN 2,F8)])))), (Call ("vldm",CTy"VFP", TP[bVar"single_regs",bVar"add",bVar"wback",Var("d",FTy 5), Var("n",F4),Var("imm8",F8)]), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),bVar"single_regs"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(6,3),ITE(bVar"add",LW(1,2),LW(2,2)), Var("D",F1),Mop(Cast F1,bVar"wback"),LW(1,1), Var("n",F4),Var("Vd",F4),LW(5,3), Mop(Cast F1,Mop(Not,bVar"single_regs")),Var("imm8",F8)]))), (Call ("vstm",CTy"VFP", TP[bVar"single_regs",bVar"add",bVar"wback",Var("d",FTy 5), Var("n",F4),Var("imm8",F8)]), Let(TP[Var("D",F1),Var("Vd",F4)], Call ("EncodeVFPReg",PTy(F1,F4), TP[Var("d",FTy 5),bVar"single_regs"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(6,3),ITE(bVar"add",LW(1,2),LW(2,2)), Var("D",F1),Mop(Cast F1,bVar"wback"),LW(0,1), Var("n",F4),Var("Vd",F4),LW(5,3), Mop(Cast F1,Mop(Not,bVar"single_regs")),Var("imm8",F8)])))])) ; val e_data_def = Def ("e_data",TP[Var("c",F4),Var("ast",CTy"Data")], CS(Var("ast",CTy"Data"), [(Call("CountLeadingZeroes",CTy"Data",TP[Var("Rd",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(367,12),Var("Rd",F4),LW(241,8),Var("Rm",F4)])), (Call ("MoveHalfword",CTy"Data", TP[bVar"high",Var("Rd",F4),Var("imm16",F16)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(6,5),Mop(Cast F1,bVar"high"),LW(0,2), EX(Var("imm16",F16),LN 15,LN 12,F4),Var("Rd",F4), EX(Var("imm16",F16),LN 11,LN 0,FTy 12)])), (Call ("Move",CTy"Data", TP[bVar"setflags",bVar"negate",Var("d",F4),Var("imm12",FTy 12)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(7,5),Mop(Cast F1,bVar"negate"),LW(1,1), Mop(Cast F1,bVar"setflags"),LW(0,4),Var("d",F4), Var("imm12",FTy 12)])), (Call ("AddSub",CTy"Data", TP[bVar"sub",Var("Rd",F4),Var("Rn",F4),Var("imm12",FTy 12)]), Call("BadCode",CTy"MachineCode",LS"ADDW/SUBW")), (Call ("TestCompareImmediate",CTy"Data", TP[Var("op",FTy 2),Var("Rn",F4),Var("imm12",FTy 12)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(6,5),Var("op",FTy 2),LW(1,1),Var("Rn",F4), LW(0,4),Var("imm12",FTy 12)])), (Call ("ArithLogicImmediate",CTy"Data", TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4), Var("imm12",FTy 12)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(1,3),Var("opc",F4), Mop(Cast F1,bVar"setflags"),Var("n",F4),Var("d",F4), Var("imm12",FTy 12)])), (Call ("Register",CTy"Data", TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4), Var("m",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"]), Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)], Call ("EncodeImmShift",PTy(FTy 2,FTy 5), TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(0,3),Var("opc",F4), Mop(Cast F1,bVar"setflags"),Var("n",F4),Var("d",F4), Var("imm5",FTy 5),Var("typ",FTy 2),LW(0,1),Var("m",F4)]))), (Call ("TestCompareRegister",CTy"Data", TP[Var("opc",FTy 2),Var("n",F4),Var("m",F4), Var("shift_t",CTy"SRType"),nVar"shift_n"]), Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)], Call ("EncodeImmShift",PTy(FTy 2,FTy 5), TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(2,5),Var("opc",FTy 2),LW(1,1), Var("n",F4),LW(0,4),Var("imm5",FTy 5),Var("typ",FTy 2), LW(0,1),Var("m",F4)]))), (Call ("ShiftImmediate",CTy"Data", TP[bVar"negate",bVar"setflags",Var("d",F4),Var("m",F4), Var("shift_t",CTy"SRType"),nVar"shift_n"]), Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)], Call ("EncodeImmShift",PTy(FTy 2,FTy 5), TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(3,5),Mop(Cast F1,bVar"negate"),LW(1,1), Mop(Cast F1,bVar"setflags"),LW(0,4),Var("d",F4), Var("imm5",FTy 5),Var("typ",FTy 2),LW(0,1),Var("m",F4)]))), (Call ("RegisterShiftedRegister",CTy"Data", TP[AVar F4,AVar bTy,AVar F4,AVar F4,AVar F4, LC("SRType_RRX",CTy"SRType"),AVar F4]), Call("BadCode",CTy"MachineCode",LS"RegisterShiftedRegister: rrx")), (Call ("RegisterShiftedRegister",CTy"Data", TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4), Var("m",F4),Var("shift_t",CTy"SRType"),Var("s",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(0,3),Var("opc",F4), Mop(Cast F1,bVar"setflags"),Var("n",F4),Var("d",F4), Var("s",F4),LW(0,1), Call("EncodeRegShift",FTy 2,Var("shift_t",CTy"SRType")), LW(1,1),Var("m",F4)])), (Call ("ShiftRegister",CTy"Data", TP[AVar bTy,AVar bTy,AVar F4,AVar F4, LC("SRType_RRX",CTy"SRType"),AVar F4]), Call("BadCode",CTy"MachineCode",LS"ShiftRegister: rrx")), (Call ("ShiftRegister",CTy"Data", TP[bVar"negate",bVar"setflags",Var("d",F4),Var("n",F4), Var("shift_t",CTy"SRType"),Var("m",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(3,5),Mop(Cast F1,bVar"negate"),LW(1,1), Mop(Cast F1,bVar"setflags"),LW(0,4),Var("d",F4),Var("m",F4), LW(0,1), Call("EncodeRegShift",FTy 2,Var("shift_t",CTy"SRType")), LW(1,1),Var("n",F4)]))])) ; val e_media_def = Def ("e_media",TP[Var("c",F4),Var("ast",CTy"Media")], CS(Var("ast",CTy"Media"), [(Call ("SaturatingAddSubtract",CTy"Media", TP[Var("opc",FTy 2),Var("Rd",F4),Var("Rm",F4),Var("Rn",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(2,5),Var("opc",FTy 2),LW(0,1),Var("Rn",F4), Var("Rd",F4),LW(5,8),Var("Rm",F4)])), (Call ("PackHalfword",CTy"Media", TP[Var("shift_t",CTy"SRType"),nVar"shift_n",bVar"tbform", Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]), Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)], Call ("EncodeImmShift",PTy(FTy 2,FTy 5), TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(104,8),Var("Rn",F4),Var("Rd",F4), Var("imm5",FTy 5),EX(Var("typ",FTy 2),LN 1,LN 1,F1), LW(1,2),Var("Rm",F4)]))), (Call ("Saturate",CTy"Media", TP[Var("shift_t",CTy"SRType"),nVar"shift_n",nVar"saturate_to", bVar"unsigned",Var("Rd",F4),Var("Rn",F4)]), Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)], Call ("EncodeImmShift",PTy(FTy 2,FTy 5), TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(13,5),Mop(Cast F1,bVar"unsigned"), LW(1,1), ITE(bVar"unsigned",Mop(Cast(FTy 5),nVar"saturate_to"), Mop(Cast(FTy 5),Bop(Sub,nVar"saturate_to",LN 1))), Var("Rd",F4),Var("imm5",FTy 5), EX(Var("typ",FTy 2),LN 1,LN 1,F1),LW(1,2),Var("Rn",F4)]))), (Call ("Saturate16",CTy"Media", TP[nVar"saturate_to",bVar"unsigned",Var("Rd",F4),Var("Rn",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(13,5),Mop(Cast F1,bVar"unsigned"),LW(2,2), ITE(bVar"unsigned",Mop(Cast F4,nVar"saturate_to"), Mop(Cast F4,Bop(Sub,nVar"saturate_to",LN 1))), Var("Rd",F4),LW(243,8),Var("Rn",F4)])), (Call ("ExtendByte",CTy"Media", TP[bVar"unsigned",Var("d",F4),Var("Rn",F4),Var("m",F4), nVar"rotation"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(13,5),Mop(Cast F1,bVar"unsigned"),LW(2,2), Var("Rn",F4),Var("d",F4), EX(Mop(Cast(FTy 5),nVar"rotation"),LN 4,LN 3,FTy 2),LW(7,6), Var("m",F4)])), (Call ("ExtendHalfword",CTy"Media", TP[bVar"unsigned",Var("d",F4),Var("Rn",F4),Var("m",F4), nVar"rotation"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(13,5),Mop(Cast F1,bVar"unsigned"),LW(3,2), Var("Rn",F4),Var("d",F4), EX(Mop(Cast(FTy 5),nVar"rotation"),LN 4,LN 3,FTy 2),LW(7,6), Var("m",F4)])), (Call ("ExtendByte16",CTy"Media", TP[bVar"unsigned",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4), nVar"rotation"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(13,5),Mop(Cast F1,bVar"unsigned"),LW(0,2), Var("Rn",F4),Var("Rd",F4), EX(Mop(Cast(FTy 5),nVar"rotation"),LN 4,LN 3,FTy 2),LW(7,6), Var("Rm",F4)])), (Call ("SelectBytes",CTy"Media", TP[Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(104,8),Var("Rn",F4),Var("Rd",F4),LW(251,8), Var("Rm",F4)])), (Call("ByteReverse",CTy"Media",TP[Var("d",F4),Var("m",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(1727,12),Var("d",F4),LW(243,8),Var("m",F4)])), (Call ("ByteReversePackedHalfword",CTy"Media", TP[Var("d",F4),Var("m",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(1727,12),Var("d",F4),LW(251,8),Var("m",F4)])), (Call ("ByteReverseSignedHalfword",CTy"Media", TP[Var("d",F4),Var("m",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(1791,12),Var("d",F4),LW(251,8),Var("m",F4)])), (Call("ReverseBits",CTy"Media",TP[Var("Rd",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(1791,12),Var("Rd",F4),LW(243,8),Var("Rm",F4)])), (Call ("BitFieldExtract",CTy"Media", TP[bVar"unsigned",Var("Rd",F4),Var("Rn",F4),nVar"lsbit", nVar"widthminus1"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(15,5),Mop(Cast F1,bVar"unsigned"),LW(1,1), Mop(Cast(FTy 5),nVar"widthminus1"),Var("Rd",F4), Mop(Cast(FTy 5),nVar"lsbit"),LW(5,3),Var("Rn",F4)])), (Call ("BitFieldClearOrInsert",CTy"Media", TP[Var("Rd",F4),Var("Rn",F4),nVar"lsbit",nVar"msbit"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(62,7),Mop(Cast(FTy 5),nVar"msbit"), Var("Rd",F4),Mop(Cast(FTy 5),nVar"lsbit"),LW(1,3), Var("Rn",F4)]))])) ; val e_hint_def = Def ("e_hint",TP[Var("c",F4),Var("ast",CTy"Hint")], CS(Var("ast",CTy"Hint"), [(Call("Breakpoint",CTy"Hint",Var("imm32",F32)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(18,8),EX(Var("imm32",F32),LN 15,LN 4,FTy 12), LW(7,4),EX(Var("imm32",F32),LN 3,LN 0,F4)])), (Call("Debug",CTy"Hint",Var("option",F4)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(3280655,24),Var("option",F4)])), (Call("DataMemoryBarrier",CTy"Hint",Var("option",F4)), ITE(EQ(Var("c",F4),LW(14,4)), Call ("ARM",CTy"MachineCode", CC[LW(257425157,28),Var("option",F4)]), Call("BadCode",CTy"MachineCode",LS"DataMemoryBarrier"))), (Call("DataSynchronizationBarrier",CTy"Hint",Var("option",F4)), ITE(EQ(Var("c",F4),LW(14,4)), Call ("ARM",CTy"MachineCode", CC[LW(257425156,28),Var("option",F4)]), Call ("BadCode",CTy"MachineCode",LS"DataSynchronizationBarrier"))), (Call ("InstructionSynchronizationBarrier",CTy"Hint",Var("option",F4)), ITE(EQ(Var("c",F4),LW(14,4)), Call ("ARM",CTy"MachineCode", CC[LW(257425158,28),Var("option",F4)]), Call ("BadCode",CTy"MachineCode", LS"InstructionSynchronizationBarrier"))), (Const("SendEvent",CTy"Hint"), Call("ARM",CTy"MachineCode",CC[Var("c",F4),LW(52490244,28)])), (Const("WaitForEvent",CTy"Hint"), Call("ARM",CTy"MachineCode",CC[Var("c",F4),LW(52490242,28)])), (Const("WaitForInterrupt",CTy"Hint"), Call("ARM",CTy"MachineCode",CC[Var("c",F4),LW(52490243,28)])), (Const("Yield",CTy"Hint"), Call("ARM",CTy"MachineCode",CC[Var("c",F4),LW(52490241,28)])), (Call ("PreloadData",CTy"Hint", TP[bVar"add",bVar"is_pldw",Var("Rn",F4), Call("immediate_form1",CTy"offset1",Var("imm32",F32))]), Call ("ARM",CTy"MachineCode", CC[LW(245,8),Mop(Cast F1,bVar"add"), Mop(Cast F1,Mop(Not,bVar"is_pldw")),LW(1,2),Var("Rn",F4), LW(15,4),EX(Var("imm32",F32),LN 11,LN 0,FTy 12)])), (Call ("PreloadData",CTy"Hint", TP[bVar"add",bVar"is_pldw",Var("Rn",F4), Call ("register_form1",CTy"offset1", TP[Var("Rm",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]), ITE(EQ(Var("c",F4),LW(14,4)), Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)], Call ("EncodeImmShift",PTy(FTy 2,FTy 5), TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]), Call ("ARM",CTy"MachineCode", CC[LW(247,8),Mop(Cast F1,bVar"add"), Mop(Cast F1,Mop(Not,bVar"is_pldw")),LW(1,2), Var("Rn",F4),LW(15,4),Var("imm5",FTy 5), Var("typ",FTy 2),LW(0,1),Var("Rm",F4)])), Call("BadCode",CTy"MachineCode",LS"PreloadData"))), (Call ("PreloadDataLiteral",CTy"Hint",TP[bVar"add",Var("imm32",F32)]), ITE(EQ(Var("c",F4),LW(14,4)), Call ("ARM",CTy"MachineCode", CC[LW(245,8),Mop(Cast F1,bVar"add"),LW(1535,11), EX(Var("imm32",F32),LN 11,LN 0,FTy 12)]), Call("BadCode",CTy"MachineCode",LS"PreloadDataLiteral"))), (Call ("PreloadInstruction",CTy"Hint", TP[bVar"add",Var("Rn",F4), Call("immediate_form1",CTy"offset1",Var("imm32",F32))]), ITE(EQ(Var("c",F4),LW(14,4)), Call ("ARM",CTy"MachineCode", CC[LW(244,8),Mop(Cast F1,bVar"add"),LW(5,3),Var("Rn",F4), LW(15,4),EX(Var("imm32",F32),LN 11,LN 0,FTy 12)]), Call("BadCode",CTy"MachineCode",LS"PreloadInstruction"))), (Call ("PreloadInstruction",CTy"Hint", TP[bVar"add",Var("Rn",F4), Call ("register_form1",CTy"offset1", TP[Var("Rm",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]), Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)], Call ("EncodeImmShift",PTy(FTy 2,FTy 5), TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]), Call ("ARM",CTy"MachineCode", CC[LW(246,8),Mop(Cast F1,bVar"add"),LW(5,3),Var("Rn",F4), LW(15,4),Var("imm5",FTy 5),Var("typ",FTy 2),LW(0,1), Var("Rm",F4)])))])) ; val e_system_def = Def ("e_system",TP[Var("c",F4),Var("ast",CTy"System")], CS(Var("ast",CTy"System"), [(Call("EnterxLeavex",CTy"System",bVar"is_enterx"), Call("BadCode",CTy"MachineCode",LS"EnterxLeavex")), (Call ("ChangeProcessorState",CTy"System", TP[LT,LT,AVar(PTy(bTy,PTy(bTy,PTy(bTy,OTy(FTy 5)))))]), Call("BadCode",CTy"MachineCode",LS"ChangeProcessorState")), (Call ("ChangeProcessorState",CTy"System", TP[bVar"enable",bVar"disable",bVar"affectA",bVar"affectI", bVar"affectF",Var("changemode",OTy(FTy 5))]), ITE(EQ(Var("c",F4),LW(14,4)), Let(TP[Var("M",F1),Var("mode",FTy 5)], CS(Var("changemode",OTy(FTy 5)), [(Mop(Some,Var("mode",FTy 5)), TP[LW(1,1),Var("mode",FTy 5)]), (LO(FTy 5),TP[LW(0,1),LW(0,5)])]), Call ("ARM",CTy"MachineCode", CC[LW(3856,12), CC[Mop(Cast F1,Bop(Or,bVar"enable",bVar"disable")), Mop(Cast F1,bVar"disable")],Var("M",F1),LW(0,8), Mop(Cast F1,bVar"affectA"), Mop(Cast F1,bVar"affectI"), Mop(Cast F1,bVar"affectF"),LW(0,1),Var("mode",FTy 5)])), Call("BadCode",CTy"MachineCode",LS"ChangeProcessorState"))), (Const("ExceptionReturn",CTy"System"), Call("ARM",CTy"MachineCode",CC[Var("c",F4),LW(23068782,28)])), (Call("HypervisorCall",CTy"System",Var("imm16",F16)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(20,8),EX(Var("imm16",F16),LN 15,LN 4,FTy 12), LW(7,4),EX(Var("imm16",F16),LN 3,LN 0,F4)])), (Call ("MoveToRegisterFromSpecial",CTy"System", TP[bVar"read_spsr",Var("Rd",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(2,5),Mop(Cast F1,bVar"read_spsr"),LW(15,6), Var("Rd",F4),LW(0,12)])), (Call ("MoveToRegisterFromBankedOrSpecial",CTy"System", TP[bVar"read_spsr",Var("SYSm",FTy 5),Var("Rd",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(2,5),Mop(Cast F1,bVar"read_spsr"),LW(0,2), EX(Var("SYSm",FTy 5),LN 3,LN 0,F4),Var("Rd",F4),LW(1,3), EX(Var("SYSm",FTy 5),LN 4,LN 4,F1),LW(0,8)])), (Call ("MoveToSpecialFromImmediate",CTy"System", TP[bVar"write_spsr",Var("imm32",F32),Var("mask",F4)]), CS(Call("EncodeARMImmediate",OTy(FTy 12),Var("imm32",F32)), [(Mop(Some,Var("imm12",FTy 12)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(6,5),Mop(Cast F1,bVar"write_spsr"), LW(2,2),Var("mask",F4),LW(15,4),Var("imm12",FTy 12)])), (LO(FTy 12), Call ("BadCode",CTy"MachineCode",LS"MoveToSpecialFromImmediate"))])), (Call ("MoveToSpecialFromRegister",CTy"System", TP[bVar"write_spsr",Var("Rn",F4),Var("mask",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(2,5),Mop(Cast F1,bVar"write_spsr"),LW(2,2), Var("mask",F4),LW(3840,12),Var("Rn",F4)])), (Call ("MoveToBankedOrSpecialRegister",CTy"System", TP[bVar"write_spsr",Var("SYSm",FTy 5),Var("Rn",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(2,5),Mop(Cast F1,bVar"write_spsr"),LW(2,2), EX(Var("SYSm",FTy 5),LN 3,LN 0,F4),LW(121,7), EX(Var("SYSm",FTy 5),LN 4,LN 4,F1),LW(0,4),Var("Rn",F4)])), (Call ("ReturnFromException",CTy"System", TP[bVar"increment",bVar"wordhigher",bVar"wback",Var("Rn",F4)]), ITE(EQ(Var("c",F4),LW(14,4)), Let(Var("U",F1),Mop(Cast F1,bVar"increment"), Call ("ARM",CTy"MachineCode", CC[LW(124,7), ITE(bVar"wordhigher",Var("U",F1), Mop(BNot,Var("U",F1))),Var("U",F1),LW(0,1), Mop(Cast F1,bVar"wback"),LW(1,1),Var("Rn",F4), LW(2560,16)])), Call("BadCode",CTy"MachineCode",LS"ReturnFromException"))), (Call("SecureMonitorCall",CTy"System",Var("imm4",F4)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(1441799,24),Var("imm4",F4)])), (Call ("StoreReturnState",CTy"System", TP[bVar"increment",bVar"wordhigher",bVar"wback", Var("mode",FTy 5)]), ITE(EQ(Var("c",F4),LW(14,4)), Let(Var("U",F1),Mop(Cast F1,bVar"increment"), Call ("ARM",CTy"MachineCode", CC[LW(124,7), ITE(bVar"wordhigher",Var("U",F1), Mop(BNot,Var("U",F1))),Var("U",F1),LW(1,1), Mop(Cast F1,bVar"wback"),LW(26664,16), Var("mode",FTy 5)])), Call("BadCode",CTy"MachineCode",LS"StoreReturnState"))), (Call("SupervisorCall",CTy"System",Var("imm32",F32)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(15,4),EX(Var("imm32",F32),LN 23,LN 0,FTy 24)])), (Call("Setend",CTy"System",bVar"E"), ITE(EQ(Var("c",F4),LW(14,4)), Call ("ARM",CTy"MachineCode", CC[LW(3948608,22),Mop(Cast F1,bVar"E"),LW(0,9)]), Call("BadCode",CTy"MachineCode",LS"Setend")))])) ; val e_multiply_def = Def ("e_multiply",TP[Var("c",F4),Var("ast",CTy"Multiply")], CS(Var("ast",CTy"Multiply"), [(Call ("MultiplyAccumulate",CTy"Multiply", TP[bVar"setflags",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4), Var("Ra",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(1,7),Mop(Cast F1,bVar"setflags"), Var("Rd",F4),Var("Ra",F4),Var("Rm",F4),LW(9,4),Var("Rn",F4)])), (Call ("Multiply32",CTy"Multiply", TP[bVar"setflags",Var("d",F4),Var("n",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(0,7),Mop(Cast F1,bVar"setflags"),Var("d",F4), LW(0,4),Var("Rm",F4),LW(9,4),Var("n",F4)])), (Call ("MultiplyLong",CTy"Multiply", TP[bVar"accumulate",bVar"signed",bVar"setflags",Var("Rdhi",F4), Var("Rdlo",F4),Var("Rn",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(1,5),Mop(Cast F1,bVar"signed"), Mop(Cast F1,bVar"accumulate"),Mop(Cast F1,bVar"setflags"), Var("Rdhi",F4),Var("Rdlo",F4),Var("Rm",F4),LW(9,4), Var("Rn",F4)])), (Call ("MultiplyAccumulateAccumulate",CTy"Multiply", TP[Var("Rdhi",F4),Var("Rdlo",F4),Var("Rn",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(4,8),Var("Rdhi",F4),Var("Rdlo",F4), Var("Rm",F4),LW(9,4),Var("Rn",F4)])), (Call ("MultiplySubtract",CTy"Multiply", TP[Var("Rd",F4),Var("Rn",F4),Var("Rm",F4),Var("Ra",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(6,8),Var("Rd",F4),Var("Ra",F4),Var("Rm",F4), LW(9,4),Var("Rn",F4)])), (Call ("Signed16Multiply32Accumulate",CTy"Multiply", TP[bVar"m_high",bVar"n_high",Var("Rd",F4),Var("Rn",F4), Var("Rm",F4),Var("Ra",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(16,8),Var("Rd",F4),Var("Ra",F4),Var("Rm",F4), LW(1,1),Mop(Cast F1,bVar"m_high"),Mop(Cast F1,bVar"n_high"), LW(0,1),Var("Rn",F4)])), (Call ("Signed16Multiply32Result",CTy"Multiply", TP[bVar"m_high",bVar"n_high",Var("Rd",F4),Var("Rn",F4), Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(22,8),Var("Rd",F4),LW(0,4),Var("Rm",F4), LW(1,1),Mop(Cast F1,bVar"m_high"),Mop(Cast F1,bVar"n_high"), LW(0,1),Var("Rn",F4)])), (Call ("Signed16x32Multiply32Accumulate",CTy"Multiply", TP[bVar"m_high",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4), Var("Ra",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(18,8),Var("Rd",F4),Var("Ra",F4),Var("Rm",F4), LW(1,1),Mop(Cast F1,bVar"m_high"),LW(0,2),Var("Rn",F4)])), (Call ("Signed16x32Multiply32Result",CTy"Multiply", TP[bVar"m_high",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(18,8),Var("Rd",F4),LW(0,4),Var("Rm",F4), LW(1,1),Mop(Cast F1,bVar"m_high"),LW(2,2),Var("Rn",F4)])), (Call ("Signed16Multiply64Accumulate",CTy"Multiply", TP[bVar"m_high",bVar"n_high",Var("Rdhi",F4),Var("Rdlo",F4), Var("Rn",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(20,8),Var("Rdhi",F4),Var("Rdlo",F4), Var("Rm",F4),LW(1,1),Mop(Cast F1,bVar"m_high"), Mop(Cast F1,bVar"n_high"),LW(0,1),Var("Rn",F4)])), (Call ("SignedMultiplyDual",CTy"Multiply", TP[bVar"sub",bVar"m_swap",Var("Rd",F4),Var("Rn",F4), Var("Rm",F4),Var("Ra",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(112,8),Var("Rd",F4),Var("Ra",F4), Var("Rm",F4),LW(0,1),Mop(Cast F1,bVar"sub"), Mop(Cast F1,bVar"m_swap"),LW(1,1),Var("Rn",F4)])), (Call ("SignedMultiplyLongDual",CTy"Multiply", TP[bVar"sub",bVar"m_swap",Var("Rdhi",F4),Var("Rdlo",F4), Var("Rn",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(116,8),Var("Rdhi",F4),Var("Rdlo",F4), Var("Rm",F4),LW(0,1),Mop(Cast F1,bVar"sub"), Mop(Cast F1,bVar"m_swap"),LW(1,1),Var("Rn",F4)])), (Call ("SignedMostSignificantMultiply",CTy"Multiply", TP[bVar"round",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4), Var("Ra",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(117,8),Var("Rd",F4),Var("Ra",F4), Var("Rm",F4),LW(0,2),Mop(Cast F1,bVar"round"),LW(1,1), Var("Rn",F4)])), (Call ("SignedMostSignificantMultiplySubtract",CTy"Multiply", TP[bVar"round",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4), Var("Ra",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(117,8),Var("Rd",F4),Var("Ra",F4), Var("Rm",F4),LW(3,2),Mop(Cast F1,bVar"round"),LW(1,1), Var("Rn",F4)]))])) ; val e_simd_def = Def ("e_simd",TP[Var("c",F4),Var("ast",CTy"SIMD")], CS(Var("ast",CTy"SIMD"), [(Call ("SignedAddSub16",CTy"SIMD", TP[Var("opc",FTy 2),Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(97,8),Var("Rn",F4),Var("Rd",F4),LW(30,5), Var("opc",FTy 2),LW(1,1),Var("Rm",F4)])), (Call ("UnsignedAddSub16",CTy"SIMD", TP[Var("opc",FTy 2),Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(101,8),Var("Rn",F4),Var("Rd",F4),LW(30,5), Var("opc",FTy 2),LW(1,1),Var("Rm",F4)])), (Call ("SignedSaturatingAddSub16",CTy"SIMD", TP[Var("opc",FTy 2),Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(98,8),Var("Rn",F4),Var("Rd",F4),LW(30,5), Var("opc",FTy 2),LW(1,1),Var("Rm",F4)])), (Call ("UnsignedSaturatingAddSub16",CTy"SIMD", TP[Var("opc",FTy 2),Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(102,8),Var("Rn",F4),Var("Rd",F4),LW(30,5), Var("opc",FTy 2),LW(1,1),Var("Rm",F4)])), (Call ("SignedHalvingAddSub16",CTy"SIMD", TP[Var("opc",FTy 2),Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(99,8),Var("Rn",F4),Var("Rd",F4),LW(30,5), Var("opc",FTy 2),LW(1,1),Var("Rm",F4)])), (Call ("UnsignedHalvingAddSub16",CTy"SIMD", TP[Var("opc",FTy 2),Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(103,8),Var("Rn",F4),Var("Rd",F4),LW(30,5), Var("opc",FTy 2),LW(1,1),Var("Rm",F4)])), (Call ("SignedAddSub8",CTy"SIMD", TP[bVar"sub",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(97,8),Var("Rn",F4),Var("Rd",F4),LW(15,4), ITE(bVar"sub",LW(7,3),LW(4,3)),LW(1,1),Var("Rm",F4)])), (Call ("UnsignedAddSub8",CTy"SIMD", TP[bVar"sub",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(101,8),Var("Rn",F4),Var("Rd",F4),LW(15,4), ITE(bVar"sub",LW(7,3),LW(4,3)),LW(1,1),Var("Rm",F4)])), (Call ("SignedSaturatingAddSub8",CTy"SIMD", TP[bVar"sub",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(98,8),Var("Rn",F4),Var("Rd",F4),LW(15,4), ITE(bVar"sub",LW(7,3),LW(4,3)),LW(1,1),Var("Rm",F4)])), (Call ("UnsignedSaturatingAddSub8",CTy"SIMD", TP[bVar"sub",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(102,8),Var("Rn",F4),Var("Rd",F4),LW(15,4), ITE(bVar"sub",LW(7,3),LW(4,3)),LW(1,1),Var("Rm",F4)])), (Call ("SignedHalvingAddSub8",CTy"SIMD", TP[bVar"sub",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(99,8),Var("Rn",F4),Var("Rd",F4),LW(15,4), ITE(bVar"sub",LW(7,3),LW(4,3)),LW(1,1),Var("Rm",F4)])), (Call ("UnsignedHalvingAddSub8",CTy"SIMD", TP[bVar"sub",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(103,8),Var("Rn",F4),Var("Rd",F4),LW(15,4), ITE(bVar"sub",LW(7,3),LW(4,3)),LW(1,1),Var("Rm",F4)])), (Call ("UnsignedSumAbsoluteDifferences",CTy"SIMD", TP[Var("Rd",F4),Var("Rn",F4),Var("Rm",F4),Var("Ra",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(120,8),Var("Rd",F4),Var("Ra",F4), Var("Rm",F4),LW(1,4),Var("Rn",F4)]))])) ; val e_load_def = Def ("e_load",TP[Var("c",F4),Var("ast",CTy"Load")], CS(Var("ast",CTy"Load"), [(Call ("LoadWord",CTy"Load", TP[AVar bTy,LF,LF,AVar(PTy(F4,PTy(F4,CTy"offset1")))]), Call("BadCode",CTy"MachineCode",LS"LoadWord")), (Call ("LoadWord",CTy"Load", TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4), Call("immediate_form1",CTy"offset1",Var("imm32",F32))]), ITE(Bop(Ule,Var("imm32",F32),LW(4095,32)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(2,3),Mop(Cast F1,bVar"index"), Mop(Cast F1,bVar"add"),LW(0,1), Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(1,1), Var("n",F4),Var("t",F4), EX(Var("imm32",F32),LN 11,LN 0,FTy 12)]), Call("BadCode",CTy"MachineCode",LS"LoadWord"))), (Call ("LoadWord",CTy"Load", TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4), Call ("register_form1",CTy"offset1", TP[Var("m",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]), Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)], Call ("EncodeImmShift",PTy(FTy 2,FTy 5), TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(3,3),Mop(Cast F1,bVar"index"), Mop(Cast F1,bVar"add"),LW(0,1), Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(1,1), Var("n",F4),Var("t",F4),Var("imm5",FTy 5), Var("typ",FTy 2),LW(0,1),Var("m",F4)]))), (Call ("LoadLiteral",CTy"Load", TP[bVar"add",Var("t",F4),Var("imm32",F32)]), ITE(Bop(Ule,Var("imm32",F32),LW(4095,32)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(5,4),Mop(Cast F1,bVar"add"),LW(31,7), Var("t",F4),EX(Var("imm32",F32),LN 11,LN 0,FTy 12)]), Call("BadCode",CTy"MachineCode",LS"LoadLiteral"))), (Call ("LoadUnprivileged",CTy"Load", TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4), Call("immediate_form1",CTy"offset1",Var("imm32",F32))]), ITE(Bop(And,bVar"postindex",Bop(Ule,Var("imm32",F32),LW(4095,32))), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(4,4),Mop(Cast F1,bVar"add"),LW(3,3), Var("Rn",F4),Var("Rt",F4), EX(Var("imm32",F32),LN 11,LN 0,FTy 12)]), Call("BadCode",CTy"MachineCode",LS"LoadUnprivileged"))), (Call ("LoadUnprivileged",CTy"Load", TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4), Call ("register_form1",CTy"offset1", TP[Var("Rm",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]), ITE(bVar"postindex", Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)], Call ("EncodeImmShift",PTy(FTy 2,FTy 5), TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(6,4),Mop(Cast F1,bVar"add"),LW(3,3), Var("Rn",F4),Var("Rt",F4),Var("imm5",FTy 5), Var("typ",FTy 2),LW(0,1),Var("Rm",F4)])), Call("BadCode",CTy"MachineCode",LS"LoadUnprivileged"))), (Call ("LoadByte",CTy"Load", TP[AVar bTy,AVar bTy,LF,LF,AVar(PTy(F4,PTy(F4,CTy"offset1")))]), Call("BadCode",CTy"MachineCode",LS"LoadByte")), (Call ("LoadByte",CTy"Load", TP[bVar"unsigned",bVar"add",bVar"index",bVar"wback", Var("t",F4),Var("n",F4), Call("immediate_form1",CTy"offset1",Var("imm32",F32))]), Let(Var("P",F1),Mop(Cast F1,bVar"index"), Let(Var("U",F1),Mop(Cast F1,bVar"add"), Let(Var("W",F1), Mop(Cast F1,Bop(And,bVar"index",bVar"wback")), ITB([(Bop(And,bVar"unsigned", Bop(Ule,Var("imm32",F32),LW(4095,32))), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(2,3),Var("P",F1), Var("U",F1),LW(1,1),Var("W",F1),LW(1,1), Var("n",F4),Var("t",F4), EX(Var("imm32",F32),LN 11,LN 0,FTy 12)])), (Bop(Ule,Var("imm32",F32),LW(255,32)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(0,3),Var("P",F1), Var("U",F1),LW(1,1),Var("W",F1),LW(1,1), Var("n",F4),Var("t",F4), EX(Var("imm32",F32),LN 7,LN 4,F4), LW(13,4),EX(Var("imm32",F32),LN 3,LN 0,F4)]))], Call("BadCode",CTy"MachineCode",LS"LoadByte")))))), (Call ("LoadByte",CTy"Load", TP[bVar"unsigned",bVar"add",bVar"index",bVar"wback", Var("t",F4),Var("n",F4), Call ("register_form1",CTy"offset1", TP[Var("m",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]), Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)], Call ("EncodeImmShift",PTy(FTy 2,FTy 5), TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]), Let(Var("P",F1),Mop(Cast F1,bVar"index"), Let(Var("U",F1),Mop(Cast F1,bVar"add"), Let(Var("W",F1), Mop(Cast F1,Bop(And,bVar"index",bVar"wback")), ITB([(bVar"unsigned", Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(3,3),Var("P",F1), Var("U",F1),LW(1,1),Var("W",F1), LW(1,1),Var("n",F4),Var("t",F4), Var("imm5",FTy 5),Var("typ",FTy 2), LW(0,1),Var("m",F4)])), (Bop(And, EQ(Var("shift_t",CTy"SRType"), LC("SRType_LSL",CTy"SRType")), EQ(nVar"shift_n",LN 0)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(0,3),Var("P",F1), Var("U",F1),LW(0,1),Var("W",F1), LW(1,1),Var("n",F4),Var("t",F4), LW(13,8),Var("m",F4)]))], Call("BadCode",CTy"MachineCode",LS"LoadByte"))))))), (Call ("LoadByteLiteral",CTy"Load", TP[bVar"unsigned",bVar"add",Var("Rt",F4),Var("imm32",F32)]), Let(Var("U",F1),Mop(Cast F1,bVar"add"), ITB([(Bop(And,bVar"unsigned", Bop(Ule,Var("imm32",F32),LW(4095,32))), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(5,4),Var("U",F1),LW(95,7), Var("Rt",F4), EX(Var("imm32",F32),LN 11,LN 0,FTy 12)])), (Bop(Ule,Var("imm32",F32),LW(255,32)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(1,4),Var("U",F1),LW(95,7), Var("Rt",F4),EX(Var("imm32",F32),LN 7,LN 4,F4), LW(13,4),EX(Var("imm32",F32),LN 3,LN 0,F4)]))], Call("BadCode",CTy"MachineCode",LS"LoadByteLiteral")))), (Call ("LoadByteUnprivileged",CTy"Load", TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4), Call("immediate_form1",CTy"offset1",Var("imm32",F32))]), ITE(Bop(And,bVar"postindex",Bop(Ule,Var("imm32",F32),LW(4095,32))), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(4,4),Mop(Cast F1,bVar"add"),LW(7,3), Var("Rn",F4),Var("Rt",F4), EX(Var("imm32",F32),LN 11,LN 0,FTy 12)]), Call("BadCode",CTy"MachineCode",LS"LoadByteUnprivileged"))), (Call ("LoadByteUnprivileged",CTy"Load", TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4), Call ("register_form1",CTy"offset1", TP[Var("Rm",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]), ITE(bVar"postindex", Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)], Call ("EncodeImmShift",PTy(FTy 2,FTy 5), TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(6,4),Mop(Cast F1,bVar"add"),LW(7,3), Var("Rn",F4),Var("Rt",F4),Var("imm5",FTy 5), Var("typ",FTy 2),LW(0,1),Var("Rm",F4)])), Call("BadCode",CTy"MachineCode",LS"LoadByteUnprivileged"))), (Call ("LoadSignedByteUnprivileged",CTy"Load", TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4), Call("immediate_form2",CTy"offset2",Var("imm32",F32))]), ITE(Bop(And,bVar"postindex",Bop(Ule,Var("imm32",F32),LW(255,32))), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(0,4),Mop(Cast F1,bVar"add"),LW(7,3), Var("Rn",F4),Var("Rt",F4), EX(Var("imm32",F32),LN 7,LN 4,F4),LW(13,4), EX(Var("imm32",F32),LN 3,LN 0,F4)]), Call ("BadCode",CTy"MachineCode",LS"LoadSignedByteUnprivileged"))), (Call ("LoadSignedByteUnprivileged",CTy"Load", TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4), Call("register_form2",CTy"offset2",Var("Rm",F4))]), ITE(bVar"postindex", Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(0,4),Mop(Cast F1,bVar"add"),LW(3,3), Var("Rn",F4),Var("Rt",F4),LW(13,8),Var("Rm",F4)]), Call ("BadCode",CTy"MachineCode",LS"LoadSignedByteUnprivileged"))), (Call ("LoadHalf",CTy"Load", TP[AVar bTy,AVar bTy,LF,LF,AVar(PTy(F4,PTy(F4,CTy"offset1")))]), Call("BadCode",CTy"MachineCode",LS"LoadHalf")), (Call ("LoadHalf",CTy"Load", TP[bVar"unsigned",bVar"add",bVar"index",bVar"wback", Var("t",F4),Var("n",F4), Call("immediate_form1",CTy"offset1",Var("imm32",F32))]), ITE(Bop(Ule,Var("imm32",F32),LW(255,32)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(0,3),Mop(Cast F1,bVar"index"), Mop(Cast F1,bVar"add"),LW(1,1), Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(1,1), Var("n",F4),Var("t",F4), EX(Var("imm32",F32),LN 7,LN 4,F4),LW(1,1), Mop(Cast F1,Mop(Not,bVar"unsigned")),LW(3,2), EX(Var("imm32",F32),LN 3,LN 0,F4)]), Call("BadCode",CTy"MachineCode",LS"LoadHalf"))), (Call ("LoadHalf",CTy"Load", TP[bVar"unsigned",bVar"add",bVar"index",bVar"wback", Var("t",F4),Var("n",F4), Call ("register_form1",CTy"offset1", TP[Var("m",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]), ITE(Bop(And, EQ(Var("shift_t",CTy"SRType"),LC("SRType_LSL",CTy"SRType")), EQ(nVar"shift_n",LN 0)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(0,3),Mop(Cast F1,bVar"index"), Mop(Cast F1,bVar"add"),LW(0,1), Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(1,1), Var("n",F4),Var("t",F4),LW(1,5), Mop(Cast F1,Mop(Not,bVar"unsigned")),LW(3,2),Var("m",F4)]), Call("BadCode",CTy"MachineCode",LS"LoadHalf"))), (Call ("LoadHalfLiteral",CTy"Load", TP[bVar"unsigned",bVar"add",Var("Rt",F4),Var("imm32",F32)]), ITE(Bop(Ule,Var("imm32",F32),LW(255,32)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(1,4),Mop(Cast F1,bVar"add"),LW(95,7), Var("Rt",F4),EX(Var("imm32",F32),LN 7,LN 4,F4),LW(1,1), Mop(Cast F1,Mop(Not,bVar"unsigned")),LW(3,2), EX(Var("imm32",F32),LN 3,LN 0,F4)]), Call("BadCode",CTy"MachineCode",LS"LoadHalfLiteral"))), (Call ("LoadHalfUnprivileged",CTy"Load", TP[bVar"unsigned",bVar"add",bVar"postindex",Var("Rt",F4), Var("Rn",F4), Call("immediate_form2",CTy"offset2",Var("imm32",F32))]), ITE(Bop(And,bVar"postindex",Bop(Ule,Var("imm32",F32),LW(255,32))), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(0,4),Mop(Cast F1,bVar"add"),LW(7,3), Var("Rn",F4),Var("Rt",F4), EX(Var("imm32",F32),LN 7,LN 4,F4),LW(1,1), Mop(Cast F1,Mop(Not,bVar"unsigned")),LW(3,2), EX(Var("imm32",F32),LN 3,LN 0,F4)]), Call("BadCode",CTy"MachineCode",LS"LoadHalfUnprivileged"))), (Call ("LoadHalfUnprivileged",CTy"Load", TP[bVar"unsigned",bVar"add",bVar"postindex",Var("Rt",F4), Var("Rn",F4), Call("register_form2",CTy"offset2",Var("Rm",F4))]), ITE(bVar"postindex", Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(0,4),Mop(Cast F1,bVar"add"),LW(3,3), Var("Rn",F4),Var("Rt",F4),LW(1,5), Mop(Cast F1,Mop(Not,bVar"unsigned")),LW(3,2), Var("Rm",F4)]), Call("BadCode",CTy"MachineCode",LS"LoadHalfUnprivileged"))), (Call ("LoadMultiple",CTy"Load", TP[bVar"increment",bVar"index",bVar"wback",Var("n",F4), Var("registers",F16)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(4,3),Mop(Cast F1,bVar"index"), Mop(Cast F1,bVar"increment"),LW(0,1), Mop(Cast F1,bVar"wback"),LW(1,1),Var("n",F4), Var("registers",F16)])), (Call ("LoadMultipleExceptionReturn",CTy"Load", TP[bVar"increment",bVar"wordhigher",bVar"wback",Var("Rn",F4), Var("registers",FTy 15)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(4,3), Mop(Cast F1, ITE(bVar"wordhigher",bVar"increment", Mop(Not,bVar"increment"))), Mop(Cast F1,bVar"increment"),LW(1,1), Mop(Cast F1,bVar"wback"),LW(1,1),Var("Rn",F4),LW(1,1), Var("registers",FTy 15)])), (Call ("LoadMultipleUserRegisters",CTy"Load", TP[bVar"increment",bVar"wordhigher",Var("Rn",F4), Var("registers",FTy 15)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(4,3), Mop(Cast F1, ITE(bVar"wordhigher",bVar"increment", Mop(Not,bVar"increment"))), Mop(Cast F1,bVar"increment"),LW(5,3),Var("Rn",F4),LW(0,1), Var("registers",FTy 15)])), (Call ("LoadDual",CTy"Load", TP[bVar"add",bVar"index",bVar"wback",Var("Rt",F4), Var("Rt2",F4),Var("Rn",F4), Call("immediate_form2",CTy"offset2",Var("imm32",F32))]), ITE(Bop(And,EQ(Bop(Add,Var("Rt",F4),LW(1,4)),Var("Rt2",F4)), Bop(Ule,Var("imm32",F32),LW(255,32))), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(0,3),Mop(Cast F1,bVar"index"), Mop(Cast F1,bVar"add"),LW(1,1), Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(0,1), Var("Rn",F4),Var("Rt",F4), EX(Var("imm32",F32),LN 7,LN 4,F4),LW(13,4), EX(Var("imm32",F32),LN 3,LN 0,F4)]), Call("BadCode",CTy"MachineCode",LS"LoadDual"))), (Call ("LoadDual",CTy"Load", TP[bVar"add",bVar"index",bVar"wback",Var("Rt",F4), Var("Rt2",F4),Var("Rn",F4), Call("register_form2",CTy"offset2",Var("Rm",F4))]), ITE(EQ(Bop(Add,Var("Rt",F4),LW(1,4)),Var("Rt2",F4)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(0,3),Mop(Cast F1,bVar"index"), Mop(Cast F1,bVar"add"),LW(0,1), Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(0,1), Var("Rn",F4),Var("Rt",F4),LW(13,8),Var("Rm",F4)]), Call("BadCode",CTy"MachineCode",LS"LoadDual"))), (Call ("LoadDualLiteral",CTy"Load", TP[bVar"add",Var("Rt",F4),Var("Rt2",F4),Var("imm32",F32)]), ITE(Bop(And,EQ(Bop(Add,Var("Rt",F4),LW(1,4)),Var("Rt2",F4)), Bop(Ule,Var("imm32",F32),LW(255,32))), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(1,4),Mop(Cast F1,bVar"add"),LW(79,7), Var("Rt",F4),EX(Var("imm32",F32),LN 7,LN 4,F4),LW(13,4), EX(Var("imm32",F32),LN 3,LN 0,F4)]), Call("BadCode",CTy"MachineCode",LS"LoadDualLiteral"))), (Call ("LoadExclusive",CTy"Load", TP[Var("Rt",F4),Var("Rn",F4),Var("imm32",F32)]), ITE(EQ(Var("imm32",F32),LW(0,32)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(25,8),Var("Rn",F4),Var("Rt",F4), LW(3999,12)]), Call("BadCode",CTy"MachineCode",LS"LoadExclusive"))), (Call("LoadExclusiveByte",CTy"Load",TP[Var("Rt",F4),Var("Rn",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(29,8),Var("Rn",F4),Var("Rt",F4),LW(3999,12)])), (Call("LoadExclusiveHalf",CTy"Load",TP[Var("Rt",F4),Var("Rn",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(31,8),Var("Rn",F4),Var("Rt",F4),LW(3999,12)])), (Call ("LoadExclusiveDoubleword",CTy"Load", TP[Var("Rt",F4),Var("Rt2",F4),Var("Rn",F4)]), ITE(EQ(Bop(Add,Var("Rt",F4),LW(1,4)),Var("Rt2",F4)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(27,8),Var("Rn",F4),Var("Rt",F4), LW(3999,12)]), Call("BadCode",CTy"MachineCode",LS"LoadExclusiveDoubleword")))])) ; val e_store_def = Def ("e_store",TP[Var("c",F4),Var("ast",CTy"Store")], CS(Var("ast",CTy"Store"), [(Call ("StoreWord",CTy"Store", TP[AVar bTy,LF,LF,AVar(PTy(F4,PTy(F4,CTy"offset1")))]), Call("BadCode",CTy"MachineCode",LS"StoreWord")), (Call ("StoreWord",CTy"Store", TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4), Call("immediate_form1",CTy"offset1",Var("imm32",F32))]), ITE(Bop(Ule,Var("imm32",F32),LW(4095,32)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(2,3),Mop(Cast F1,bVar"index"), Mop(Cast F1,bVar"add"),LW(0,1), Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(0,1), Var("n",F4),Var("t",F4), EX(Var("imm32",F32),LN 11,LN 0,FTy 12)]), Call("BadCode",CTy"MachineCode",LS"StoreWord"))), (Call ("StoreWord",CTy"Store", TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4), Call ("register_form1",CTy"offset1", TP[Var("m",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]), Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)], Call ("EncodeImmShift",PTy(FTy 2,FTy 5), TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(3,3),Mop(Cast F1,bVar"index"), Mop(Cast F1,bVar"add"),LW(0,1), Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(0,1), Var("n",F4),Var("t",F4),Var("imm5",FTy 5), Var("typ",FTy 2),LW(0,1),Var("m",F4)]))), (Call ("StoreUnprivileged",CTy"Store", TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4), Call("immediate_form1",CTy"offset1",Var("imm32",F32))]), ITE(Bop(And,bVar"postindex",Bop(Ule,Var("imm32",F32),LW(4095,32))), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(4,4),Mop(Cast F1,bVar"add"),LW(2,3), Var("Rn",F4),Var("Rt",F4), EX(Var("imm32",F32),LN 11,LN 0,FTy 12)]), Call("BadCode",CTy"MachineCode",LS"StoreUnprivileged"))), (Call ("StoreUnprivileged",CTy"Store", TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4), Call ("register_form1",CTy"offset1", TP[Var("Rm",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]), ITE(bVar"postindex", Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)], Call ("EncodeImmShift",PTy(FTy 2,FTy 5), TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(6,4),Mop(Cast F1,bVar"add"),LW(2,3), Var("Rn",F4),Var("Rt",F4),Var("imm5",FTy 5), Var("typ",FTy 2),LW(0,1),Var("Rm",F4)])), Call("BadCode",CTy"MachineCode",LS"StoreUnprivileged"))), (Call ("StoreByte",CTy"Store", TP[AVar bTy,LF,LF,AVar(PTy(F4,PTy(F4,CTy"offset1")))]), Call("BadCode",CTy"MachineCode",LS"StoreByte")), (Call ("StoreByte",CTy"Store", TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4), Call("immediate_form1",CTy"offset1",Var("imm32",F32))]), ITE(Bop(Ule,Var("imm32",F32),LW(4095,32)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(2,3),Mop(Cast F1,bVar"index"), Mop(Cast F1,bVar"add"),LW(1,1), Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(0,1), Var("n",F4),Var("t",F4), EX(Var("imm32",F32),LN 11,LN 0,FTy 12)]), Call("BadCode",CTy"MachineCode",LS"StoreByte"))), (Call ("StoreByte",CTy"Store", TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4), Call ("register_form1",CTy"offset1", TP[Var("m",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]), Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)], Call ("EncodeImmShift",PTy(FTy 2,FTy 5), TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(3,3),Mop(Cast F1,bVar"index"), Mop(Cast F1,bVar"add"),LW(1,1), Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(0,1), Var("n",F4),Var("t",F4),Var("imm5",FTy 5), Var("typ",FTy 2),LW(0,1),Var("m",F4)]))), (Call ("StoreByteUnprivileged",CTy"Store", TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4), Call("immediate_form1",CTy"offset1",Var("imm32",F32))]), ITE(Bop(And,bVar"postindex",Bop(Ule,Var("imm32",F32),LW(4095,32))), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(4,4),Mop(Cast F1,bVar"add"),LW(6,3), Var("Rn",F4),Var("Rt",F4), EX(Var("imm32",F32),LN 11,LN 0,FTy 12)]), Call("BadCode",CTy"MachineCode",LS"StoreByteUnprivileged"))), (Call ("StoreByteUnprivileged",CTy"Store", TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4), Call ("register_form1",CTy"offset1", TP[Var("Rm",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]), ITE(bVar"postindex", Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)], Call ("EncodeImmShift",PTy(FTy 2,FTy 5), TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(6,4),Mop(Cast F1,bVar"add"),LW(6,3), Var("Rn",F4),Var("Rt",F4),Var("imm5",FTy 5), Var("typ",FTy 2),LW(0,1),Var("Rm",F4)])), Call("BadCode",CTy"MachineCode",LS"StoreByteUnprivileged"))), (Call ("StoreHalf",CTy"Store", TP[AVar bTy,LF,LF,AVar(PTy(F4,PTy(F4,CTy"offset1")))]), Call("BadCode",CTy"MachineCode",LS"StoreHalf")), (Call ("StoreHalf",CTy"Store", TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4), Call("immediate_form1",CTy"offset1",Var("imm32",F32))]), ITE(Bop(Ule,Var("imm32",F32),LW(255,32)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(0,3),Mop(Cast F1,bVar"index"), Mop(Cast F1,bVar"add"),LW(1,1), Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(0,1), Var("n",F4),Var("t",F4), EX(Var("imm32",F32),LN 7,LN 4,F4),LW(11,4), EX(Var("imm32",F32),LN 3,LN 0,F4)]), Call("BadCode",CTy"MachineCode",LS"StoreHalf"))), (Call ("StoreHalf",CTy"Store", TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4), Call ("register_form1",CTy"offset1", TP[Var("m",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]), ITE(Bop(And, EQ(Var("shift_t",CTy"SRType"),LC("SRType_LSL",CTy"SRType")), EQ(nVar"shift_n",LN 0)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(0,3),Mop(Cast F1,bVar"index"), Mop(Cast F1,bVar"add"),LW(0,1), Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(0,1), Var("n",F4),Var("t",F4),LW(11,8),Var("m",F4)]), Call("BadCode",CTy"MachineCode",LS"StoreHalf"))), (Call ("StoreHalfUnprivileged",CTy"Store", TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4), Call("immediate_form2",CTy"offset2",Var("imm32",F32))]), ITE(Bop(And,bVar"postindex",Bop(Ule,Var("imm32",F32),LW(255,32))), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(0,4),Mop(Cast F1,bVar"add"),LW(6,3), Var("Rn",F4),Var("Rt",F4), EX(Var("imm32",F32),LN 7,LN 4,F4),LW(11,4), EX(Var("imm32",F32),LN 3,LN 0,F4)]), Call("BadCode",CTy"MachineCode",LS"StoreHalfUnprivileged"))), (Call ("StoreHalfUnprivileged",CTy"Store", TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4), Call("register_form2",CTy"offset2",Var("Rm",F4))]), ITE(bVar"postindex", Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(0,4),Mop(Cast F1,bVar"add"),LW(2,3), Var("Rn",F4),Var("Rt",F4),LW(11,8),Var("Rm",F4)]), Call("BadCode",CTy"MachineCode",LS"StoreHalfUnprivileged"))), (Call ("StoreMultiple",CTy"Store", TP[bVar"increment",bVar"index",bVar"wback",Var("n",F4), Var("registers",F16)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(4,3),Mop(Cast F1,bVar"index"), Mop(Cast F1,bVar"increment"),LW(0,1), Mop(Cast F1,bVar"wback"),LW(0,1),Var("n",F4), Var("registers",F16)])), (Call ("StoreMultipleUserRegisters",CTy"Store", TP[bVar"increment",bVar"wordhigher",Var("Rn",F4), Var("registers",F16)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(4,3), Mop(Cast F1, ITE(bVar"wordhigher",bVar"increment", Mop(Not,bVar"increment"))), Mop(Cast F1,bVar"increment"),LW(4,3),Var("Rn",F4), Var("registers",F16)])), (Call ("StoreDual",CTy"Store", TP[bVar"add",bVar"index",bVar"wback",Var("Rt",F4), Var("Rt2",F4),Var("Rn",F4), Call("immediate_form2",CTy"offset2",Var("imm32",F32))]), ITE(Bop(And,EQ(Bop(Add,Var("Rt",F4),LW(1,4)),Var("Rt2",F4)), Bop(Ule,Var("imm32",F32),LW(255,32))), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(0,3),Mop(Cast F1,bVar"index"), Mop(Cast F1,bVar"add"),LW(1,1), Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(0,1), Var("Rn",F4),Var("Rt",F4), EX(Var("imm32",F32),LN 7,LN 4,F4),LW(15,4), EX(Var("imm32",F32),LN 3,LN 0,F4)]), Call("BadCode",CTy"MachineCode",LS"StoreDual"))), (Call ("StoreDual",CTy"Store", TP[bVar"add",bVar"index",bVar"wback",Var("Rt",F4), Var("Rt2",F4),Var("Rn",F4), Call("register_form2",CTy"offset2",Var("Rm",F4))]), ITE(EQ(Bop(Add,Var("Rt",F4),LW(1,4)),Var("Rt2",F4)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(0,3),Mop(Cast F1,bVar"index"), Mop(Cast F1,bVar"add"),LW(0,1), Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(0,1), Var("Rn",F4),Var("Rt",F4),LW(15,8),Var("Rm",F4)]), Call("BadCode",CTy"MachineCode",LS"StoreDual"))), (Call ("StoreExclusive",CTy"Store", TP[Var("Rd",F4),Var("Rt",F4),Var("Rn",F4),Var("imm32",F32)]), ITE(EQ(Var("imm32",F32),LW(0,32)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(24,8),Var("Rn",F4),Var("Rd",F4), LW(249,8),Var("Rt",F4)]), Call("BadCode",CTy"MachineCode",LS"StoreExclusive"))), (Call ("StoreExclusiveByte",CTy"Store", TP[Var("Rd",F4),Var("Rt",F4),Var("Rn",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(28,8),Var("Rn",F4),Var("Rd",F4),LW(249,8), Var("Rt",F4)])), (Call ("StoreExclusiveHalf",CTy"Store", TP[Var("Rd",F4),Var("Rt",F4),Var("Rn",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(30,8),Var("Rn",F4),Var("Rd",F4),LW(249,8), Var("Rt",F4)])), (Call ("StoreExclusiveDoubleword",CTy"Store", TP[Var("Rd",F4),Var("Rt",F4),Var("Rt2",F4),Var("Rn",F4)]), ITE(EQ(Bop(Add,Var("Rt",F4),LW(1,4)),Var("Rt2",F4)), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(26,8),Var("Rn",F4),Var("Rd",F4), LW(249,8),Var("Rt",F4)]), Call("BadCode",CTy"MachineCode",LS"StoreExclusiveDoubleword")))])) ; val encode_def = Def ("encode",TP[Var("c",F4),Var("ast",CTy"instruction")], CS(Var("ast",CTy"instruction"), [(Call("Branch",CTy"instruction",Var("b",CTy"Branch")), Call ("e_branch",CTy"MachineCode", TP[Var("c",F4),Var("b",CTy"Branch")])), (Call("Data",CTy"instruction",Var("d",CTy"Data")), Call("e_data",CTy"MachineCode",TP[Var("c",F4),Var("d",CTy"Data")])), (Call("Load",CTy"instruction",Var("l",CTy"Load")), Call("e_load",CTy"MachineCode",TP[Var("c",F4),Var("l",CTy"Load")])), (Call("Store",CTy"instruction",Var("s",CTy"Store")), Call ("e_store",CTy"MachineCode",TP[Var("c",F4),Var("s",CTy"Store")])), (Call("Multiply",CTy"instruction",Var("m",CTy"Multiply")), Call ("e_multiply",CTy"MachineCode", TP[Var("c",F4),Var("m",CTy"Multiply")])), (Call("Media",CTy"instruction",Var("m",CTy"Media")), Call ("e_media",CTy"MachineCode",TP[Var("c",F4),Var("m",CTy"Media")])), (Call("SIMD",CTy"instruction",Var("m",CTy"SIMD")), Call("e_simd",CTy"MachineCode",TP[Var("c",F4),Var("m",CTy"SIMD")])), (Call("System",CTy"instruction",Var("s",CTy"System")), Call ("e_system",CTy"MachineCode", TP[Var("c",F4),Var("s",CTy"System")])), (Call("Hint",CTy"instruction",Var("h",CTy"Hint")), Call("e_hint",CTy"MachineCode",TP[Var("c",F4),Var("h",CTy"Hint")])), (Call("VFP",CTy"instruction",Var("v",CTy"VFP")), Call("e_vfp",CTy"MachineCode",TP[Var("c",F4),Var("v",CTy"VFP")])), (Call ("IfThen",CTy"instruction", TP[Var("firstcond",F4),Var("mask",F4)]), Call("BadCode",CTy"MachineCode",LS"IfThen")), (Call ("Divide",CTy"instruction", TP[bVar"unsigned",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]), Call("BadCode",CTy"MachineCode",LS"Divide")), (Const("ClearExclusive",CTy"instruction"), ITE(EQ(Var("c",F4),LW(14,4)), Call("ARM",CTy"MachineCode",LW(4118802463,32)), Call("BadCode",CTy"MachineCode",LS"ClearExclusive"))), (Call ("Swap",CTy"instruction", TP[bVar"byte",Var("Rt",F4),Var("Rt2",F4),Var("Rn",F4)]), Call ("ARM",CTy"MachineCode", CC[Var("c",F4),LW(2,5),Mop(Cast F1,bVar"byte"),LW(0,2), Var("Rn",F4),Var("Rt",F4),LW(9,8),Var("Rt2",F4)])), (Call("Undefined",CTy"instruction",Var("imm32",F32)), Call ("ARM",CTy"MachineCode", CC[LW(3711,12),EX(Var("imm32",F32),LN 15,LN 4,FTy 12),LW(15,4), EX(Var("imm32",F32),LN 3,LN 0,F4)])), (Const("NoOperation",CTy"instruction"), Call("ARM",CTy"MachineCode",CC[Var("c",F4),LW(52490240,28)]))])) ; val SetPassCondition_def = Def ("SetPassCondition",Var("c",F4), Close (qVar"state", CS(Var("c",F4), [(LW(0,4), Rupd ("CPSR", TP[qVar"state", Rupd("Z",TP[Dest("CPSR",CTy"PSR",qVar"state"),LT])])), (LW(1,4), Rupd ("CPSR", TP[qVar"state", Rupd("Z",TP[Dest("CPSR",CTy"PSR",qVar"state"),LF])])), (LW(2,4), Rupd ("CPSR", TP[qVar"state", Rupd("C",TP[Dest("CPSR",CTy"PSR",qVar"state"),LT])])), (LW(3,4), Rupd ("CPSR", TP[qVar"state", Rupd("C",TP[Dest("CPSR",CTy"PSR",qVar"state"),LF])])), (LW(4,4), Rupd ("CPSR", TP[qVar"state", Rupd("N",TP[Dest("CPSR",CTy"PSR",qVar"state"),LT])])), (LW(5,4), Rupd ("CPSR", TP[qVar"state", Rupd("N",TP[Dest("CPSR",CTy"PSR",qVar"state"),LF])])), (LW(6,4), Rupd ("CPSR", TP[qVar"state", Rupd("V",TP[Dest("CPSR",CTy"PSR",qVar"state"),LT])])), (LW(7,4), Rupd ("CPSR", TP[qVar"state", Rupd("V",TP[Dest("CPSR",CTy"PSR",qVar"state"),LF])])), (LW(8,4), Let(qVar"s", Rupd ("CPSR", TP[qVar"state", Rupd("C",TP[Dest("CPSR",CTy"PSR",qVar"state"),LT])]), Rupd ("CPSR", TP[qVar"s", Rupd("Z",TP[Dest("CPSR",CTy"PSR",qVar"s"),LF])]))), (LW(9,4), Rupd ("CPSR", TP[qVar"state", Rupd("C",TP[Dest("CPSR",CTy"PSR",qVar"state"),LF])])), (LW(10,4), Let(qVar"s", Rupd ("CPSR", TP[qVar"state", Rupd("N",TP[Dest("CPSR",CTy"PSR",qVar"state"),LF])]), Rupd ("CPSR", TP[qVar"s", Rupd("V",TP[Dest("CPSR",CTy"PSR",qVar"s"),LF])]))), (LW(11,4), Let(qVar"s", Rupd ("CPSR", TP[qVar"state", Rupd("N",TP[Dest("CPSR",CTy"PSR",qVar"state"),LF])]), Rupd ("CPSR", TP[qVar"s", Rupd("V",TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]))), (LW(12,4), Let(qVar"s", Rupd ("CPSR", TP[qVar"state", Rupd("N",TP[Dest("CPSR",CTy"PSR",qVar"state"),LF])]), Let(qVar"s", Rupd ("CPSR", TP[qVar"s", Rupd("V",TP[Dest("CPSR",CTy"PSR",qVar"s"),LF])]), Rupd ("CPSR", TP[qVar"s", Rupd("Z",TP[Dest("CPSR",CTy"PSR",qVar"s"),LF])])))), (LW(13,4), Let(qVar"s", Rupd ("CPSR", TP[qVar"state", Rupd("N",TP[Dest("CPSR",CTy"PSR",qVar"state"),LF])]), Rupd ("CPSR", TP[qVar"s", Rupd("V",TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]))), (AVar F4,qVar"state")]))) val () = Import.finish 0