(* ARMv8.thy - generated by L3 - 27/10/2017 *) theory ARMv8 imports "$ISABELLE_HOME/src/HOL/Word/Word" "L3_Lib" begin ML_file "$ISABELLE_HOME/src/HOL/Word/Tools/word_lib.ML" ML_file "L3.ML" record ProcState = C :: bool EL :: "2 word" N :: bool SPS :: bool V :: bool Z :: bool record TCR_EL1 = TBI0 :: bool TBI1 :: bool tcr_el1'rst :: "62 word" record TCR_EL2_EL3 = TBI :: bool tcr_el2_el3'rst :: "31 word" record SCTLRType = A :: bool E0E :: bool EE :: bool SA :: bool SA0 :: bool sctlrtype'rst :: "27 word" datatype BranchType = BranchType_CALL | BranchType_ERET | BranchType_DBGEXIT | BranchType_RET | BranchType_JMP | BranchType_EXCEPTION | BranchType_UNKNOWN datatype AccType = AccType_NORMAL | AccType_VEC | AccType_STREAM | AccType_VECSTREAM | AccType_ATOMIC | AccType_ORDERED | AccType_UNPRIV | AccType_IFETCH | AccType_PTW | AccType_DC | AccType_IC | AccType_AT datatype ShiftType = ShiftType_LSL | ShiftType_LSR | ShiftType_ASR | ShiftType_ROR datatype ExtendType = ExtendType_UXTB | ExtendType_UXTH | ExtendType_UXTW | ExtendType_UXTX | ExtendType_SXTB | ExtendType_SXTH | ExtendType_SXTW | ExtendType_SXTX datatype LogicalOp = LogicalOp_AND | LogicalOp_ORR | LogicalOp_EOR datatype MemOp = MemOp_LOAD | MemOp_STORE | MemOp_PREFETCH datatype MemBarrierOp = MemBarrierOp_DSB | MemBarrierOp_DMB | MemBarrierOp_ISB datatype MoveWideOp = MoveWideOp_N | MoveWideOp_Z | MoveWideOp_K datatype RevOp = RevOp_RBIT | RevOp_REV16 | RevOp_REV32 | RevOp_REV64 datatype SystemHintOp = SystemHintOp_NOP | SystemHintOp_YIELD | SystemHintOp_WFE | SystemHintOp_WFI | SystemHintOp_SEV | SystemHintOp_SEVL datatype PSTATEField = PSTATEField_DAIFSet | PSTATEField_DAIFClr | PSTATEField_SP datatype System = ExceptionReturn | HypervisorCall "16 word" | MoveImmediateProcState "PSTATEField \ 4 word" | MoveSystemRegister "bool \ 3 word \ 3 word \ 3 word \ 4 word \ 4 word \ 5 word" | SecureMonitorCall "16 word" | SupervisorCall "16 word" | SystemInstruction "3 word \ 3 word \ 4 word \ 4 word \ bool \ 5 word" datatype Debug = Breakpoint "16 word" | DebugRestore | DebugSwitch "2 word" | Halt "16 word" datatype LoadStore = LoadLiteral''32 "32 word \ MemOp \ bool \ 64 word \ 5 word" | LoadLiteral''64 "64 word \ MemOp \ bool \ 64 word \ 5 word" | LoadStoreAcquire''16 "16 word \ MemOp \ AccType \ bool \ bool \ bool \ 5 word \ 5 word \ 5 word" | LoadStoreAcquire''32 "32 word \ MemOp \ AccType \ bool \ bool \ bool \ 5 word \ 5 word \ 5 word" | LoadStoreAcquire''64 "64 word \ MemOp \ AccType \ bool \ bool \ bool \ 5 word \ 5 word \ 5 word" | LoadStoreAcquire''8 "8 word \ MemOp \ AccType \ bool \ bool \ bool \ 5 word \ 5 word \ 5 word" | LoadStoreAcquirePair''128 "128 word \ MemOp \ AccType \ bool \ bool \ 5 word \ 5 word \ 5 word \ 5 word" | LoadStoreAcquirePair''64 "64 word \ MemOp \ AccType \ bool \ bool \ 5 word \ 5 word \ 5 word \ 5 word" | LoadStoreImmediate''16 "16 word \ bool \ MemOp \ AccType \ bool \ bool \ bool \ bool \ bool \ bool \ 64 word \ 5 word \ 5 word" | LoadStoreImmediate''32 "32 word \ bool \ MemOp \ AccType \ bool \ bool \ bool \ bool \ bool \ bool \ 64 word \ 5 word \ 5 word" | LoadStoreImmediate''64 "64 word \ bool \ MemOp \ AccType \ bool \ bool \ bool \ bool \ bool \ bool \ 64 word \ 5 word \ 5 word" | LoadStoreImmediate''8 "8 word \ bool \ MemOp \ AccType \ bool \ bool \ bool \ bool \ bool \ bool \ 64 word \ 5 word \ 5 word" | LoadStorePair''32 "32 word \ MemOp \ AccType \ bool \ bool \ bool \ bool \ bool \ 64 word \ 5 word \ 5 word \ 5 word" | LoadStorePair''64 "64 word \ MemOp \ AccType \ bool \ bool \ bool \ bool \ bool \ 64 word \ 5 word \ 5 word \ 5 word" | LoadStoreRegister''16 "16 word \ bool \ MemOp \ bool \ 5 word \ ExtendType \ nat \ 5 word \ 5 word" | LoadStoreRegister''32 "32 word \ bool \ MemOp \ bool \ 5 word \ ExtendType \ nat \ 5 word \ 5 word" | LoadStoreRegister''64 "64 word \ bool \ MemOp \ bool \ 5 word \ ExtendType \ nat \ 5 word \ 5 word" | LoadStoreRegister''8 "8 word \ bool \ MemOp \ bool \ 5 word \ ExtendType \ nat \ 5 word \ 5 word" datatype Branch = BranchConditional "64 word \ 4 word" | BranchImmediate "64 word \ BranchType" | BranchRegister "5 word \ BranchType" | CompareAndBranch''32 "32 word \ bool \ 64 word \ 5 word" | CompareAndBranch''64 "64 word \ bool \ 64 word \ 5 word" | TestBitAndBranch''32 "32 word \ 6 word \ bool \ 64 word \ 5 word" | TestBitAndBranch''64 "64 word \ 6 word \ bool \ 64 word \ 5 word" datatype CRCExt = CRC''16 "16 word \ bool \ 5 word \ 5 word \ 5 word" | CRC''32 "32 word \ bool \ 5 word \ 5 word \ 5 word" | CRC''64 "64 word \ bool \ 5 word \ 5 word \ 5 word" | CRC''8 "8 word \ bool \ 5 word \ 5 word \ 5 word" datatype Data = AddSubCarry''32 "32 word \ bool \ bool \ 5 word \ 5 word \ 5 word" | AddSubCarry''64 "64 word \ bool \ bool \ 5 word \ 5 word \ 5 word" | AddSubExtendRegister''32 "32 word \ bool \ bool \ 5 word \ ExtendType \ 3 word \ 5 word \ 5 word" | AddSubExtendRegister''64 "64 word \ bool \ bool \ 5 word \ ExtendType \ 3 word \ 5 word \ 5 word" | AddSubImmediate''32 "32 word \ bool \ bool \ 32 word \ 5 word \ 5 word" | AddSubImmediate''64 "64 word \ bool \ bool \ 64 word \ 5 word \ 5 word" | AddSubShiftedRegister''32 "32 word \ bool \ bool \ ShiftType \ 5 word \ 6 word \ 5 word \ 5 word" | AddSubShiftedRegister''64 "64 word \ bool \ bool \ ShiftType \ 5 word \ 6 word \ 5 word \ 5 word" | BitfieldMove''32 "32 word \ bool \ bool \ 32 word \ 32 word \ nat \ nat \ 5 word \ 5 word" | BitfieldMove''64 "64 word \ bool \ bool \ 64 word \ 64 word \ nat \ nat \ 5 word \ 5 word" | ConditionalCompareImmediate''32 "32 word \ bool \ 32 word \ 4 word \ (bool \ bool \ bool \ bool) \ 5 word" | ConditionalCompareImmediate''64 "64 word \ bool \ 64 word \ 4 word \ (bool \ bool \ bool \ bool) \ 5 word" | ConditionalCompareRegister''32 "32 word \ bool \ 4 word \ (bool \ bool \ bool \ bool) \ 5 word \ 5 word" | ConditionalCompareRegister''64 "64 word \ bool \ 4 word \ (bool \ bool \ bool \ bool) \ 5 word \ 5 word" | ConditionalSelect''32 "32 word \ bool \ bool \ 4 word \ 5 word \ 5 word \ 5 word" | ConditionalSelect''64 "64 word \ bool \ bool \ 4 word \ 5 word \ 5 word \ 5 word" | CountLeading''32 "32 word \ bool \ 5 word \ 5 word" | CountLeading''64 "64 word \ bool \ 5 word \ 5 word" | Division''32 "32 word \ bool \ 5 word \ 5 word \ 5 word" | Division''64 "64 word \ bool \ 5 word \ 5 word \ 5 word" | ExtractRegister''32 "32 word \ 6 word \ 5 word \ 5 word \ 5 word" | ExtractRegister''64 "64 word \ 6 word \ 5 word \ 5 word \ 5 word" | LogicalImmediate''32 "32 word \ LogicalOp \ bool \ 32 word \ 5 word \ 5 word" | LogicalImmediate''64 "64 word \ LogicalOp \ bool \ 64 word \ 5 word \ 5 word" | LogicalShiftedRegister''32 "32 word \ LogicalOp \ bool \ bool \ ShiftType \ nat \ 5 word \ 5 word \ 5 word" | LogicalShiftedRegister''64 "64 word \ LogicalOp \ bool \ bool \ ShiftType \ nat \ 5 word \ 5 word \ 5 word" | MoveWide''32 "32 word \ MoveWideOp \ 2 word \ 16 word \ 5 word" | MoveWide''64 "64 word \ MoveWideOp \ 2 word \ 16 word \ 5 word" | MultiplyAddSub''32 "32 word \ bool \ 5 word \ 5 word \ 5 word \ 5 word" | MultiplyAddSub''64 "64 word \ bool \ 5 word \ 5 word \ 5 word \ 5 word" | MultiplyAddSubLong "bool \ bool \ 5 word \ 5 word \ 5 word \ 5 word" | MultiplyHigh "bool \ 5 word \ 5 word \ 5 word" | Reverse''32 "32 word \ RevOp \ 5 word \ 5 word" | Reverse''64 "64 word \ RevOp \ 5 word \ 5 word" | Shift''32 "32 word \ ShiftType \ 5 word \ 5 word \ 5 word" | Shift''64 "64 word \ ShiftType \ 5 word \ 5 word \ 5 word" datatype instruction = Address "bool \ 64 word \ 5 word" | Branch Branch | CRCExt CRCExt | ClearExclusive "4 word" | Data Data | Debug Debug | Hint SystemHintOp | LoadStore LoadStore | MemoryBarrier "MemBarrierOp \ 4 word" | Reserved | System System | Unallocated datatype exception = ALIGNMENT_FAULT | ASSERT string | NoException | UNDEFINED_FAULT string record state = MEM :: "64 word \ 8 word" PC :: "64 word" PSTATE :: ProcState REG :: "5 word \ 64 word" SCTLR_EL1 :: SCTLRType SCTLR_EL2 :: SCTLRType SCTLR_EL3 :: SCTLRType SP_EL0 :: "64 word" SP_EL1 :: "64 word" SP_EL2 :: "64 word" SP_EL3 :: "64 word" TCR_EL1 :: TCR_EL1 TCR_EL2 :: TCR_EL2_EL3 TCR_EL3 :: TCR_EL2_EL3 branch_hint :: "BranchType option" exception :: exception fun nat_to_BranchType :: "nat \ BranchType" where "nat_to_BranchType x = (if x = 0 then ARMv8.BranchType_CALL else if x = 1 then ARMv8.BranchType_ERET else if x = 2 then ARMv8.BranchType_DBGEXIT else if x = 3 then ARMv8.BranchType_RET else if x = 4 then ARMv8.BranchType_JMP else if x = 5 then ARMv8.BranchType_EXCEPTION else if x = 6 then ARMv8.BranchType_UNKNOWN else HOL.undefined)" fun nat_to_AccType :: "nat \ AccType" where "nat_to_AccType x = (if x = 0 then ARMv8.AccType_NORMAL else if x = 1 then ARMv8.AccType_VEC else if x = 2 then ARMv8.AccType_STREAM else if x = 3 then ARMv8.AccType_VECSTREAM else if x = 4 then ARMv8.AccType_ATOMIC else if x = 5 then ARMv8.AccType_ORDERED else if x = 6 then ARMv8.AccType_UNPRIV else if x = 7 then ARMv8.AccType_IFETCH else if x = 8 then ARMv8.AccType_PTW else if x = 9 then ARMv8.AccType_DC else if x = 10 then ARMv8.AccType_IC else if x = 11 then ARMv8.AccType_AT else HOL.undefined)" fun nat_to_ShiftType :: "nat \ ShiftType" where "nat_to_ShiftType x = (if x = 0 then ARMv8.ShiftType_LSL else if x = 1 then ARMv8.ShiftType_LSR else if x = 2 then ARMv8.ShiftType_ASR else if x = 3 then ARMv8.ShiftType_ROR else HOL.undefined)" fun nat_to_ExtendType :: "nat \ ExtendType" where "nat_to_ExtendType x = (if x = 0 then ARMv8.ExtendType_UXTB else if x = 1 then ARMv8.ExtendType_UXTH else if x = 2 then ARMv8.ExtendType_UXTW else if x = 3 then ARMv8.ExtendType_UXTX else if x = 4 then ARMv8.ExtendType_SXTB else if x = 5 then ARMv8.ExtendType_SXTH else if x = 6 then ARMv8.ExtendType_SXTW else if x = 7 then ARMv8.ExtendType_SXTX else HOL.undefined)" fun nat_to_LogicalOp :: "nat \ LogicalOp" where "nat_to_LogicalOp x = (if x = 0 then ARMv8.LogicalOp_AND else if x = 1 then ARMv8.LogicalOp_ORR else if x = 2 then ARMv8.LogicalOp_EOR else HOL.undefined)" fun nat_to_MemOp :: "nat \ MemOp" where "nat_to_MemOp x = (if x = 0 then ARMv8.MemOp_LOAD else if x = 1 then ARMv8.MemOp_STORE else if x = 2 then ARMv8.MemOp_PREFETCH else HOL.undefined)" fun nat_to_MemBarrierOp :: "nat \ MemBarrierOp" where "nat_to_MemBarrierOp x = (if x = 0 then ARMv8.MemBarrierOp_DSB else if x = 1 then ARMv8.MemBarrierOp_DMB else if x = 2 then ARMv8.MemBarrierOp_ISB else HOL.undefined)" fun nat_to_MoveWideOp :: "nat \ MoveWideOp" where "nat_to_MoveWideOp x = (if x = 0 then ARMv8.MoveWideOp_N else if x = 1 then ARMv8.MoveWideOp_Z else if x = 2 then ARMv8.MoveWideOp_K else HOL.undefined)" fun nat_to_RevOp :: "nat \ RevOp" where "nat_to_RevOp x = (if x = 0 then ARMv8.RevOp_RBIT else if x = 1 then ARMv8.RevOp_REV16 else if x = 2 then ARMv8.RevOp_REV32 else if x = 3 then ARMv8.RevOp_REV64 else HOL.undefined)" fun nat_to_SystemHintOp :: "nat \ SystemHintOp" where "nat_to_SystemHintOp x = (if x = 0 then ARMv8.SystemHintOp_NOP else if x = 1 then ARMv8.SystemHintOp_YIELD else if x = 2 then ARMv8.SystemHintOp_WFE else if x = 3 then ARMv8.SystemHintOp_WFI else if x = 4 then ARMv8.SystemHintOp_SEV else if x = 5 then ARMv8.SystemHintOp_SEVL else HOL.undefined)" fun nat_to_PSTATEField :: "nat \ PSTATEField" where "nat_to_PSTATEField x = (if x = 0 then ARMv8.PSTATEField_DAIFSet else if x = 1 then ARMv8.PSTATEField_DAIFClr else if x = 2 then ARMv8.PSTATEField_SP else HOL.undefined)" fun BranchType_to_nat :: "BranchType \ nat" where "BranchType_to_nat x = (case x of ARMv8.BranchType_CALL => 0 | ARMv8.BranchType_ERET => 1 | ARMv8.BranchType_DBGEXIT => 2 | ARMv8.BranchType_RET => 3 | ARMv8.BranchType_JMP => 4 | ARMv8.BranchType_EXCEPTION => 5 | ARMv8.BranchType_UNKNOWN => 6)" fun AccType_to_nat :: "AccType \ nat" where "AccType_to_nat x = (case x of ARMv8.AccType_NORMAL => 0 | ARMv8.AccType_VEC => 1 | ARMv8.AccType_STREAM => 2 | ARMv8.AccType_VECSTREAM => 3 | ARMv8.AccType_ATOMIC => 4 | ARMv8.AccType_ORDERED => 5 | ARMv8.AccType_UNPRIV => 6 | ARMv8.AccType_IFETCH => 7 | ARMv8.AccType_PTW => 8 | ARMv8.AccType_DC => 9 | ARMv8.AccType_IC => 10 | ARMv8.AccType_AT => 11)" fun ShiftType_to_nat :: "ShiftType \ nat" where "ShiftType_to_nat x = (case x of ARMv8.ShiftType_LSL => 0 | ARMv8.ShiftType_LSR => 1 | ARMv8.ShiftType_ASR => 2 | ARMv8.ShiftType_ROR => 3)" fun ExtendType_to_nat :: "ExtendType \ nat" where "ExtendType_to_nat x = (case x of ARMv8.ExtendType_UXTB => 0 | ARMv8.ExtendType_UXTH => 1 | ARMv8.ExtendType_UXTW => 2 | ARMv8.ExtendType_UXTX => 3 | ARMv8.ExtendType_SXTB => 4 | ARMv8.ExtendType_SXTH => 5 | ARMv8.ExtendType_SXTW => 6 | ARMv8.ExtendType_SXTX => 7)" fun LogicalOp_to_nat :: "LogicalOp \ nat" where "LogicalOp_to_nat x = (case x of ARMv8.LogicalOp_AND => 0 | ARMv8.LogicalOp_ORR => 1 | ARMv8.LogicalOp_EOR => 2)" fun MemOp_to_nat :: "MemOp \ nat" where "MemOp_to_nat x = (case x of ARMv8.MemOp_LOAD => 0 | ARMv8.MemOp_STORE => 1 | ARMv8.MemOp_PREFETCH => 2)" fun MemBarrierOp_to_nat :: "MemBarrierOp \ nat" where "MemBarrierOp_to_nat x = (case x of ARMv8.MemBarrierOp_DSB => 0 | ARMv8.MemBarrierOp_DMB => 1 | ARMv8.MemBarrierOp_ISB => 2)" fun MoveWideOp_to_nat :: "MoveWideOp \ nat" where "MoveWideOp_to_nat x = (case x of ARMv8.MoveWideOp_N => 0 | ARMv8.MoveWideOp_Z => 1 | ARMv8.MoveWideOp_K => 2)" fun RevOp_to_nat :: "RevOp \ nat" where "RevOp_to_nat x = (case x of ARMv8.RevOp_RBIT => 0 | ARMv8.RevOp_REV16 => 1 | ARMv8.RevOp_REV32 => 2 | ARMv8.RevOp_REV64 => 3)" fun SystemHintOp_to_nat :: "SystemHintOp \ nat" where "SystemHintOp_to_nat x = (case x of ARMv8.SystemHintOp_NOP => 0 | ARMv8.SystemHintOp_YIELD => 1 | ARMv8.SystemHintOp_WFE => 2 | ARMv8.SystemHintOp_WFI => 3 | ARMv8.SystemHintOp_SEV => 4 | ARMv8.SystemHintOp_SEVL => 5)" fun PSTATEField_to_nat :: "PSTATEField \ nat" where "PSTATEField_to_nat x = (case x of ARMv8.PSTATEField_DAIFSet => 0 | ARMv8.PSTATEField_DAIFClr => 1 | ARMv8.PSTATEField_SP => 2)" fun BranchType_to_string :: "BranchType \ string" where "BranchType_to_string x = (case x of ARMv8.BranchType_CALL => ''BranchType_CALL'' | ARMv8.BranchType_ERET => ''BranchType_ERET'' | ARMv8.BranchType_DBGEXIT => ''BranchType_DBGEXIT'' | ARMv8.BranchType_RET => ''BranchType_RET'' | ARMv8.BranchType_JMP => ''BranchType_JMP'' | ARMv8.BranchType_EXCEPTION => ''BranchType_EXCEPTION'' | ARMv8.BranchType_UNKNOWN => ''BranchType_UNKNOWN'')" fun AccType_to_string :: "AccType \ string" where "AccType_to_string x = (case x of ARMv8.AccType_NORMAL => ''AccType_NORMAL'' | ARMv8.AccType_VEC => ''AccType_VEC'' | ARMv8.AccType_STREAM => ''AccType_STREAM'' | ARMv8.AccType_VECSTREAM => ''AccType_VECSTREAM'' | ARMv8.AccType_ATOMIC => ''AccType_ATOMIC'' | ARMv8.AccType_ORDERED => ''AccType_ORDERED'' | ARMv8.AccType_UNPRIV => ''AccType_UNPRIV'' | ARMv8.AccType_IFETCH => ''AccType_IFETCH'' | ARMv8.AccType_PTW => ''AccType_PTW'' | ARMv8.AccType_DC => ''AccType_DC'' | ARMv8.AccType_IC => ''AccType_IC'' | ARMv8.AccType_AT => ''AccType_AT'')" fun ShiftType_to_string :: "ShiftType \ string" where "ShiftType_to_string x = (case x of ARMv8.ShiftType_LSL => ''ShiftType_LSL'' | ARMv8.ShiftType_LSR => ''ShiftType_LSR'' | ARMv8.ShiftType_ASR => ''ShiftType_ASR'' | ARMv8.ShiftType_ROR => ''ShiftType_ROR'')" fun ExtendType_to_string :: "ExtendType \ string" where "ExtendType_to_string x = (case x of ARMv8.ExtendType_UXTB => ''ExtendType_UXTB'' | ARMv8.ExtendType_UXTH => ''ExtendType_UXTH'' | ARMv8.ExtendType_UXTW => ''ExtendType_UXTW'' | ARMv8.ExtendType_UXTX => ''ExtendType_UXTX'' | ARMv8.ExtendType_SXTB => ''ExtendType_SXTB'' | ARMv8.ExtendType_SXTH => ''ExtendType_SXTH'' | ARMv8.ExtendType_SXTW => ''ExtendType_SXTW'' | ARMv8.ExtendType_SXTX => ''ExtendType_SXTX'')" fun LogicalOp_to_string :: "LogicalOp \ string" where "LogicalOp_to_string x = (case x of ARMv8.LogicalOp_AND => ''LogicalOp_AND'' | ARMv8.LogicalOp_ORR => ''LogicalOp_ORR'' | ARMv8.LogicalOp_EOR => ''LogicalOp_EOR'')" fun MemOp_to_string :: "MemOp \ string" where "MemOp_to_string x = (case x of ARMv8.MemOp_LOAD => ''MemOp_LOAD'' | ARMv8.MemOp_STORE => ''MemOp_STORE'' | ARMv8.MemOp_PREFETCH => ''MemOp_PREFETCH'')" fun MemBarrierOp_to_string :: "MemBarrierOp \ string" where "MemBarrierOp_to_string x = (case x of ARMv8.MemBarrierOp_DSB => ''MemBarrierOp_DSB'' | ARMv8.MemBarrierOp_DMB => ''MemBarrierOp_DMB'' | ARMv8.MemBarrierOp_ISB => ''MemBarrierOp_ISB'')" fun MoveWideOp_to_string :: "MoveWideOp \ string" where "MoveWideOp_to_string x = (case x of ARMv8.MoveWideOp_N => ''MoveWideOp_N'' | ARMv8.MoveWideOp_Z => ''MoveWideOp_Z'' | ARMv8.MoveWideOp_K => ''MoveWideOp_K'')" fun RevOp_to_string :: "RevOp \ string" where "RevOp_to_string x = (case x of ARMv8.RevOp_RBIT => ''RevOp_RBIT'' | ARMv8.RevOp_REV16 => ''RevOp_REV16'' | ARMv8.RevOp_REV32 => ''RevOp_REV32'' | ARMv8.RevOp_REV64 => ''RevOp_REV64'')" fun SystemHintOp_to_string :: "SystemHintOp \ string" where "SystemHintOp_to_string x = (case x of ARMv8.SystemHintOp_NOP => ''SystemHintOp_NOP'' | ARMv8.SystemHintOp_YIELD => ''SystemHintOp_YIELD'' | ARMv8.SystemHintOp_WFE => ''SystemHintOp_WFE'' | ARMv8.SystemHintOp_WFI => ''SystemHintOp_WFI'' | ARMv8.SystemHintOp_SEV => ''SystemHintOp_SEV'' | ARMv8.SystemHintOp_SEVL => ''SystemHintOp_SEVL'')" fun PSTATEField_to_string :: "PSTATEField \ string" where "PSTATEField_to_string x = (case x of ARMv8.PSTATEField_DAIFSet => ''PSTATEField_DAIFSet'' | ARMv8.PSTATEField_DAIFClr => ''PSTATEField_DAIFClr'' | ARMv8.PSTATEField_SP => ''PSTATEField_SP'')" fun string_to_BranchType :: "string \ BranchType" where "string_to_BranchType x = (if x = ''BranchType_CALL'' then ARMv8.BranchType_CALL else if x = ''BranchType_ERET'' then ARMv8.BranchType_ERET else if x = ''BranchType_DBGEXIT'' then ARMv8.BranchType_DBGEXIT else if x = ''BranchType_RET'' then ARMv8.BranchType_RET else if x = ''BranchType_JMP'' then ARMv8.BranchType_JMP else if x = ''BranchType_EXCEPTION'' then ARMv8.BranchType_EXCEPTION else if x = ''BranchType_UNKNOWN'' then ARMv8.BranchType_UNKNOWN else HOL.undefined)" fun string_to_AccType :: "string \ AccType" where "string_to_AccType x = (if x = ''AccType_NORMAL'' then ARMv8.AccType_NORMAL else if x = ''AccType_VEC'' then ARMv8.AccType_VEC else if x = ''AccType_STREAM'' then ARMv8.AccType_STREAM else if x = ''AccType_VECSTREAM'' then ARMv8.AccType_VECSTREAM else if x = ''AccType_ATOMIC'' then ARMv8.AccType_ATOMIC else if x = ''AccType_ORDERED'' then ARMv8.AccType_ORDERED else if x = ''AccType_UNPRIV'' then ARMv8.AccType_UNPRIV else if x = ''AccType_IFETCH'' then ARMv8.AccType_IFETCH else if x = ''AccType_PTW'' then ARMv8.AccType_PTW else if x = ''AccType_DC'' then ARMv8.AccType_DC else if x = ''AccType_IC'' then ARMv8.AccType_IC else if x = ''AccType_AT'' then ARMv8.AccType_AT else HOL.undefined)" fun string_to_ShiftType :: "string \ ShiftType" where "string_to_ShiftType x = (if x = ''ShiftType_LSL'' then ARMv8.ShiftType_LSL else if x = ''ShiftType_LSR'' then ARMv8.ShiftType_LSR else if x = ''ShiftType_ASR'' then ARMv8.ShiftType_ASR else if x = ''ShiftType_ROR'' then ARMv8.ShiftType_ROR else HOL.undefined)" fun string_to_ExtendType :: "string \ ExtendType" where "string_to_ExtendType x = (if x = ''ExtendType_UXTB'' then ARMv8.ExtendType_UXTB else if x = ''ExtendType_UXTH'' then ARMv8.ExtendType_UXTH else if x = ''ExtendType_UXTW'' then ARMv8.ExtendType_UXTW else if x = ''ExtendType_UXTX'' then ARMv8.ExtendType_UXTX else if x = ''ExtendType_SXTB'' then ARMv8.ExtendType_SXTB else if x = ''ExtendType_SXTH'' then ARMv8.ExtendType_SXTH else if x = ''ExtendType_SXTW'' then ARMv8.ExtendType_SXTW else if x = ''ExtendType_SXTX'' then ARMv8.ExtendType_SXTX else HOL.undefined)" fun string_to_LogicalOp :: "string \ LogicalOp" where "string_to_LogicalOp x = (if x = ''LogicalOp_AND'' then ARMv8.LogicalOp_AND else if x = ''LogicalOp_ORR'' then ARMv8.LogicalOp_ORR else if x = ''LogicalOp_EOR'' then ARMv8.LogicalOp_EOR else HOL.undefined)" fun string_to_MemOp :: "string \ MemOp" where "string_to_MemOp x = (if x = ''MemOp_LOAD'' then ARMv8.MemOp_LOAD else if x = ''MemOp_STORE'' then ARMv8.MemOp_STORE else if x = ''MemOp_PREFETCH'' then ARMv8.MemOp_PREFETCH else HOL.undefined)" fun string_to_MemBarrierOp :: "string \ MemBarrierOp" where "string_to_MemBarrierOp x = (if x = ''MemBarrierOp_DSB'' then ARMv8.MemBarrierOp_DSB else if x = ''MemBarrierOp_DMB'' then ARMv8.MemBarrierOp_DMB else if x = ''MemBarrierOp_ISB'' then ARMv8.MemBarrierOp_ISB else HOL.undefined)" fun string_to_MoveWideOp :: "string \ MoveWideOp" where "string_to_MoveWideOp x = (if x = ''MoveWideOp_N'' then ARMv8.MoveWideOp_N else if x = ''MoveWideOp_Z'' then ARMv8.MoveWideOp_Z else if x = ''MoveWideOp_K'' then ARMv8.MoveWideOp_K else HOL.undefined)" fun string_to_RevOp :: "string \ RevOp" where "string_to_RevOp x = (if x = ''RevOp_RBIT'' then ARMv8.RevOp_RBIT else if x = ''RevOp_REV16'' then ARMv8.RevOp_REV16 else if x = ''RevOp_REV32'' then ARMv8.RevOp_REV32 else if x = ''RevOp_REV64'' then ARMv8.RevOp_REV64 else HOL.undefined)" fun string_to_SystemHintOp :: "string \ SystemHintOp" where "string_to_SystemHintOp x = (if x = ''SystemHintOp_NOP'' then ARMv8.SystemHintOp_NOP else if x = ''SystemHintOp_YIELD'' then ARMv8.SystemHintOp_YIELD else if x = ''SystemHintOp_WFE'' then ARMv8.SystemHintOp_WFE else if x = ''SystemHintOp_WFI'' then ARMv8.SystemHintOp_WFI else if x = ''SystemHintOp_SEV'' then ARMv8.SystemHintOp_SEV else if x = ''SystemHintOp_SEVL'' then ARMv8.SystemHintOp_SEVL else HOL.undefined)" fun string_to_PSTATEField :: "string \ PSTATEField" where "string_to_PSTATEField x = (if x = ''PSTATEField_DAIFSet'' then ARMv8.PSTATEField_DAIFSet else if x = ''PSTATEField_DAIFClr'' then ARMv8.PSTATEField_DAIFClr else if x = ''PSTATEField_SP'' then ARMv8.PSTATEField_SP else HOL.undefined)" fun boolify'32 :: "32 word \ (bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool)" where "boolify'32 w = (case to_bl w of [b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25, b26,b27,b28,b29,b30,b31] \ (b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25, b26,b27,b28,b29,b30,b31))" ML \ local open L3 val qTy = @{typ state} in val () = def ("raise'exception", close (var("e",@{typ exception}), close (var("state",qTy), tp[lx(@{typ 'a}), ite(eq(call("state.exception",@{typ exception},var("state",qTy),@{theory}), Term.Const(@{const_name "NoException"},@{typ exception})), rupd("state.exception",tp[var("state",qTy),var("e",@{typ exception})],@{theory}), var("state",qTy))]))) end \ ML \ local open L3 in val () = def ("rec'TCR_EL1", close (var_w("x",64), record ("TCR_EL1", [bop(Bit,var_w("x",64),ln 37),bop(Bit,var_w("x",64),ln 38), cc[ex(var_w("x",64),ln 36,ln 0,(Word_Lib.mk_wordT 37)), ex(var_w("x",64),ln 63,ln 39,(Word_Lib.mk_wordT 25))]],@{theory}))) end \ ML \ local open L3 in val () = def ("reg'TCR_EL1", close (var("x",@{typ TCR_EL1}), let' (var_w("tcr_el1'rst",62), call("TCR_EL1.tcr_el1'rst",(Word_Lib.mk_wordT 62),var("x",@{typ TCR_EL1}),@{theory}), cc[ex(var_w("tcr_el1'rst",62),ln 24,ln 0,(Word_Lib.mk_wordT 25)), mop(Cast w1,call("TCR_EL1.TBI1",HOLogic.boolT,var("x",@{typ TCR_EL1}),@{theory})), mop(Cast w1,call("TCR_EL1.TBI0",HOLogic.boolT,var("x",@{typ TCR_EL1}),@{theory})), ex(var_w("tcr_el1'rst",62),ln 61,ln 25,(Word_Lib.mk_wordT 37))]))) end \ ML \ local open L3 in val () = def ("write'rec'TCR_EL1", close (tp[var_a w64,var("x",@{typ TCR_EL1})], call("reg'TCR_EL1",w64,var("x",@{typ TCR_EL1}),@{theory}))) end \ ML \ local open L3 in val () = def ("write'reg'TCR_EL1", close (tp[var_a @{typ TCR_EL1},var_w("x",64)], call("rec'TCR_EL1",@{typ TCR_EL1},var_w("x",64),@{theory}))) end \ ML \ local open L3 in val () = def ("rec'TCR_EL2_EL3", close (var_w("x",32), record ("TCR_EL2_EL3", [bop(Bit,var_w("x",32),ln 20), cc[ex(var_w("x",32),ln 19,ln 0,(Word_Lib.mk_wordT 20)), ex(var_w("x",32),ln 31,ln 21,(Word_Lib.mk_wordT 11))]],@{theory}))) end \ ML \ local open L3 in val () = def ("reg'TCR_EL2_EL3", close (var("x",@{typ TCR_EL2_EL3}), let' (var_w("tcr_el2_el3'rst",31), call ("TCR_EL2_EL3.tcr_el2_el3'rst",(Word_Lib.mk_wordT 31),var("x",@{typ TCR_EL2_EL3}), @{theory}), cc[ex(var_w("tcr_el2_el3'rst",31),ln 10,ln 0,(Word_Lib.mk_wordT 11)), mop(Cast w1,call("TCR_EL2_EL3.TBI",HOLogic.boolT,var("x",@{typ TCR_EL2_EL3}),@{theory})), ex(var_w("tcr_el2_el3'rst",31),ln 30,ln 11,(Word_Lib.mk_wordT 20))]))) end \ ML \ local open L3 in val () = def ("write'rec'TCR_EL2_EL3", close (tp[var_a w32,var("x",@{typ TCR_EL2_EL3})], call("reg'TCR_EL2_EL3",w32,var("x",@{typ TCR_EL2_EL3}),@{theory}))) end \ ML \ local open L3 in val () = def ("write'reg'TCR_EL2_EL3", close (tp[var_a @{typ TCR_EL2_EL3},var_w("x",32)], call("rec'TCR_EL2_EL3",@{typ TCR_EL2_EL3},var_w("x",32),@{theory}))) end \ ML \ local open L3 in val () = def ("rec'SCTLRType", close (var_w("x",32), record ("SCTLRType", [bop(Bit,var_w("x",32),ln 1),bop(Bit,var_w("x",32),ln 24),bop(Bit,var_w("x",32),ln 25), bop(Bit,var_w("x",32),ln 3),bop(Bit,var_w("x",32),ln 4), cc[ex(var_w("x",32),ln 0,ln 0,w1),ex(var_w("x",32),ln 2,ln 2,w1), ex(var_w("x",32),ln 23,ln 5,(Word_Lib.mk_wordT 19)), ex(var_w("x",32),ln 31,ln 26,(Word_Lib.mk_wordT 6))]],@{theory}))) end \ ML \ local open L3 in val () = def ("reg'SCTLRType", close (var("x",@{typ SCTLRType}), let' (var_w("sctlrtype'rst",27), call("SCTLRType.sctlrtype'rst",(Word_Lib.mk_wordT 27),var("x",@{typ SCTLRType}),@{theory}), cc[ex(var_w("sctlrtype'rst",27),ln 5,ln 0,(Word_Lib.mk_wordT 6)), mop(Cast w1,call("SCTLRType.EE",HOLogic.boolT,var("x",@{typ SCTLRType}),@{theory})), mop(Cast w1,call("SCTLRType.E0E",HOLogic.boolT,var("x",@{typ SCTLRType}),@{theory})), ex(var_w("sctlrtype'rst",27),ln 24,ln 6,(Word_Lib.mk_wordT 19)), mop(Cast w1,call("SCTLRType.SA0",HOLogic.boolT,var("x",@{typ SCTLRType}),@{theory})), mop(Cast w1,call("SCTLRType.SA",HOLogic.boolT,var("x",@{typ SCTLRType}),@{theory})), ex(var_w("sctlrtype'rst",27),ln 25,ln 25,w1), mop(Cast w1,call("SCTLRType.A",HOLogic.boolT,var("x",@{typ SCTLRType}),@{theory})), ex(var_w("sctlrtype'rst",27),ln 26,ln 26,w1)]))) end \ ML \ local open L3 in val () = def ("write'rec'SCTLRType", close (tp[var_a w32,var("x",@{typ SCTLRType})], call("reg'SCTLRType",w32,var("x",@{typ SCTLRType}),@{theory}))) end \ ML \ local open L3 in val () = def ("write'reg'SCTLRType", close (tp[var_a @{typ SCTLRType},var_w("x",32)], call("rec'SCTLRType",@{typ SCTLRType},var_w("x",32),@{theory}))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("X", close (var_w("n",5), close (var("state",qTy), ite(eq(var_w("n",5),lw(31,5)),ly(0,"N"), mop(Cast(@{typ "'N::len word"}), apply (call ("state.REG",@{typ "5 word \ 64 word"},var("state",qTy),@{theory}), var_w("n",5))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("write'X", close (tp[var("value",@{typ "'N::len word"}),var_w("n",5)], close (var("state",qTy), ite(mop(Not,eq(var_w("n",5),lw(31,5))), rupd ("state.REG", tp[var("state",qTy), fupd (call ("state.REG",@{typ "5 word \ 64 word"},var("state",qTy), @{theory}),var_w("n",5),mop(Cast w64,var("value",@{typ "'N::len word"})))], @{theory}),var("state",qTy))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("SP", close (var("state",qTy), mop(Cast(@{typ "'N::len word"}), ite(mop(Not, call ("ProcState.SPS",HOLogic.boolT, call("state.PSTATE",@{typ ProcState},var("state",qTy),@{theory}),@{theory})), call("state.SP_EL0",w64,var("state",qTy),@{theory}), let' (var_w("v",2), call ("ProcState.EL",(Word_Lib.mk_wordT 2), call("state.PSTATE",@{typ ProcState},var("state",qTy),@{theory}),@{theory}), itb([(eq(var_w("v",2),lw(0,2)),call("state.SP_EL0",w64,var("state",qTy),@{theory})), (eq(var_w("v",2),lw(1,2)),call("state.SP_EL1",w64,var("state",qTy),@{theory})), (eq(var_w("v",2),lw(2,2)),call("state.SP_EL2",w64,var("state",qTy),@{theory})), (eq(var_w("v",2),lw(3,2)),call("state.SP_EL3",w64,var("state",qTy),@{theory}))], mop(Fst,lx(@{typ "64 word \ state"})))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("write'SP", close (var("value",@{typ "'N::len word"}), close (var("state",qTy), let' (var_w("v",64),mop(Cast w64,var("value",@{typ "'N::len word"})), ite(mop(Not, call ("ProcState.SPS",HOLogic.boolT, call("state.PSTATE",@{typ ProcState},var("state",qTy),@{theory}),@{theory})), rupd("state.SP_EL0",tp[var("state",qTy),var_w("v",64)],@{theory}), let' (var_w("v0",2), call ("ProcState.EL",(Word_Lib.mk_wordT 2), call("state.PSTATE",@{typ ProcState},var("state",qTy),@{theory}),@{theory}), itb([(eq(var_w("v0",2),lw(0,2)), rupd("state.SP_EL0",tp[var("state",qTy),var_w("v",64)],@{theory})), (eq(var_w("v0",2),lw(1,2)), rupd("state.SP_EL1",tp[var("state",qTy),var_w("v",64)],@{theory})), (eq(var_w("v0",2),lw(2,2)), rupd("state.SP_EL2",tp[var("state",qTy),var_w("v",64)],@{theory})), (eq(var_w("v0",2),lw(3,2)), rupd("state.SP_EL3",tp[var("state",qTy),var_w("v",64)],@{theory}))], mop(Snd,lx(@{typ "unit \ state"}))))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("TranslationRegime", close (var("state",qTy), ite(mop(Not, eq(call ("ProcState.EL",(Word_Lib.mk_wordT 2), call("state.PSTATE",@{typ ProcState},var("state",qTy),@{theory}),@{theory}), lw(0,2))), call ("ProcState.EL",(Word_Lib.mk_wordT 2), call("state.PSTATE",@{typ ProcState},var("state",qTy),@{theory}),@{theory}),lw(1,2)))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("SCTLR", close (var("state",qTy), let' (var_w("v",2), apply (const("TranslationRegime",@{typ "state \ 2 word"},@{theory}), var("state",qTy)), itb([(eq(var_w("v",2),lw(1,2)), call("state.SCTLR_EL1",@{typ SCTLRType},var("state",qTy),@{theory})), (eq(var_w("v",2),lw(2,2)), call("state.SCTLR_EL2",@{typ SCTLRType},var("state",qTy),@{theory})), (eq(var_w("v",2),lw(3,2)), call("state.SCTLR_EL3",@{typ SCTLRType},var("state",qTy),@{theory})), (eq(var_w("v",2),lw(0,2)),lx @{typ SCTLRType})], mop(Fst,lx(@{typ "SCTLRType \ state"})))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("Hint_Branch", close (var("branch_type",@{typ BranchType}), close (var("state",qTy), rupd ("state.branch_hint",tp[var("state",qTy),mop(Some,var("branch_type",@{typ BranchType}))], @{theory})))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("BranchTo", close (tp[var_w("target0",64),var("branch_type",@{typ BranchType})], close (var("state",qTy), let' (var("s1",qTy), apply (call ("Hint_Branch",@{typ "state \ state"}, var("branch_type",@{typ BranchType}),@{theory}),var("state",qTy)), let' (var("s",@{typ "64 word \ state"}), let' (var_w("v",2), call ("ProcState.EL",(Word_Lib.mk_wordT 2), call("state.PSTATE",@{typ ProcState},var("s1",qTy),@{theory}),@{theory}), itb([(eq(var_w("v",2),lw(0,2)), let' (var_w("s0",64), ite(bop(And,bop(Bit,var_w("target0",64),ln 55), call ("TCR_EL1.TBI1",HOLogic.boolT, call("state.TCR_EL1",@{typ TCR_EL1},var("s1",qTy),@{theory}), @{theory})),bfi(ln 63,ln 56,lw(255,8),var_w("target0",64)), var_w("target0",64)), tp[ite(bop(And,mop(Not,bop(Bit,var_w("s0",64),ln 55)), call ("TCR_EL1.TBI0",HOLogic.boolT, call ("state.TCR_EL1",@{typ TCR_EL1},var("s1",qTy),@{theory}), @{theory})),bfi(ln 63,ln 56,lw(0,8),var_w("s0",64)), var_w("s0",64)),var("s1",qTy)])), (eq(var_w("v",2),lw(1,2)), let' (var_w("s0",64), ite(bop(And,bop(Bit,var_w("target0",64),ln 55), call ("TCR_EL1.TBI1",HOLogic.boolT, call("state.TCR_EL1",@{typ TCR_EL1},var("s1",qTy),@{theory}), @{theory})),bfi(ln 63,ln 56,lw(255,8),var_w("target0",64)), var_w("target0",64)), tp[ite(bop(And,mop(Not,bop(Bit,var_w("s0",64),ln 55)), call ("TCR_EL1.TBI0",HOLogic.boolT, call ("state.TCR_EL1",@{typ TCR_EL1},var("s1",qTy),@{theory}), @{theory})),bfi(ln 63,ln 56,lw(0,8),var_w("s0",64)), var_w("s0",64)),var("s1",qTy)])), (eq(var_w("v",2),lw(2,2)), tp[ite(call ("TCR_EL2_EL3.TBI",HOLogic.boolT, call("state.TCR_EL2",@{typ TCR_EL2_EL3},var("s1",qTy),@{theory}), @{theory}),bfi(ln 63,ln 56,lw(0,8),var_w("target0",64)), var_w("target0",64)),var("s1",qTy)]), (eq(var_w("v",2),lw(3,2)), tp[ite(call ("TCR_EL2_EL3.TBI",HOLogic.boolT, call("state.TCR_EL3",@{typ TCR_EL2_EL3},var("s1",qTy),@{theory}), @{theory}),bfi(ln 63,ln 56,lw(0,8),var_w("target0",64)), var_w("target0",64)),var("s1",qTy)])], mop(Snd,lx(@{typ "unit \ 64 word \ state"})))), rupd ("state.PC", tp[mop(Snd,var("s",@{typ "64 word \ state"})), mop(Fst,var("s",@{typ "64 word \ state"}))],@{theory})))))) end \ ML \ local open L3 in val () = def ("Align", close (tp[var("w",@{typ "'N::len word"}),var_n"n"], mop(Cast(@{typ "'N::len word"}), bop(Mul,var_n"n",bop(Div,mop(Cast HOLogic.natT,var("w",@{typ "'N::len word"})),var_n"n"))))) end \ ML \ local open L3 in val () = def ("Aligned", close (tp[var("w",@{typ "'N::len word"}),var_n"n"], eq(var("w",@{typ "'N::len word"}), call("Align",@{typ "'N::len word"},tp[var("w",@{typ "'N::len word"}),var_n"n"],@{theory})))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("CheckSPAlignment", close (var("state",qTy), ite(bop(And, ite(eq(call ("ProcState.EL",(Word_Lib.mk_wordT 2), call("state.PSTATE",@{typ ProcState},var("state",qTy),@{theory}),@{theory}), lw(0,2)), call ("SCTLRType.SA0",HOLogic.boolT, call("state.SCTLR_EL1",@{typ SCTLRType},var("state",qTy),@{theory}),@{theory}), call ("SCTLRType.SA",HOLogic.boolT, apply (const("SCTLR",@{typ "state \ SCTLRType"},@{theory}), var("state",qTy)),@{theory})), mop(Not, call ("Aligned",HOLogic.boolT, tp[apply (const("SP",@{typ "state \ 64 word"},@{theory}), var("state",qTy)),ln 16],@{theory}))), mop(Snd, apply (call ("raise'exception",@{typ "state \ (unit \ state)"}, Term.Const(@{const_name "ALIGNMENT_FAULT"},@{typ exception}),@{theory}), var("state",qTy))),var("state",qTy)))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("CheckAlignment", close (tp[var_w("address",64),var_n"size",var("acctype",@{typ AccType}),var_b"iswrite"], close (var("state",qTy), ite(bop(And, mop(Not,call("Aligned",HOLogic.boolT,tp[var_w("address",64),var_n"size"],@{theory})), bop(Or,eq(var("acctype",@{typ AccType}),lc("AccType_ATOMIC","AccType",@{theory})), bop(Or, eq(var("acctype",@{typ AccType}),lc("AccType_ORDERED","AccType",@{theory})), call ("SCTLRType.A",HOLogic.boolT, apply (const("SCTLR",@{typ "state \ SCTLRType"},@{theory}), var("state",qTy)),@{theory})))), mop(Snd, apply (call ("raise'exception",@{typ "state \ (unit \ state)"}, Term.Const(@{const_name "ALIGNMENT_FAULT"},@{typ exception}),@{theory}), var("state",qTy))),var("state",qTy))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("BigEndian", close (var("state",qTy), ite(eq(call ("ProcState.EL",(Word_Lib.mk_wordT 2), call("state.PSTATE",@{typ ProcState},var("state",qTy),@{theory}),@{theory}),lw(0,2)), call ("SCTLRType.E0E",HOLogic.boolT, call("state.SCTLR_EL1",@{typ SCTLRType},var("state",qTy),@{theory}),@{theory}), call ("SCTLRType.EE",HOLogic.boolT, apply(const("SCTLR",@{typ "state \ SCTLRType"},@{theory}),var("state",qTy)), @{theory})))) end \ ML \ local open L3 in val () = function ("ByteList",var_v"l", cs(var_v"l", [(lnl HOLogic.boolT,lnl(@{typ "bool list"})), (llc([var_b"b0",var_b"b1",var_b"b2",var_b"b3",var_b"b4",var_b"b5",var_b"b6",var_b"v7"], var_v"rest"), llc([ll[var_b"b0",var_b"b1",var_b"b2",var_b"b3",var_b"b4",var_b"b5",var_b"b6",var_b"v7"]], apply(var("ByteList",@{typ "bool list \ (bool list list)"}),var_v"rest"))), (var_v"rest",ll[var_v"rest"])],@{context})) end \ ML \ local open L3 in val () = def ("BigEndianReverse", close(var_v"l",mop(Flat,mop(Rev,call("ByteList",@{typ "bool list list"},var_v"l",@{theory}))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("Mem", close (tp[var_w("address",64),var_n"size",var("acctype",@{typ AccType})], close (var("state",qTy), let' (tp[var("r",@{typ "'N::len word"}),var("s1",@{typ "bool list \ state"})], let' (var("s",@{typ "bool list \ state"}), mop(Snd, apply (forloop (tp[ln 0,bop(Sub,var_n"size",ln 1), close (var_n"i", close (var("state",@{typ "bool list \ state"}), tp[lu, cc[mop(Cast(@{typ "bool list"}), apply (call ("state.MEM",@{typ "64 word \ 8 word"}, mop(Snd, var("state",@{typ "bool list \ state"})), @{theory}), bop(Add,var_w("address",64),mop(Cast w64,var_n"i")))), mop(Fst,var("state",@{typ "bool list \ state"}))], mop(Snd,var("state",@{typ "bool list \ state"}))]))]), tp[lnl HOLogic.boolT, apply (call ("CheckAlignment",@{typ "state \ state"}, tp[var_w("address",64),var_n"size",var("acctype",@{typ AccType}),lf], @{theory}),var("state",qTy))])), tp[mop(Cast(@{typ "'N::len word"}), ite(apply (const("BigEndian",@{typ "state \ bool"},@{theory}), mop(Snd,var("s",@{typ "bool list \ state"}))), call ("BigEndianReverse",@{typ "bool list"}, mop(Fst,var("s",@{typ "bool list \ state"})),@{theory}), mop(Fst,var("s",@{typ "bool list \ state"})))), var("s",@{typ "bool list \ state"})]), tp[var("r",@{typ "'N::len word"}),mop(Snd,var("s1",@{typ "bool list \ state"}))])))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("write'Mem", close (tp[var("value",@{typ "'N::len word"}),var_w("address",64),var_n"size", var("acctype",@{typ AccType})], close (var("state",qTy), let' (tp[var_b"v",var("s",qTy)], let' (var("s",qTy), apply (call ("CheckAlignment",@{typ "state \ state"}, tp[var_w("address",64),var_n"size",var("acctype",@{typ AccType}),lt],@{theory}), var("state",qTy)), tp[apply(const("BigEndian",@{typ "state \ bool"},@{theory}),var("s",qTy)), var("s",qTy)]), mop(Snd, apply (forloop (tp[ln 0,bop(Sub,var_n"size",ln 1), close (var_n"i", close (var("state",qTy), tp[lu, rupd ("state.MEM", tp[var("state",qTy), fupd (call ("state.MEM",@{typ "64 word \ 8 word"}, var("state",qTy),@{theory}), bop(Add,var_w("address",64),mop(Cast w64,var_n"i")), mop(Cast w8, ex(ite(var_b"v", call ("BigEndianReverse",@{typ "bool list"}, mop(Cast(@{typ "bool list"}), var("value",@{typ "'N::len word"})), @{theory}), mop(Cast(@{typ "bool list"}), var("value",@{typ "'N::len word"}))), bop(Add,bop(Mul,ln 8,var_n"i"),ln 7), bop(Mul,ln 8,var_n"i"),@{typ "bool list"})))], @{theory})]))]),var("s",qTy))))))) end \ ML \ local open L3 in val () = def ("ConditionTest", close (tp[var_w("cond",4),var_b"N",var_b"Z",var_b"C",var_b"V"], let' (var_b"result", cs(ex(var_w("cond",4),ln 3,ln 1,(Word_Lib.mk_wordT 3)), [(var_w("v",3), itb([(eq(var_w("v",3),lw(0,3)),var_b"Z"),(eq(var_w("v",3),lw(1,3)),var_b"C"), (eq(var_w("v",3),lw(2,3)),var_b"N"),(eq(var_w("v",3),lw(3,3)),var_b"V"), (eq(var_w("v",3),lw(4,3)),bop(And,var_b"C",mop(Not,var_b"Z"))), (eq(var_w("v",3),lw(5,3)),eq(var_b"N",var_b"V")), (eq(var_w("v",3),lw(6,3)),bop(And,eq(var_b"N",var_b"V"),mop(Not,var_b"Z")))], bop(Or,eq(var_w("v",3),lw(7,3)),lx HOLogic.boolT)))],@{context}), ite(bop(And,bop(Bit,var_w("cond",4),ln 0),mop(Not,eq(var_w("cond",4),lw(15,4)))), mop(Not,var_b"result"),var_b"result")))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("ConditionHolds", close (var_w("cond",4), close (var("state",qTy), call ("ConditionTest",HOLogic.boolT, tp[var_w("cond",4), call ("ProcState.N",HOLogic.boolT, call("state.PSTATE",@{typ ProcState},var("state",qTy),@{theory}),@{theory}), call ("ProcState.Z",HOLogic.boolT, call("state.PSTATE",@{typ ProcState},var("state",qTy),@{theory}),@{theory}), call ("ProcState.C",HOLogic.boolT, call("state.PSTATE",@{typ ProcState},var("state",qTy),@{theory}),@{theory}), call ("ProcState.V",HOLogic.boolT, call("state.PSTATE",@{typ ProcState},var("state",qTy),@{theory}),@{theory})], @{theory})))) end \ ML \ local open L3 in val () = def ("Ones",close(var_n"n",mop(PadLeft,tp[lt,var_n"n",lnl HOLogic.boolT]))) end \ ML \ local open L3 in val () = def ("Zeros",close(var_n"n",mop(PadLeft,tp[lf,var_n"n",lnl HOLogic.boolT]))) end \ ML \ local open L3 in val () = def ("Replicate", close (var_v"l", mop(Cast(@{typ "'N::len word"}), bop(Rep,bop(Div,mop(Size,ly(0,"N")),mop(Length,var_v"l")),var_v"l")))) end \ ML \ local open L3 in val () = def ("HighestSetBit", close (var("w",@{typ "'N::len word"}), ite(eq(var("w",@{typ "'N::len word"}),ly(0,"N")),mop(Neg,li 1), mop(Cast HOLogic.intT,mop(Log,var("w",@{typ "'N::len word"})))))) end \ ML \ local open L3 in val () = def ("CountLeadingZeroBits", close (var("w",@{typ "'N::len word"}), mop(Cast HOLogic.natT, bop(Sub,bop(Sub,mop(Cast HOLogic.intT,mop(Size,ly(0,"N"))),li 1), call("HighestSetBit",HOLogic.intT,var("w",@{typ "'N::len word"}),@{theory}))))) end \ ML \ local open L3 in val () = def ("CountLeadingSignBits", close (var("w",@{typ "'N::len word"}), bop(Sub, call ("CountLeadingZeroBits",HOLogic.natT, bop(BXor,bop(Lsr,var("w",@{typ "'N::len word"}),ln 1), bop(BAnd,var("w",@{typ "'N::len word"}),mop(BNot,bop(Ror,ly(1,"N"),ln 1)))), @{theory}),ln 1))) end \ ML \ local open L3 in val () = function ("Poly32Mod2_loop",tp[var_n"i",var_v"data",var_v"poly"], ite(bop(Lt,var_n"i",ln 32),var_v"data", apply (var("Poly32Mod2_loop", @{typ "(nat \ bool list \ bool list) \ bool list"}), tp[bop(Sub,var_n"i",ln 1), ite(bop(Bit,var_v"data",var_n"i"), cc[ex(var_v"data",bop(Sub,mop(Length,var_v"data"),ln 1),var_n"i",@{typ "bool list"}), bop(BXor,ex(var_v"data",bop(Sub,var_n"i",ln 1),ln 0,@{typ "bool list"}), mop(PadRight,tp[lf,var_n"i",var_v"poly"]))],var_v"data"),var_v"poly"]))) end \ ML \ local open L3 in val () = def ("Poly32Mod2", close (tp[var_v"data",var_w("poly",32)], mop(Cast w32, ex(call ("Poly32Mod2_loop",@{typ "bool list"}, tp[bop(Sub,mop(Length,var_v"data"),ln 1),var_v"data", mop(Cast(@{typ "bool list"}),var_w("poly",32))],@{theory}),ln 31,ln 0, @{typ "bool list"})))) end \ ML \ local open L3 in val () = def ("AddWithCarry", close (tp[var("x",@{typ "'N::len word"}),var("y",@{typ "'N::len word"}),var_b"carry_in"], let' (var_n"unsigned_sum", bop(Add, bop(Add,mop(Cast HOLogic.natT,var("x",@{typ "'N::len word"})), mop(Cast HOLogic.natT,var("y",@{typ "'N::len word"}))), mop(Cast HOLogic.natT,var_b"carry_in")), let' (var("result",@{typ "'N::len word"}), mop(Cast(@{typ "'N::len word"}),var_n"unsigned_sum"), tp[var("result",@{typ "'N::len word"}),mop(Msb,var("result",@{typ "'N::len word"})), eq(var("result",@{typ "'N::len word"}),ly(0,"N")), mop(Not, eq(mop(Cast HOLogic.natT,var("result",@{typ "'N::len word"})),var_n"unsigned_sum")), mop(Not, eq(mop(Cast HOLogic.intT,var("result",@{typ "'N::len word"})), bop(Add, bop(Add,mop(Cast HOLogic.intT,var("x",@{typ "'N::len word"})), mop(Cast HOLogic.intT,var("y",@{typ "'N::len word"}))), mop(Cast HOLogic.intT,var_b"carry_in"))))])))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("SetTheFlags", close (tp[var_b"setflags",var_b"n",var_b"z",var_b"c",var_b"v"], close (var("state",qTy), ite(var_b"setflags", let' (var("s",qTy), rupd ("state.PSTATE", tp[var("state",qTy), rupd ("ProcState.N", tp[call("state.PSTATE",@{typ ProcState},var("state",qTy),@{theory}), var_b"n"],@{theory})],@{theory}), let' (var("s",qTy), rupd ("state.PSTATE", tp[var("s",qTy), rupd ("ProcState.Z", tp[call("state.PSTATE",@{typ ProcState},var("s",qTy),@{theory}),var_b"z"], @{theory})],@{theory}), let' (var("s",qTy), rupd ("state.PSTATE", tp[var("s",qTy), rupd ("ProcState.C", tp[call("state.PSTATE",@{typ ProcState},var("s",qTy),@{theory}), var_b"c"],@{theory})],@{theory}), rupd ("state.PSTATE", tp[var("s",qTy), rupd ("ProcState.V", tp[call("state.PSTATE",@{typ ProcState},var("s",qTy),@{theory}), var_b"v"],@{theory})],@{theory})))),var("state",qTy))))) end \ ML \ local open L3 in val () = def ("DecodeShift",close(var_w("sh",2),mop(Cast @{typ ShiftType},var_w("sh",2)))) end \ ML \ local open L3 in val () = def ("ShiftValue", close (tp[var("value",@{typ "'N::len word"}),var("ty",@{typ ShiftType}),var_n"amount"], cs(var("ty",@{typ ShiftType}), [(lc("ShiftType_LSL","ShiftType",@{theory}), bop(Lsl,var("value",@{typ "'N::len word"}),var_n"amount")), (lc("ShiftType_LSR","ShiftType",@{theory}), bop(Lsr,var("value",@{typ "'N::len word"}),var_n"amount")), (lc("ShiftType_ASR","ShiftType",@{theory}), bop(Asr,var("value",@{typ "'N::len word"}),var_n"amount")), (lc("ShiftType_ROR","ShiftType",@{theory}), bop(Ror,var("value",@{typ "'N::len word"}),var_n"amount"))],@{context}))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("ShiftReg", close (tp[var_w("reg",5),var("ty",@{typ ShiftType}),var_n"amount"], close (var("state",qTy), call ("ShiftValue",@{typ "'N::len word"}, tp[apply (call("X",@{typ "state \ 'N::len word"},var_w("reg",5),@{theory}), var("state",qTy)),var("ty",@{typ ShiftType}),var_n"amount"],@{theory})))) end \ ML \ local open L3 in val () = def ("ExtendWord", close (tp[var("w",@{typ "'M::len word"}),var_b"signed"], ite(var_b"signed",mop(SE(@{typ "'N::len word"}),var("w",@{typ "'M::len word"})), mop(Cast(@{typ "'N::len word"}),var("w",@{typ "'M::len word"}))))) end \ ML \ local open L3 in val () = def ("Extend", close (tp[var_v"l",var_b"unsigned"], ite(bop(Or,var_b"unsigned",mop(Not,mop(Head,var_v"l"))), mop(Cast(@{typ "'N::len word"}),var_v"l"), mop(Cast(@{typ "'N::len word"}),mop(PadLeft,tp[lt,mop(Size,ly(0,"N")),var_v"l"]))))) end \ ML \ local open L3 in val () = def ("DecodeRegExtend",close(var_w("ext",3),mop(Cast @{typ ExtendType},var_w("ext",3)))) end \ ML \ local open L3 in val () = def ("ExtendValue", close (tp[var("value",@{typ "'N::len word"}),var("ty",@{typ ExtendType}),var_n"sh"], let' (tp[var_b"unsigned",var_n"len"], cs(var("ty",@{typ ExtendType}), [(lc("ExtendType_SXTB","ExtendType",@{theory}),tp[lf,ln 8]), (lc("ExtendType_SXTH","ExtendType",@{theory}),tp[lf,ln 16]), (lc("ExtendType_SXTW","ExtendType",@{theory}),tp[lf,ln 32]), (lc("ExtendType_SXTX","ExtendType",@{theory}),tp[lf,ln 64]), (lc("ExtendType_UXTB","ExtendType",@{theory}),tp[lt,ln 8]), (lc("ExtendType_UXTH","ExtendType",@{theory}),tp[lt,ln 16]), (lc("ExtendType_UXTW","ExtendType",@{theory}),tp[lt,ln 32]), (lc("ExtendType_UXTX","ExtendType",@{theory}),tp[lt,ln 64])],@{context}), call ("Extend",@{typ "'N::len word"}, tp[bop(Lsl, ex(mop(Cast(@{typ "bool list"}),var("value",@{typ "'N::len word"})), bop(Sub,mop(Min,tp[var_n"len",bop(Sub,mop(Size,ly(0,"N")),var_n"sh")]),ln 1), ln 0,@{typ "bool list"}),var_n"sh"),var_b"unsigned"],@{theory})))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("ExtendReg", close (tp[var_w("reg",5),var("ty",@{typ ExtendType}),var_n"sh"], close (var("state",qTy), call ("ExtendValue",@{typ "'N::len word"}, tp[apply (call("X",@{typ "state \ 'N::len word"},var_w("reg",5),@{theory}), var("state",qTy)),var("ty",@{typ ExtendType}),var_n"sh"],@{theory})))) end \ ML \ local open L3 in val () = def ("DecodeBitMasks", close (tp[var_w("immN",1),var_w("imms",6),var_w("immr",6),var_b"immediate"], let' (var_i"len", call("HighestSetBit",HOLogic.intT,cc[var_w("immN",1),mop(BNot,var_w("imms",6))],@{theory}), ite(bop(Lt,var_i"len",li 1),lo(@{typ "'M::len word \ 'M::len word"}), let' (var_n"len",mop(Cast HOLogic.natT,var_i"len"), let' (var_w("levels",6), mop(Cast (Word_Lib.mk_wordT 6), call("Ones",@{typ "bool list"},var_n"len",@{theory})), let' (var_w("S",6),bop(BAnd,var_w("imms",6),var_w("levels",6)), let' (var_w("R",6),bop(BAnd,var_w("immr",6),var_w("levels",6)), ite(bop(And,var_b"immediate",eq(var_w("S",6),var_w("levels",6))), lo(@{typ "'M::len word \ 'M::len word"}), let' (var_n"esize",bop(Exp,ln 2,var_n"len"), mop(Some, tp[call ("Replicate",@{typ "'M::len word"}, bop(Ror, mop(PadLeft, tp[lf,var_n"esize", call ("Ones",@{typ "bool list"}, bop(Add,mop(Cast HOLogic.natT,var_w("S",6)), ln 1),@{theory})]), mop(Cast HOLogic.natT,var_w("R",6))),@{theory}), call ("Replicate",@{typ "'M::len word"}, mop(PadLeft, tp[lf,var_n"esize", call ("Ones",@{typ "bool list"}, bop(Add, mop(Cast HOLogic.natT, ex(mop(Cast(@{typ "bool list"}), bop(Sub,var_w("S",6),var_w("R",6))), bop(Sub,var_n"len",ln 1),ln 0, @{typ "bool list"})),ln 1),@{theory})]), @{theory})]))))))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'Address", close (tp[var_b"page",var_w("imm",64),var_w("d",5)], close (var("state",qTy), let' (var_w("v",64),call("state.PC",w64,var("state",qTy),@{theory}), apply (call ("write'X",@{typ "state \ state"}, tp[bop(Add,ite(var_b"page",bfi(ln 11,ln 0,lw(0,12),var_w("v",64)),var_w("v",64)), var_w("imm",64)),var_w("d",5)],@{theory}),var("state",qTy)))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'AddSubCarry", close (tp[var("sf",@{typ "'N::len word"}),var_b"sub_op",var_b"setflags",var_w("m",5),var_w("n",5), var_w("d",5)], close (var("state",qTy), let' (var("v0",@{typ "'N::len word"}), apply (call("X",@{typ "state \ 'N::len word"},var_w("m",5),@{theory}), var("state",qTy)), let' (tp[var("result",@{typ "'N::len word"}), var("nzcv",@{typ "bool \ bool \ bool \ bool"})], call ("AddWithCarry", @{typ "'N::len word \ bool \ bool \ bool \ bool"}, tp[apply (call("X",@{typ "state \ 'N::len word"},var_w("n",5),@{theory}), var("state",qTy)), ite(var_b"sub_op",mop(BNot,var("v0",@{typ "'N::len word"})), var("v0",@{typ "'N::len word"})), call ("ProcState.C",HOLogic.boolT, call("state.PSTATE",@{typ ProcState},var("state",qTy),@{theory}),@{theory})], @{theory}), apply (call ("write'X",@{typ "state \ state"}, tp[var("result",@{typ "'N::len word"}),var_w("d",5)],@{theory}), apply (call ("SetTheFlags",@{typ "state \ state"}, tp[var_b"setflags", var("nzcv",@{typ "bool \ bool \ bool \ bool"})], @{theory}),var("state",qTy)))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'AddSubExtendRegister", close (tp[var("sf",@{typ "'N::len word"}),var_b"sub_op",var_b"setflags",var_w("m",5), var("extend_type",@{typ ExtendType}),var_w("imm3",3),var_w("n",5),var_w("d",5)], close (var("state",qTy), let' (var("v0",@{typ "'N::len word"}), apply (call ("ExtendReg",@{typ "state \ 'N::len word"}, tp[var_w("m",5),var("extend_type",@{typ ExtendType}), mop(Cast HOLogic.natT,var_w("imm3",3))],@{theory}),var("state",qTy)), let' (tp[var("operand2",@{typ "'N::len word"}),var_b"carry_in"], ite(var_b"sub_op",tp[mop(BNot,var("v0",@{typ "'N::len word"})),lt], tp[var("v0",@{typ "'N::len word"}),lf]), let' (tp[var("result",@{typ "'N::len word"}), var("nzcv",@{typ "bool \ bool \ bool \ bool"})], call ("AddWithCarry", @{typ "'N::len word \ bool \ bool \ bool \ bool"}, tp[ite(eq(var_w("n",5),lw(31,5)), apply (const("SP",@{typ "state \ 'N::len word"},@{theory}), var("state",qTy)), apply (call ("X",@{typ "state \ 'N::len word"},var_w("n",5), @{theory}),var("state",qTy))), var("operand2",@{typ "'N::len word"}),var_b"carry_in"],@{theory}), let' (var("s",qTy), apply (call ("SetTheFlags",@{typ "state \ state"}, tp[var_b"setflags", var("nzcv",@{typ "bool \ bool \ bool \ bool"})], @{theory}),var("state",qTy)), ite(bop(And,eq(var_w("d",5),lw(31,5)),mop(Not,var_b"setflags")), apply (call ("write'SP",@{typ "state \ state"}, var("result",@{typ "'N::len word"}),@{theory}),var("s",qTy)), apply (call ("write'X",@{typ "state \ state"}, tp[var("result",@{typ "'N::len word"}),var_w("d",5)],@{theory}), var("s",qTy)))))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'AddSubImmediate", close (tp[var("sf",@{typ "'N::len word"}),var_b"sub_op",var_b"setflags", var("imm",@{typ "'N::len word"}),var_w("n",5),var_w("d",5)], close (var("state",qTy), let' (tp[var("operand2",@{typ "'N::len word"}),var_b"carry_in"], ite(var_b"sub_op",tp[mop(BNot,var("imm",@{typ "'N::len word"})),lt], tp[var("imm",@{typ "'N::len word"}),lf]), let' (tp[var("result",@{typ "'N::len word"}), var("nzcv",@{typ "bool \ bool \ bool \ bool"})], call ("AddWithCarry", @{typ "'N::len word \ bool \ bool \ bool \ bool"}, tp[ite(eq(var_w("n",5),lw(31,5)), apply (const("SP",@{typ "state \ 'N::len word"},@{theory}), var("state",qTy)), apply (call ("X",@{typ "state \ 'N::len word"},var_w("n",5),@{theory}), var("state",qTy))),var("operand2",@{typ "'N::len word"}),var_b"carry_in"], @{theory}), let' (var("s",qTy), apply (call ("SetTheFlags",@{typ "state \ state"}, tp[var_b"setflags", var("nzcv",@{typ "bool \ bool \ bool \ bool"})], @{theory}),var("state",qTy)), ite(bop(And,eq(var_w("d",5),lw(31,5)),mop(Not,var_b"setflags")), apply (call ("write'SP",@{typ "state \ state"}, var("result",@{typ "'N::len word"}),@{theory}),var("s",qTy)), apply (call ("write'X",@{typ "state \ state"}, tp[var("result",@{typ "'N::len word"}),var_w("d",5)],@{theory}), var("s",qTy))))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'AddSubShiftedRegister", close (tp[var("sf",@{typ "'N::len word"}),var_b"sub_op",var_b"setflags", var("shift_type",@{typ ShiftType}),var_w("m",5),var_w("imm",6),var_w("n",5),var_w("d",5)], close (var("state",qTy), let' (var("v0",@{typ "'N::len word"}), apply (call ("ShiftReg",@{typ "state \ 'N::len word"}, tp[var_w("m",5),var("shift_type",@{typ ShiftType}), mop(Cast HOLogic.natT,var_w("imm",6))],@{theory}),var("state",qTy)), let' (tp[var("operand2",@{typ "'N::len word"}),var_b"carry_in"], ite(var_b"sub_op",tp[mop(BNot,var("v0",@{typ "'N::len word"})),lt], tp[var("v0",@{typ "'N::len word"}),lf]), let' (tp[var("result",@{typ "'N::len word"}), var("nzcv",@{typ "bool \ bool \ bool \ bool"})], call ("AddWithCarry", @{typ "'N::len word \ bool \ bool \ bool \ bool"}, tp[apply (call ("X",@{typ "state \ 'N::len word"},var_w("n",5),@{theory}), var("state",qTy)),var("operand2",@{typ "'N::len word"}),var_b"carry_in"], @{theory}), apply (call ("write'X",@{typ "state \ state"}, tp[var("result",@{typ "'N::len word"}),var_w("d",5)],@{theory}), apply (call ("SetTheFlags",@{typ "state \ state"}, tp[var_b"setflags", var("nzcv",@{typ "bool \ bool \ bool \ bool"})], @{theory}),var("state",qTy))))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'LogicalImmediate", close (tp[var("sf",@{typ "'N::len word"}),var("opc",@{typ LogicalOp}),var_b"setflags", var("imm",@{typ "'N::len word"}),var_w("n",5),var_w("d",5)], close (var("state",qTy), let' (var("v",@{typ "'N::len word"}), apply (call("X",@{typ "state \ 'N::len word"},var_w("n",5),@{theory}), var("state",qTy)), let' (var("result",@{typ "'N::len word"}), cs(var("opc",@{typ LogicalOp}), [(lc("LogicalOp_AND","LogicalOp",@{theory}), bop(BAnd,var("v",@{typ "'N::len word"}),var("imm",@{typ "'N::len word"}))), (lc("LogicalOp_ORR","LogicalOp",@{theory}), bop(BOr,var("v",@{typ "'N::len word"}),var("imm",@{typ "'N::len word"}))), (lc("LogicalOp_EOR","LogicalOp",@{theory}), bop(BXor,var("v",@{typ "'N::len word"}),var("imm",@{typ "'N::len word"})))], @{context}), let' (var("s",qTy), apply (call ("SetTheFlags",@{typ "state \ state"}, tp[var_b"setflags",mop(Msb,var("result",@{typ "'N::len word"})), eq(var("result",@{typ "'N::len word"}),ly(0,"N")),lf,lf],@{theory}), var("state",qTy)), ite(bop(And,eq(var_w("d",5),lw(31,5)),mop(Not,var_b"setflags")), apply (call ("write'SP",@{typ "state \ state"}, var("result",@{typ "'N::len word"}),@{theory}),var("s",qTy)), apply (call ("write'X",@{typ "state \ state"}, tp[var("result",@{typ "'N::len word"}),var_w("d",5)],@{theory}), var("s",qTy))))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'LogicalShiftedRegister", close (tp[var("sf",@{typ "'N::len word"}),var("opc",@{typ LogicalOp}),var_b"invert",var_b"setflags", var("shift_type",@{typ ShiftType}),var_n"shift_amount",var_w("m",5),var_w("n",5), var_w("d",5)], close (var("state",qTy), let' (var("v",@{typ "'N::len word"}), apply (call("X",@{typ "state \ 'N::len word"},var_w("n",5),@{theory}), var("state",qTy)), let' (var("v0",@{typ "'N::len word"}), apply (call ("ShiftReg",@{typ "state \ 'N::len word"}, tp[var_w("m",5),var("shift_type",@{typ ShiftType}),var_n"shift_amount"], @{theory}),var("state",qTy)), let' (var("operand2",@{typ "'N::len word"}), ite(var_b"invert",mop(BNot,var("v0",@{typ "'N::len word"})), var("v0",@{typ "'N::len word"})), let' (var("result",@{typ "'N::len word"}), cs(var("opc",@{typ LogicalOp}), [(lc("LogicalOp_AND","LogicalOp",@{theory}), bop(BAnd,var("v",@{typ "'N::len word"}), var("operand2",@{typ "'N::len word"}))), (lc("LogicalOp_ORR","LogicalOp",@{theory}), bop(BOr,var("v",@{typ "'N::len word"}), var("operand2",@{typ "'N::len word"}))), (lc("LogicalOp_EOR","LogicalOp",@{theory}), bop(BXor,var("v",@{typ "'N::len word"}), var("operand2",@{typ "'N::len word"})))],@{context}), apply (call ("write'X",@{typ "state \ state"}, tp[var("result",@{typ "'N::len word"}),var_w("d",5)],@{theory}), apply (call ("SetTheFlags",@{typ "state \ state"}, tp[var_b"setflags",mop(Msb,var("result",@{typ "'N::len word"})), eq(var("result",@{typ "'N::len word"}),ly(0,"N")),lf,lf],@{theory}), var("state",qTy)))))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'Shift", close (tp[var("sf",@{typ "'N::len word"}),var("shift_type",@{typ ShiftType}),var_w("m",5), var_w("n",5),var_w("d",5)], close (var("state",qTy), apply (call ("write'X",@{typ "state \ state"}, tp[apply (call ("ShiftReg",@{typ "state \ 'N::len word"}, tp[var_w("n",5),var("shift_type",@{typ ShiftType}), bop(Mod, mop(Cast HOLogic.natT, apply (call ("X",@{typ "state \ 'N::len word"},var_w("m",5), @{theory}),var("state",qTy))),mop(Size,ly(0,"N")))], @{theory}),var("state",qTy)),var_w("d",5)],@{theory}),var("state",qTy))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'MoveWide", close (tp[var("sf",@{typ "'N::len word"}),var("opcode",@{typ MoveWideOp}),var_w("hw",2), var_w("imm",16),var_w("d",5)], close (var("state",qTy), let' (var_n"pos",mop(Cast HOLogic.natT,cc[var_w("hw",2),lw(0,4)]), let' (var("s0",@{typ "'N::len word"}), bfi(bop(Add,var_n"pos",ln 15),var_n"pos",var_w("imm",16), ite(eq(var("opcode",@{typ MoveWideOp}),lc("MoveWideOp_K","MoveWideOp",@{theory})), apply (call("X",@{typ "state \ 'N::len word"},var_w("d",5),@{theory}), var("state",qTy)),ly(0,"N"))), apply (call ("write'X",@{typ "state \ state"}, tp[ite(eq(var("opcode",@{typ MoveWideOp}), lc("MoveWideOp_N","MoveWideOp",@{theory})), mop(BNot,var("s0",@{typ "'N::len word"})), var("s0",@{typ "'N::len word"})),var_w("d",5)],@{theory}), var("state",qTy))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'BitfieldMove", close (tp[var("sf",@{typ "'N::len word"}),var_b"inzero",var_b"extend", var("wmask",@{typ "'N::len word"}),var("tmask",@{typ "'N::len word"}),var_n"R",var_n"S", var_w("n",5),var_w("d",5)], close (var("state",qTy), let' (var("v",@{typ "'N::len word"}), ite(var_b"inzero",ly(0,"N"), apply (call("X",@{typ "state \ 'N::len word"},var_w("d",5),@{theory}), var("state",qTy))), let' (var("v0",@{typ "'N::len word"}), apply (call("X",@{typ "state \ 'N::len word"},var_w("n",5),@{theory}), var("state",qTy)), apply (call ("write'X",@{typ "state \ state"}, tp[bop(BOr, bop(BAnd, ite(var_b"extend", call ("Replicate",@{typ "'N::len word"}, mop(Cast(@{typ "bool list"}), bop(Bit,var("v0",@{typ "'N::len word"}),var_n"S")), @{theory}),var("v",@{typ "'N::len word"})), mop(BNot,var("tmask",@{typ "'N::len word"}))), bop(BAnd, bop(BOr, bop(BAnd,var("v",@{typ "'N::len word"}), mop(BNot,var("wmask",@{typ "'N::len word"}))), bop(BAnd,bop(Ror,var("v0",@{typ "'N::len word"}),var_n"R"), var("wmask",@{typ "'N::len word"}))), var("tmask",@{typ "'N::len word"}))),var_w("d",5)],@{theory}), var("state",qTy))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'ConditionalCompareImmediate", close (tp[var("sf",@{typ "'N::len word"}),var_b"sub_op",var("imm",@{typ "'N::len word"}), var_w("cond",4),var("nzcv",@{typ "bool \ bool \ bool \ bool"}), var_w("n",5)], close (var("state",qTy), ite(apply (call("ConditionHolds",@{typ "state \ bool"},var_w("cond",4),@{theory}), var("state",qTy)), let' (tp[var("operand2",@{typ "'N::len word"}),var_b"carry_in"], ite(var_b"sub_op",tp[mop(BNot,var("imm",@{typ "'N::len word"})),lt], tp[var("imm",@{typ "'N::len word"}),lf]), let' (tp[var_a(@{typ "'N::len word"}), var("flags",@{typ "bool \ bool \ bool \ bool"})], call ("AddWithCarry", @{typ "'N::len word \ bool \ bool \ bool \ bool"}, tp[apply (call ("X",@{typ "state \ 'N::len word"},var_w("n",5),@{theory}), var("state",qTy)),var("operand2",@{typ "'N::len word"}),var_b"carry_in"], @{theory}), apply (call ("SetTheFlags",@{typ "state \ state"}, tp[lt,var("flags",@{typ "bool \ bool \ bool \ bool"})], @{theory}),var("state",qTy)))), apply (call ("SetTheFlags",@{typ "state \ state"}, tp[lt,var("nzcv",@{typ "bool \ bool \ bool \ bool"})], @{theory}),var("state",qTy)))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'ConditionalCompareRegister", close (tp[var("sf",@{typ "'N::len word"}),var_b"sub_op",var_w("cond",4), var("nzcv",@{typ "bool \ bool \ bool \ bool"}),var_w("m",5), var_w("n",5)], close (var("state",qTy), let' (var("v0",@{typ "'N::len word"}), apply (call("X",@{typ "state \ 'N::len word"},var_w("m",5),@{theory}), var("state",qTy)), ite(apply (call ("ConditionHolds",@{typ "state \ bool"},var_w("cond",4),@{theory}), var("state",qTy)), let' (tp[var("operand2",@{typ "'N::len word"}),var_b"carry_in"], ite(var_b"sub_op",tp[mop(BNot,var("v0",@{typ "'N::len word"})),lt], tp[var("v0",@{typ "'N::len word"}),lf]), let' (tp[var_a(@{typ "'N::len word"}), var("flags",@{typ "bool \ bool \ bool \ bool"})], call ("AddWithCarry", @{typ "'N::len word \ bool \ bool \ bool \ bool"}, tp[apply (call ("X",@{typ "state \ 'N::len word"},var_w("n",5), @{theory}),var("state",qTy)), var("operand2",@{typ "'N::len word"}),var_b"carry_in"],@{theory}), apply (call ("SetTheFlags",@{typ "state \ state"}, tp[lt, var("flags",@{typ "bool \ bool \ bool \ bool"})], @{theory}),var("state",qTy)))), apply (call ("SetTheFlags",@{typ "state \ state"}, tp[lt,var("nzcv",@{typ "bool \ bool \ bool \ bool"})], @{theory}),var("state",qTy))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'ConditionalSelect", close (tp[var("sf",@{typ "'N::len word"}),var_b"else_inv",var_b"else_inc",var_w("cond",4), var_w("m",5),var_w("n",5),var_w("d",5)], close (var("state",qTy), let' (var("s",@{typ "'N::len word \ state"}), ite(apply (call ("ConditionHolds",@{typ "state \ bool"},var_w("cond",4),@{theory}), var("state",qTy)), tp[apply (call("X",@{typ "state \ 'N::len word"},var_w("n",5),@{theory}), var("state",qTy)),var("state",qTy)], let' (var("s3",@{typ "'N::len word"}), apply (call("X",@{typ "state \ 'N::len word"},var_w("m",5),@{theory}), var("state",qTy)), let' (var("s0",@{typ "'N::len word"}), ite(var_b"else_inv",mop(BNot,var("s3",@{typ "'N::len word"})), var("s3",@{typ "'N::len word"})), tp[ite(var_b"else_inc",bop(Add,var("s0",@{typ "'N::len word"}),ly(1,"N")), var("s0",@{typ "'N::len word"})),var("state",qTy)]))), apply (call ("write'X",@{typ "state \ state"}, tp[mop(Fst,var("s",@{typ "'N::len word \ state"})),var_w("d",5)],@{theory}), mop(Snd,var("s",@{typ "'N::len word \ state"}))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'CountLeading", close (tp[var("sf",@{typ "'N::len word"}),var_b"count_clz",var_w("n",5),var_w("d",5)], close (var("state",qTy), let' (var("v",@{typ "'N::len word"}), apply (call("X",@{typ "state \ 'N::len word"},var_w("n",5),@{theory}), var("state",qTy)), apply (call ("write'X",@{typ "state \ state"}, tp[mop(Cast(@{typ "'N::len word"}), ite(var_b"count_clz", call ("CountLeadingZeroBits",HOLogic.natT,var("v",@{typ "'N::len word"}), @{theory}), call ("CountLeadingSignBits",HOLogic.natT,var("v",@{typ "'N::len word"}), @{theory}))),var_w("d",5)],@{theory}),var("state",qTy)))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'ExtractRegister", close (tp[var("sf",@{typ "'N::len word"}),var_w("imms",6),var_w("m",5),var_w("n",5),var_w("d",5)], close (var("state",qTy), apply (call ("write'X",@{typ "state \ state"}, tp[mop(Cast(@{typ "'N::len word"}), bop(Lsr, cc[mop(Cast(@{typ "bool list"}), apply (call ("X",@{typ "state \ 'N::len word"},var_w("n",5), @{theory}),var("state",qTy))), mop(Cast(@{typ "bool list"}), apply (call ("X",@{typ "state \ 'N::len word"},var_w("m",5), @{theory}),var("state",qTy)))], mop(Cast HOLogic.natT,var_w("imms",6)))),var_w("d",5)],@{theory}), var("state",qTy))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'Division", close (tp[var("sf",@{typ "'N::len word"}),var_b"unsigned",var_w("m",5),var_w("n",5),var_w("d",5)], close (var("state",qTy), let' (var("v",@{typ "'N::len word"}), apply (call("X",@{typ "state \ 'N::len word"},var_w("n",5),@{theory}), var("state",qTy)), let' (var("v0",@{typ "'N::len word"}), apply (call("X",@{typ "state \ 'N::len word"},var_w("m",5),@{theory}), var("state",qTy)), apply (call ("write'X",@{typ "state \ state"}, tp[itb([(eq(var("v0",@{typ "'N::len word"}),ly(0,"N")),ly(0,"N")), (var_b"unsigned", bop(Div,var("v",@{typ "'N::len word"}),var("v0",@{typ "'N::len word"})))], bop(Quot,var("v",@{typ "'N::len word"}),var("v0",@{typ "'N::len word"}))), var_w("d",5)],@{theory}),var("state",qTy))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'MultiplyAddSub", close (tp[var("sf",@{typ "'N::len word"}),var_b"sub_op",var_w("m",5),var_w("a",5),var_w("n",5), var_w("d",5)], close (var("state",qTy), let' (var("v",@{typ "'N::len word"}), apply (call("X",@{typ "state \ 'N::len word"},var_w("n",5),@{theory}), var("state",qTy)), let' (var("v0",@{typ "'N::len word"}), apply (call("X",@{typ "state \ 'N::len word"},var_w("m",5),@{theory}), var("state",qTy)), let' (var("v1",@{typ "'N::len word"}), apply (call("X",@{typ "state \ 'N::len word"},var_w("a",5),@{theory}), var("state",qTy)), apply (call ("write'X",@{typ "state \ state"}, tp[ite(var_b"sub_op", bop(Sub,var("v1",@{typ "'N::len word"}), bop(Mul,var("v",@{typ "'N::len word"}), var("v0",@{typ "'N::len word"}))), bop(Add,var("v1",@{typ "'N::len word"}), bop(Mul,var("v",@{typ "'N::len word"}), var("v0",@{typ "'N::len word"})))),var_w("d",5)],@{theory}), var("state",qTy)))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'MultiplyAddSubLong", close (tp[var_b"sub_op",var_b"signed",var_w("m",5),var_w("a",5),var_w("n",5),var_w("d",5)], close (var("state",qTy), let' (var_w("v1",64), apply (call("X",@{typ "state \ 64 word"},var_w("a",5),@{theory}), var("state",qTy)), let' (var_w("product",64), bop(Mul, call ("ExtendWord",w64, tp[apply (call("X",@{typ "state \ 32 word"},var_w("n",5),@{theory}), var("state",qTy)),var_b"signed"],@{theory}), call ("ExtendWord",w64, tp[apply (call("X",@{typ "state \ 32 word"},var_w("m",5),@{theory}), var("state",qTy)),var_b"signed"],@{theory})), apply (call ("write'X",@{typ "state \ state"}, tp[ite(var_b"sub_op",bop(Sub,var_w("v1",64),var_w("product",64)), bop(Add,var_w("v1",64),var_w("product",64))),var_w("d",5)],@{theory}), var("state",qTy))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'MultiplyHigh", close (tp[var_b"signed",var_w("m",5),var_w("n",5),var_w("d",5)], close (var("state",qTy), apply (call ("write'X",@{typ "state \ state"}, tp[ex(bop(Mul, call ("ExtendWord",(Word_Lib.mk_wordT 128), tp[apply (call ("X",@{typ "state \ 64 word"},var_w("n",5),@{theory}), var("state",qTy)),var_b"signed"],@{theory}), call ("ExtendWord",(Word_Lib.mk_wordT 128), tp[apply (call ("X",@{typ "state \ 64 word"},var_w("m",5),@{theory}), var("state",qTy)),var_b"signed"],@{theory})),ln 127,ln 64,w64), var_w("d",5)],@{theory}),var("state",qTy))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'Reverse", close (tp[var("sf",@{typ "'N::len word"}),var("op",@{typ RevOp}),var_w("n",5),var_w("d",5)], close (var("state",qTy), ite(eq(mop(Size,ly(0,"N")),ln 32), let' (var_w("v",32), apply (call("X",@{typ "state \ 32 word"},var_w("n",5),@{theory}), var("state",qTy)), apply (call ("write'X",@{typ "state \ state"}, tp[cs(var("op",@{typ RevOp}), [(lc("RevOp_RBIT","RevOp",@{theory}),mop(Rev,var_w("v",32))), (lc("RevOp_REV16","RevOp",@{theory}), cc[ex(var_w("v",32),ln 23,ln 16,w8),ex(var_w("v",32),ln 31,ln 24,w8), ex(var_w("v",32),ln 7,ln 0,w8),ex(var_w("v",32),ln 15,ln 8,w8)]), (lc("RevOp_REV32","RevOp",@{theory}), cc[ex(var_w("v",32),ln 7,ln 0,w8),ex(var_w("v",32),ln 15,ln 8,w8), ex(var_w("v",32),ln 23,ln 16,w8),ex(var_w("v",32),ln 31,ln 24,w8)]), (lc("RevOp_REV64","RevOp",@{theory}),lx w32)],@{context}),var_w("d",5)], @{theory}),var("state",qTy))), let' (var_w("v",64), apply (call("X",@{typ "state \ 64 word"},var_w("n",5),@{theory}), var("state",qTy)), apply (call ("write'X",@{typ "state \ state"}, tp[cs(var("op",@{typ RevOp}), [(lc("RevOp_RBIT","RevOp",@{theory}),mop(Rev,var_w("v",64))), (lc("RevOp_REV16","RevOp",@{theory}), cc[ex(var_w("v",64),ln 55,ln 48,w8),ex(var_w("v",64),ln 63,ln 56,w8), ex(var_w("v",64),ln 39,ln 32,w8),ex(var_w("v",64),ln 47,ln 40,w8), ex(var_w("v",64),ln 23,ln 16,w8),ex(var_w("v",64),ln 31,ln 24,w8), ex(var_w("v",64),ln 7,ln 0,w8),ex(var_w("v",64),ln 15,ln 8,w8)]), (lc("RevOp_REV32","RevOp",@{theory}), cc[ex(var_w("v",64),ln 39,ln 32,w8),ex(var_w("v",64),ln 47,ln 40,w8), ex(var_w("v",64),ln 55,ln 48,w8),ex(var_w("v",64),ln 63,ln 56,w8), ex(var_w("v",64),ln 7,ln 0,w8),ex(var_w("v",64),ln 15,ln 8,w8), ex(var_w("v",64),ln 23,ln 16,w8),ex(var_w("v",64),ln 31,ln 24,w8)]), (lc("RevOp_REV64","RevOp",@{theory}), cc[ex(var_w("v",64),ln 7,ln 0,w8),ex(var_w("v",64),ln 15,ln 8,w8), ex(var_w("v",64),ln 23,ln 16,w8),ex(var_w("v",64),ln 31,ln 24,w8), ex(var_w("v",64),ln 39,ln 32,w8),ex(var_w("v",64),ln 47,ln 40,w8), ex(var_w("v",64),ln 55,ln 48,w8),ex(var_w("v",64),ln 63,ln 56,w8)])], @{context}),var_w("d",5)],@{theory}),var("state",qTy))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'CRC", close (tp[var("sz",@{typ "'N::len word"}),var_b"crc32c",var_w("m",5),var_w("n",5),var_w("d",5)], close (var("state",qTy), apply (call ("write'X",@{typ "state \ state"}, tp[mop(Rev, call ("Poly32Mod2",w32, tp[bop(BXor, cc[mop(Rev, mop(Cast(@{typ "bool list"}), apply (call ("X",@{typ "state \ 32 word"}, var_w("n",5),@{theory}),var("state",qTy)))), call("Zeros",@{typ "bool list"},mop(Size,ly(0,"N")),@{theory})], cc[mop(Rev, mop(Cast(@{typ "bool list"}), apply (call ("X",@{typ "state \ 'N::len word"}, var_w("m",5),@{theory}),var("state",qTy)))), call("Zeros",@{typ "bool list"},ln 32,@{theory})]), ite(var_b"crc32c",lw(517762881,32),lw(79764919,32))],@{theory})), var_w("d",5)],@{theory}),var("state",qTy))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'BranchConditional", close (tp[var_w("offset",64),var_w("cond",4)], close (var("state",qTy), ite(apply (call("ConditionHolds",@{typ "state \ bool"},var_w("cond",4),@{theory}), var("state",qTy)), apply (call ("BranchTo",@{typ "state \ state"}, tp[bop(Add,call("state.PC",w64,var("state",qTy),@{theory}),var_w("offset",64)), lc("BranchType_JMP","BranchType",@{theory})],@{theory}),var("state",qTy)), var("state",qTy))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'BranchImmediate", close (tp[var_w("offset",64),var("branch_type",@{typ BranchType})], close (var("state",qTy), let' (var("s",qTy), ite(eq(var("branch_type",@{typ BranchType}),lc("BranchType_CALL","BranchType",@{theory})), apply (call ("write'X",@{typ "state \ state"}, tp[bop(Add,call("state.PC",w64,var("state",qTy),@{theory}),lw(4,64)),lw(30,5)], @{theory}),var("state",qTy)),var("state",qTy)), apply (call ("BranchTo",@{typ "state \ state"}, tp[bop(Add,call("state.PC",w64,var("s",qTy),@{theory}),var_w("offset",64)), var("branch_type",@{typ BranchType})],@{theory}),var("s",qTy)))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'BranchRegister", close (tp[var_w("n",5),var("branch_type",@{typ BranchType})], close (var("state",qTy), apply (call ("BranchTo",@{typ "state \ state"}, tp[apply (call("X",@{typ "state \ 64 word"},var_w("n",5),@{theory}), var("state",qTy)),var("branch_type",@{typ BranchType})],@{theory}), ite(eq(var("branch_type",@{typ BranchType}),lc("BranchType_CALL","BranchType",@{theory})), apply (call ("write'X",@{typ "state \ state"}, tp[bop(Add,call("state.PC",w64,var("state",qTy),@{theory}),lw(4,64)),lw(30,5)], @{theory}),var("state",qTy)),var("state",qTy)))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'CompareAndBranch", close (tp[var("sf",@{typ "'N::len word"}),var_b"iszero",var_w("offset",64),var_w("t",5)], close (var("state",qTy), ite(eq(apply (call("X",@{typ "state \ 'N::len word"},var_w("t",5),@{theory}), var("state",qTy)),ly(0,"N")), apply (call ("BranchTo",@{typ "state \ state"}, tp[bop(Add,call("state.PC",w64,var("state",qTy),@{theory}),var_w("offset",64)), lc("BranchType_JMP","BranchType",@{theory})],@{theory}),var("state",qTy)), var("state",qTy))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'TestBitAndBranch", close (tp[var("sf",@{typ "'N::len word"}),var_w("bit_pos",6),var_b"bit_val",var_w("offset",64), var_w("t",5)], close (var("state",qTy), ite(eq(bop(Bit, apply (call("X",@{typ "state \ 'N::len word"},var_w("t",5),@{theory}), var("state",qTy)),mop(Cast HOLogic.natT,var_w("bit_pos",6))),var_b"bit_val"), apply (call ("BranchTo",@{typ "state \ state"}, tp[bop(Add,call("state.PC",w64,var("state",qTy),@{theory}),var_w("offset",64)), lc("BranchType_JMP","BranchType",@{theory})],@{theory}),var("state",qTy)), var("state",qTy))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("LoadStoreSingle", close (tp[var("size",@{typ "'N::len word"}),var_b"regsize_word",var("memop",@{typ MemOp}), var("acctype",@{typ AccType}),var_b"signed",var_b"wb_unknown",var_b"rt_unknown", var_b"wback",var_b"postindex",var_w("offset",64),var_w("n",5),var_w("t",5)], close (var("state",qTy), let' (var("s",qTy), ite(bop(And,eq(var_w("n",5),lw(31,5)), mop(Not,eq(var("memop",@{typ MemOp}),lc("MemOp_PREFETCH","MemOp",@{theory})))), apply (const("CheckSPAlignment",@{typ "state \ state"},@{theory}), var("state",qTy)),var("state",qTy)), let' (var_w("v",64), ite(eq(var_w("n",5),lw(31,5)), apply(const("SP",@{typ "state \ 64 word"},@{theory}),var("s",qTy)), apply (call("X",@{typ "state \ 64 word"},var_w("n",5),@{theory}), var("s",qTy))), let' (var_w("address",64), ite(var_b"postindex",var_w("v",64),bop(Add,var_w("v",64),var_w("offset",64))), let' (var("s",qTy), cs(var("memop",@{typ MemOp}), [(lc("MemOp_STORE","MemOp",@{theory}), apply (call ("write'Mem",@{typ "state \ state"}, tp[ite(var_b"rt_unknown",lx(@{typ "'N::len word"}), apply (call ("X",@{typ "state \ 'N::len word"}, var_w("t",5),@{theory}),var("s",qTy))), var_w("address",64),bop(Div,mop(Size,ly(0,"N")),ln 8), var("acctype",@{typ AccType})],@{theory}),var("s",qTy))), (lc("MemOp_LOAD","MemOp",@{theory}), let' (tp[var("v",@{typ "'N::len word"}),var("s",qTy)], apply (call ("Mem",@{typ "state \ ('N::len word \ state)"}, tp[var_w("address",64),bop(Div,mop(Size,ly(0,"N")),ln 8), var("acctype",@{typ AccType})],@{theory}),var("s",qTy)), ite(var_b"regsize_word", apply (call ("write'X",@{typ "state \ state"}, tp[call ("ExtendWord",w32, tp[var("v",@{typ "'N::len word"}),var_b"signed"], @{theory}),var_w("t",5)],@{theory}),var("s",qTy)), apply (call ("write'X",@{typ "state \ state"}, tp[call ("ExtendWord",w64, tp[var("v",@{typ "'N::len word"}),var_b"signed"], @{theory}),var_w("t",5)],@{theory}),var("s",qTy))))), (lc("MemOp_PREFETCH","MemOp",@{theory}),var("s",qTy))],@{context}), ite(var_b"wback", let' (var_w("address",64), itb([(var_b"wb_unknown",lx w64), (var_b"postindex",bop(Add,var_w("address",64),var_w("offset",64)))], var_w("address",64)), ite(eq(var_w("n",5),lw(31,5)), apply (call ("write'SP",@{typ "state \ state"}, var_w("address",64),@{theory}),var("s",qTy)), apply (call ("write'X",@{typ "state \ state"}, tp[var_w("address",64),var_w("n",5)],@{theory}),var("s",qTy)))), var("s",qTy))))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'LoadStoreImmediate", close (tp[var("size",@{typ "'N::len word"}),var_b"regsize_word",var("memop",@{typ MemOp}), var("acctype",@{typ AccType}),var_b"signed",var_b"wb_unknown",var_b"rt_unknown", var_b"wback",var_b"postindex",var_b"unsigned_offset",var_w("offset",64),var_w("n",5), var_w("t",5)], close (var("state",qTy), apply (call ("LoadStoreSingle",@{typ "state \ state"}, tp[var("size",@{typ "'N::len word"}),var_b"regsize_word",var("memop",@{typ MemOp}), var("acctype",@{typ AccType}),var_b"signed",var_b"wb_unknown",var_b"rt_unknown", var_b"wback",var_b"postindex",var_w("offset",64),var_w("n",5),var_w("t",5)], @{theory}),var("state",qTy))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'LoadStoreRegister", close (tp[var("size",@{typ "'N::len word"}),var_b"regsize_word",var("memop",@{typ MemOp}), var_b"signed",var_w("m",5),var("extend_type",@{typ ExtendType}),var_n"shift",var_w("n",5), var_w("t",5)], close (var("state",qTy), apply (call ("LoadStoreSingle",@{typ "state \ state"}, tp[var("size",@{typ "'N::len word"}),var_b"regsize_word",var("memop",@{typ MemOp}), lc("AccType_NORMAL","AccType",@{theory}),var_b"signed",lf,lf,lf,lf, apply (call ("ExtendReg",@{typ "state \ 64 word"}, tp[var_w("m",5),var("extend_type",@{typ ExtendType}),var_n"shift"],@{theory}), var("state",qTy)),var_w("n",5),var_w("t",5)],@{theory}),var("state",qTy))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'LoadStorePair", close (tp[var("size",@{typ "'N::len word"}),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}), var_b"signed",var_b"wb_unknown",var_b"rt_unknown",var_b"wback",var_b"postindex", var_w("offset",64),var_w("n",5),var_w("t",5),var_w("t2",5)], close (var("state",qTy), let' (var_n"dbytes",bop(Div,mop(Size,ly(0,"N")),ln 8), let' (var("s",qTy), ite(eq(var_w("n",5),lw(31,5)), apply (const("CheckSPAlignment",@{typ "state \ state"},@{theory}), var("state",qTy)),var("state",qTy)), let' (var_w("v",64), ite(eq(var_w("n",5),lw(31,5)), apply(const("SP",@{typ "state \ 64 word"},@{theory}),var("s",qTy)), apply (call("X",@{typ "state \ 64 word"},var_w("n",5),@{theory}), var("s",qTy))), let' (var_w("address",64), ite(var_b"postindex",var_w("v",64),bop(Add,var_w("v",64),var_w("offset",64))), let' (var("s",qTy), cs(var("memop",@{typ MemOp}), [(lc("MemOp_STORE","MemOp",@{theory}), apply (call ("write'Mem",@{typ "state \ state"}, tp[ite(bop(And,var_b"rt_unknown",eq(var_w("t2",5),var_w("n",5))), lx(@{typ "'N::len word"}), apply (call ("X",@{typ "state \ 'N::len word"}, var_w("t2",5),@{theory}),var("s",qTy))), bop(Add,var_w("address",64),mop(Cast w64,var_n"dbytes")), var_n"dbytes",var("acctype",@{typ AccType})],@{theory}), apply (call ("write'Mem",@{typ "state \ state"}, tp[ite(bop(And,var_b"rt_unknown",eq(var_w("t",5),var_w("n",5))), lx(@{typ "'N::len word"}), apply (call ("X",@{typ "state \ 'N::len word"}, var_w("t",5),@{theory}),var("s",qTy))), var_w("address",64),var_n"dbytes", var("acctype",@{typ AccType})],@{theory}),var("s",qTy)))), (lc("MemOp_LOAD","MemOp",@{theory}), let' (tp[var("v",@{typ "'N::len word \ 'N::len word"}),var("s",qTy)], ite(var_b"rt_unknown", tp[lx(@{typ "'N::len word \ 'N::len word"}),var("s",qTy)], let' (tp[var("v",@{typ "'N::len word"}),var("s",qTy)], apply (call ("Mem", @{typ "state \ ('N::len word \ state)"}, tp[var_w("address",64),var_n"dbytes", var("acctype",@{typ AccType})],@{theory}), var("s",qTy)), let' (tp[var("v0",@{typ "'N::len word"}),var("s",qTy)], apply (call ("Mem", @{typ "state \ ('N::len word \ state)"}, tp[bop(Add,var_w("address",64), mop(Cast w64,var_n"dbytes")),var_n"dbytes", var("acctype",@{typ AccType})],@{theory}), var("s",qTy)), tp[tp[var("v",@{typ "'N::len word"}), var("v0",@{typ "'N::len word"})],var("s",qTy)]))), let' (tp[var("data1",@{typ "'N::len word"}), var("data2",@{typ "'N::len word"})], var("v",@{typ "'N::len word \ 'N::len word"}), ite(var_b"signed", apply (call ("write'X",@{typ "state \ state"}, tp[call ("ExtendWord",w64, tp[var("data2",@{typ "'N::len word"}), var_b"signed"],@{theory}),var_w("t2",5)], @{theory}), apply (call ("write'X",@{typ "state \ state"}, tp[call ("ExtendWord",w64, tp[var("data1",@{typ "'N::len word"}), var_b"signed"],@{theory}),var_w("t",5)], @{theory}),var("s",qTy))), apply (call ("write'X",@{typ "state \ state"}, tp[var("data2",@{typ "'N::len word"}),var_w("t2",5)], @{theory}), apply (call ("write'X",@{typ "state \ state"}, tp[var("data1",@{typ "'N::len word"}),var_w("t",5)], @{theory}),var("s",qTy))))))), (var_a @{typ MemOp},var("s",qTy))],@{context}), ite(var_b"wback", let' (var_w("address",64), itb([(var_b"wb_unknown",lx w64), (var_b"postindex", bop(Add,var_w("address",64),var_w("offset",64)))], var_w("address",64)), ite(eq(var_w("n",5),lw(31,5)), apply (call ("write'SP",@{typ "state \ state"}, var_w("address",64),@{theory}),var("s",qTy)), apply (call ("write'X",@{typ "state \ state"}, tp[var_w("address",64),var_w("n",5)],@{theory}), var("s",qTy)))),var("s",qTy)))))))))) end \ ML \ local open L3 in val () = def ("ExclusiveMonitorPass",close(tp[var_w("address",64),var_n"n"],lx HOLogic.boolT)) end \ ML \ local open L3 in val () = def ("SetExclusiveMonitors",close(tp[var_w("address",64),var_n"n"],lu)) end \ ML \ local open L3 in val () = def ("ExclusiveMonitorStatus",lx w1) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'LoadStoreAcquire", close (tp[var("size",@{typ "'N::len word"}),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}), var_b"excl",var_b"rn_unknown",var_b"rt_unknown",var_w("s",5),var_w("n",5),var_w("t",5)], close (var("state",qTy), let' (var_n"dbytes",bop(Div,mop(Size,ly(0,"N")),ln 8), let' (var("s0",qTy), ite(eq(var_w("n",5),lw(31,5)), apply (const("CheckSPAlignment",@{typ "state \ state"},@{theory}), var("state",qTy)),var("state",qTy)), let' (var_w("v",64), itb([(eq(var_w("n",5),lw(31,5)), apply (const("SP",@{typ "state \ 64 word"},@{theory}),var("s0",qTy))), (var_b"rn_unknown",lx w64)], apply (call("X",@{typ "state \ 64 word"},var_w("n",5),@{theory}), var("s0",qTy))), cs(var("memop",@{typ MemOp}), [(lc("MemOp_STORE","MemOp",@{theory}), let' (var("v0",@{typ "'N::len word"}), ite(var_b"rt_unknown",lx(@{typ "'N::len word"}), apply (call ("X",@{typ "state \ 'N::len word"},var_w("t",5), @{theory}),var("s0",qTy))), ite(var_b"excl", ite(call ("ExclusiveMonitorPass",HOLogic.boolT, tp[var_w("v",64),var_n"dbytes"],@{theory}), apply (call ("write'X",@{typ "state \ state"}, tp[mop(Cast w32,const("ExclusiveMonitorStatus",w1,@{theory})), var_w("s",5)],@{theory}), apply (call ("write'Mem",@{typ "state \ state"}, tp[var("v0",@{typ "'N::len word"}),var_w("v",64), var_n"dbytes",var("acctype",@{typ AccType})],@{theory}), var("s0",qTy))), apply (call ("write'X",@{typ "state \ state"}, tp[lw(1,32),var_w("s",5)],@{theory}),var("s0",qTy))), apply (call ("write'Mem",@{typ "state \ state"}, tp[var("v0",@{typ "'N::len word"}),var_w("v",64),var_n"dbytes", var("acctype",@{typ AccType})],@{theory}),var("s0",qTy))))), (lc("MemOp_LOAD","MemOp",@{theory}), let' (tp[var("v",@{typ "'N::len word"}),var("s",qTy)], apply (call ("Mem",@{typ "state \ ('N::len word \ state)"}, tp[var_w("v",64),var_n"dbytes",var("acctype",@{typ AccType})], @{theory}),var("s0",qTy)), ite(eq(mop(Size,ly(0,"N")),ln 64), apply (call ("write'X",@{typ "state \ state"}, tp[var("v",@{typ "'N::len word"}),var_w("t",5)],@{theory}), var("s",qTy)), apply (call ("write'X",@{typ "state \ state"}, tp[mop(Cast w32,var("v",@{typ "'N::len word"})),var_w("t",5)], @{theory}),var("s",qTy))))),(var_a @{typ MemOp},var("s0",qTy))], @{context}))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'LoadStoreAcquirePair", close (tp[var("size",@{typ "'N::len word"}),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}), var_b"rn_unknown",var_b"rt_unknown",var_w("s",5),var_w("n",5),var_w("t",5),var_w("t2",5)], close (var("state",qTy), let' (var_n"dbytes",bop(Div,mop(Size,ly(0,"N")),ln 8), let' (var("s0",qTy), ite(eq(var_w("n",5),lw(31,5)), apply (const("CheckSPAlignment",@{typ "state \ state"},@{theory}), var("state",qTy)),var("state",qTy)), let' (var_w("v",64), itb([(eq(var_w("n",5),lw(31,5)), apply (const("SP",@{typ "state \ 64 word"},@{theory}),var("s0",qTy))), (var_b"rn_unknown",lx w64)], apply (call("X",@{typ "state \ 64 word"},var_w("n",5),@{theory}), var("s0",qTy))), cs(var("memop",@{typ MemOp}), [(lc("MemOp_STORE","MemOp",@{theory}), ite(call ("ExclusiveMonitorPass",HOLogic.boolT,tp[var_w("v",64),var_n"dbytes"], @{theory}), apply (call ("write'X",@{typ "state \ state"}, tp[mop(Cast w32,const("ExclusiveMonitorStatus",w1,@{theory})), var_w("s",5)],@{theory}), apply (call ("write'Mem",@{typ "state \ state"}, tp[itb([(var_b"rt_unknown",lx(@{typ "'N::len word"})), (eq(mop(Size,ly(0,"N")),ln 64), ite(apply (const ("BigEndian", @{typ "state \ bool"},@{theory}), var("s0",qTy)), mop(Cast(@{typ "'N::len word"}), cc[apply (call ("X", @{typ "state \ 32 word"}, var_w("t",5),@{theory}),var("s0",qTy)), apply (call ("X", @{typ "state \ 32 word"}, var_w("t2",5),@{theory}),var("s0",qTy))]), mop(Cast(@{typ "'N::len word"}), cc[apply (call ("X", @{typ "state \ 32 word"}, var_w("t2",5),@{theory}),var("s0",qTy)), apply (call ("X", @{typ "state \ 32 word"}, var_w("t",5),@{theory}),var("s0",qTy))]))), (apply (const ("BigEndian",@{typ "state \ bool"}, @{theory}),var("s0",qTy)), mop(Cast(@{typ "'N::len word"}), cc[apply (call ("X",@{typ "state \ 64 word"}, var_w("t",5),@{theory}),var("s0",qTy)), apply (call ("X",@{typ "state \ 64 word"}, var_w("t2",5),@{theory}),var("s0",qTy))]))], mop(Cast(@{typ "'N::len word"}), cc[apply (call ("X",@{typ "state \ 64 word"}, var_w("t2",5),@{theory}),var("s0",qTy)), apply (call ("X",@{typ "state \ 64 word"}, var_w("t",5),@{theory}),var("s0",qTy))])), var_w("v",64),var_n"dbytes",var("acctype",@{typ AccType})], @{theory}),var("s0",qTy))), apply (call ("write'X",@{typ "state \ state"}, tp[lw(1,32),var_w("s",5)],@{theory}),var("s0",qTy)))), (lc("MemOp_LOAD","MemOp",@{theory}), itb([(var_b"rt_unknown", ite(eq(mop(Size,ly(0,"N")),ln 64), apply (call ("write'X",@{typ "state \ state"}, tp[lx w32,var_w("t",5)],@{theory}),var("s0",qTy)), apply (call ("write'X",@{typ "state \ state"}, tp[lx w64,var_w("t",5)],@{theory}),var("s0",qTy)))), (eq(mop(Size,ly(0,"N")),ln 64), let' (tp[var("v",@{typ "'N::len word"}),var("s",qTy)], apply (call ("Mem", @{typ "state \ ('N::len word \ state)"}, tp[var_w("v",64),var_n"dbytes",var("acctype",@{typ AccType})], @{theory}),var("s0",qTy)), ite(apply (const ("BigEndian",@{typ "state \ bool"},@{theory}), var("s",qTy)), apply (call ("write'X",@{typ "state \ state"}, tp[ex(var("v",@{typ "'N::len word"}),ln 31,ln 0,w32), var_w("t2",5)],@{theory}), apply (call ("write'X",@{typ "state \ state"}, tp[ex(var("v",@{typ "'N::len word"}),ln 63,ln 32,w32), var_w("t",5)],@{theory}),var("s",qTy))), apply (call ("write'X",@{typ "state \ state"}, tp[ex(var("v",@{typ "'N::len word"}),ln 63,ln 32,w32), var_w("t2",5)],@{theory}), apply (call ("write'X",@{typ "state \ state"}, tp[ex(var("v",@{typ "'N::len word"}),ln 31,ln 0,w32), var_w("t",5)],@{theory}),var("s",qTy))))))], let' (tp[var_w("v0",64),var("s",qTy)], apply (call ("Mem",@{typ "state \ (64 word \ state)"}, tp[var_w("v",64),ln 8,var("acctype",@{typ AccType})],@{theory}), ite(mop(Not, call ("Aligned",HOLogic.boolT,tp[var_w("v",64),var_n"dbytes"], @{theory})), mop(Snd, apply (call ("raise'exception", @{typ "state \ (unit \ state)"}, Term.Const (@{const_name "ALIGNMENT_FAULT"},@{typ exception}), @{theory}),var("s0",qTy))),var("s0",qTy))), let' (tp[var_w("v",64),var("s",qTy)], apply (call ("Mem",@{typ "state \ (64 word \ state)"}, tp[bop(Add,var_w("v",64),lw(8,64)),ln 8, var("acctype",@{typ AccType})],@{theory}), apply (call ("write'X",@{typ "state \ state"}, tp[var_w("v0",64),var_w("t",5)],@{theory}),var("s",qTy))), apply (call ("write'X",@{typ "state \ state"}, tp[var_w("v",64),var_w("t2",5)],@{theory}),var("s",qTy)))))), (var_a @{typ MemOp},var("s0",qTy))],@{context}))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'LoadLiteral", close (tp[var("size",@{typ "'N::len word"}),var("memop",@{typ MemOp}),var_b"signed", var_w("offset",64),var_w("t",5)], close (var("state",qTy), cs(var("memop",@{typ MemOp}), [(lc("MemOp_LOAD","MemOp",@{theory}), let' (tp[var("v",@{typ "'N::len word"}),var("s",qTy)], apply (call ("Mem",@{typ "state \ ('N::len word \ state)"}, tp[bop(Add,call("state.PC",w64,var("state",qTy),@{theory}),var_w("offset",64)), bop(Div,mop(Size,ly(0,"N")),ln 8),lc("AccType_NORMAL","AccType",@{theory})], @{theory}),var("state",qTy)), apply (call ("write'X",@{typ "state \ state"}, tp[call ("ExtendWord",w64,tp[var("v",@{typ "'N::len word"}),var_b"signed"], @{theory}),var_w("t",5)],@{theory}),var("s",qTy)))), (var_a @{typ MemOp},var("state",qTy))],@{context})))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'MemoryBarrier", close (tp[var("op",@{typ MemBarrierOp}),var_w("crm",4)], close (var("state",qTy), mop(Snd, apply (call ("raise'exception",@{typ "state \ (unit \ state)"}, call("exception.UNDEFINED_FAULT",@{typ exception},ls"MemoryBarrier",@{theory}), @{theory}),var("state",qTy)))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'ClearExclusive", close (var_w("imm",4), close (var("state",qTy), mop(Snd, apply (call ("raise'exception",@{typ "state \ (unit \ state)"}, call("exception.UNDEFINED_FAULT",@{typ exception},ls"ClearExclusive",@{theory}), @{theory}),var("state",qTy)))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'Hint", close (var("op",@{typ SystemHintOp}), close (var("state",qTy), ite(eq(var("op",@{typ SystemHintOp}),lc("SystemHintOp_NOP","SystemHintOp",@{theory})), var("state",qTy), mop(Snd, apply (call ("raise'exception",@{typ "state \ (unit \ state)"}, call("exception.UNDEFINED_FAULT",@{typ exception},ls"Hint",@{theory}), @{theory}),var("state",qTy))))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'Breakpoint", close (var_w("imm",16), close (var("state",qTy), mop(Snd, apply (call ("raise'exception",@{typ "state \ (unit \ state)"}, call("exception.UNDEFINED_FAULT",@{typ exception},ls"Breakpoint",@{theory}), @{theory}),var("state",qTy)))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'DebugSwitch", close (var_w("target_level",2), close (var("state",qTy), mop(Snd, apply (call ("raise'exception",@{typ "state \ (unit \ state)"}, call("exception.UNDEFINED_FAULT",@{typ exception},ls"DebugSwitch",@{theory}), @{theory}),var("state",qTy)))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'DebugRestore", close (var("state",qTy), mop(Snd, apply (call ("raise'exception",@{typ "state \ (unit \ state)"}, call("exception.UNDEFINED_FAULT",@{typ exception},ls"DebugRestore",@{theory}), @{theory}),var("state",qTy))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'Halt", close (var_w("imm16",16), close (var("state",qTy), mop(Snd, apply (call ("raise'exception",@{typ "state \ (unit \ state)"}, call("exception.UNDEFINED_FAULT",@{typ exception},ls"Halt",@{theory}),@{theory}), var("state",qTy)))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'SystemInstruction", close (tp[var_w("sys_op1",3),var_w("sys_op2",3),var_w("sys_crn",4),var_w("sys_crm",4), var_b"has_result",var_w("t",5)], close (var("state",qTy), mop(Snd, apply (call ("raise'exception",@{typ "state \ (unit \ state)"}, call("exception.UNDEFINED_FAULT",@{typ exception},ls"System",@{theory}),@{theory}), var("state",qTy)))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'MoveSystemRegister", close (tp[var_b"read",var_w("sys_op0",3),var_w("sys_op1",3),var_w("sys_op2",3),var_w("sys_crn",4), var_w("sys_crm",4),var_w("t",5)], close (var("state",qTy), mop(Snd, apply (call ("raise'exception",@{typ "state \ (unit \ state)"}, call ("exception.UNDEFINED_FAULT",@{typ exception},ls"MoveSystemRegister",@{theory}), @{theory}),var("state",qTy)))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'MoveImmediateProcState", close (tp[var("field",@{typ PSTATEField}),var_w("operand",4)], close (var("state",qTy), mop(Snd, apply (call ("raise'exception",@{typ "state \ (unit \ state)"}, call ("exception.UNDEFINED_FAULT",@{typ exception},ls"MoveImmediateProcState", @{theory}),@{theory}),var("state",qTy)))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'SupervisorCall", close (var_w("imm16",16), close (var("state",qTy), mop(Snd, apply (call ("raise'exception",@{typ "state \ (unit \ state)"}, call("exception.UNDEFINED_FAULT",@{typ exception},ls"SupervisorCall",@{theory}), @{theory}),var("state",qTy)))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'HypervisorCall", close (var_w("imm16",16), close (var("state",qTy), mop(Snd, apply (call ("raise'exception",@{typ "state \ (unit \ state)"}, call("exception.UNDEFINED_FAULT",@{typ exception},ls"HypervisorCall",@{theory}), @{theory}),var("state",qTy)))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'SecureMonitorCall", close (var_w("imm16",16), close (var("state",qTy), mop(Snd, apply (call ("raise'exception",@{typ "state \ (unit \ state)"}, call ("exception.UNDEFINED_FAULT",@{typ exception},ls"SecureMonitorCall",@{theory}), @{theory}),var("state",qTy)))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'ExceptionReturn", close (var("state",qTy), mop(Snd, apply (call ("raise'exception",@{typ "state \ (unit \ state)"}, call("exception.UNDEFINED_FAULT",@{typ exception},ls"ExceptionReturn",@{theory}), @{theory}),var("state",qTy))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'Unallocated", close (var("state",qTy), mop(Snd, apply (call ("raise'exception",@{typ "state \ (unit \ state)"}, call("exception.UNDEFINED_FAULT",@{typ exception},ls"Unallocated",@{theory}), @{theory}),var("state",qTy))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("dfn'Reserved", close (var("state",qTy), mop(Snd, apply (call ("raise'exception",@{typ "state \ (unit \ state)"}, call("exception.UNDEFINED_FAULT",@{typ exception},ls"Reserved",@{theory}),@{theory}), var("state",qTy))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("Run", close (var("v0",@{typ instruction}), close (var("state",qTy), cs(var("v0",@{typ instruction}), [(Term.Const(@{const_name "Reserved"},@{typ instruction}), apply (const("dfn'Reserved",@{typ "state \ state"},@{theory}),var("state",qTy))), (Term.Const(@{const_name "Unallocated"},@{typ instruction}), apply (const("dfn'Unallocated",@{typ "state \ state"},@{theory}), var("state",qTy))), (call ("instruction.Address",@{typ instruction}, var("v81",@{typ "bool \ 64 word \ 5 word"}),@{theory}), apply (call ("dfn'Address",@{typ "state \ state"}, var("v81",@{typ "bool \ 64 word \ 5 word"}),@{theory}), var("state",qTy))), (call("instruction.ClearExclusive",@{typ instruction},var_w("v82",4),@{theory}), apply (call ("dfn'ClearExclusive",@{typ "state \ state"},var_w("v82",4),@{theory}), var("state",qTy))), (call("instruction.Hint",@{typ instruction},var("v83",@{typ SystemHintOp}),@{theory}), apply (call ("dfn'Hint",@{typ "state \ state"},var("v83",@{typ SystemHintOp}), @{theory}),var("state",qTy))), (call ("instruction.MemoryBarrier",@{typ instruction}, var("v84",@{typ "MemBarrierOp \ 4 word"}),@{theory}), apply (call ("dfn'MemoryBarrier",@{typ "state \ state"}, var("v84",@{typ "MemBarrierOp \ 4 word"}),@{theory}),var("state",qTy))), (call("instruction.Branch",@{typ instruction},var("v1",@{typ Branch}),@{theory}), cs(var("v1",@{typ Branch}), [(call ("Branch.BranchConditional",@{typ Branch}, var("v2",@{typ "64 word \ 4 word"}),@{theory}), apply (call ("dfn'BranchConditional",@{typ "state \ state"}, var("v2",@{typ "64 word \ 4 word"}),@{theory}),var("state",qTy))), (call ("Branch.BranchImmediate",@{typ Branch}, var("v3",@{typ "64 word \ BranchType"}),@{theory}), apply (call ("dfn'BranchImmediate",@{typ "state \ state"}, var("v3",@{typ "64 word \ BranchType"}),@{theory}),var("state",qTy))), (call ("Branch.BranchRegister",@{typ Branch}, var("v4",@{typ "5 word \ BranchType"}),@{theory}), apply (call ("dfn'BranchRegister",@{typ "state \ state"}, var("v4",@{typ "5 word \ BranchType"}),@{theory}),var("state",qTy))), (call ("Branch.CompareAndBranch''32",@{typ Branch}, var("v5",@{typ "32 word \ bool \ 64 word \ 5 word"}), @{theory}), apply (call ("dfn'CompareAndBranch",@{typ "state \ state"}, var("v5",@{typ "32 word \ bool \ 64 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Branch.CompareAndBranch''64",@{typ Branch}, var("v6",@{typ "64 word \ bool \ 64 word \ 5 word"}), @{theory}), apply (call ("dfn'CompareAndBranch",@{typ "state \ state"}, var("v6",@{typ "64 word \ bool \ 64 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Branch.TestBitAndBranch''32",@{typ Branch}, var("v7", @{typ "32 word \ 6 word \ bool \ 64 word \ 5 word"}), @{theory}), apply (call ("dfn'TestBitAndBranch",@{typ "state \ state"}, var("v7", @{typ "32 word \ 6 word \ bool \ 64 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Branch.TestBitAndBranch''64",@{typ Branch}, var("v8", @{typ "64 word \ 6 word \ bool \ 64 word \ 5 word"}), @{theory}), apply (call ("dfn'TestBitAndBranch",@{typ "state \ state"}, var("v8", @{typ "64 word \ 6 word \ bool \ 64 word \ 5 word"}), @{theory}),var("state",qTy)))],@{context})), (call("instruction.CRCExt",@{typ instruction},var("v9",@{typ CRCExt}),@{theory}), cs(var("v9",@{typ CRCExt}), [(call ("CRCExt.CRC''16",@{typ CRCExt}, var("v10", @{typ "16 word \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'CRC",@{typ "state \ state"}, var("v10", @{typ "16 word \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("CRCExt.CRC''32",@{typ CRCExt}, var("v11", @{typ "32 word \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'CRC",@{typ "state \ state"}, var("v11", @{typ "32 word \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("CRCExt.CRC''64",@{typ CRCExt}, var("v12", @{typ "64 word \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'CRC",@{typ "state \ state"}, var("v12", @{typ "64 word \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("CRCExt.CRC''8",@{typ CRCExt}, var("v13", @{typ "8 word \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'CRC",@{typ "state \ state"}, var("v13", @{typ "8 word \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy)))],@{context})), (call("instruction.Data",@{typ instruction},var("v14",@{typ Data}),@{theory}), cs(var("v14",@{typ Data}), [(call ("Data.AddSubCarry''32",@{typ Data}, var("v15", @{typ "32 word \ bool \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'AddSubCarry",@{typ "state \ state"}, var("v15", @{typ "32 word \ bool \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.AddSubCarry''64",@{typ Data}, var("v16", @{typ "64 word \ bool \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'AddSubCarry",@{typ "state \ state"}, var("v16", @{typ "64 word \ bool \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.AddSubExtendRegister''32",@{typ Data}, var("v17", @{typ "32 word \ bool \ bool \ 5 word \ ExtendType \ 3 word \ 5 word \ 5 word"}),@{theory}), apply (call ("dfn'AddSubExtendRegister",@{typ "state \ state"}, var("v17", @{typ "32 word \ bool \ bool \ 5 word \ ExtendType \ 3 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.AddSubExtendRegister''64",@{typ Data}, var("v18", @{typ "64 word \ bool \ bool \ 5 word \ ExtendType \ 3 word \ 5 word \ 5 word"}),@{theory}), apply (call ("dfn'AddSubExtendRegister",@{typ "state \ state"}, var("v18", @{typ "64 word \ bool \ bool \ 5 word \ ExtendType \ 3 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.AddSubImmediate''32",@{typ Data}, var("v19", @{typ "32 word \ bool \ bool \ 32 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'AddSubImmediate",@{typ "state \ state"}, var("v19", @{typ "32 word \ bool \ bool \ 32 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.AddSubImmediate''64",@{typ Data}, var("v20", @{typ "64 word \ bool \ bool \ 64 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'AddSubImmediate",@{typ "state \ state"}, var("v20", @{typ "64 word \ bool \ bool \ 64 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.AddSubShiftedRegister''32",@{typ Data}, var("v21", @{typ "32 word \ bool \ bool \ ShiftType \ 5 word \ 6 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'AddSubShiftedRegister",@{typ "state \ state"}, var("v21", @{typ "32 word \ bool \ bool \ ShiftType \ 5 word \ 6 word \ 5 word \ 5 word"}),@{theory}), var("state",qTy))), (call ("Data.AddSubShiftedRegister''64",@{typ Data}, var("v22", @{typ "64 word \ bool \ bool \ ShiftType \ 5 word \ 6 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'AddSubShiftedRegister",@{typ "state \ state"}, var("v22", @{typ "64 word \ bool \ bool \ ShiftType \ 5 word \ 6 word \ 5 word \ 5 word"}),@{theory}), var("state",qTy))), (call ("Data.BitfieldMove''32",@{typ Data}, var("v23", @{typ "32 word \ bool \ bool \ 32 word \ 32 word \ nat \ nat \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'BitfieldMove",@{typ "state \ state"}, var("v23", @{typ "32 word \ bool \ bool \ 32 word \ 32 word \ nat \ nat \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.BitfieldMove''64",@{typ Data}, var("v24", @{typ "64 word \ bool \ bool \ 64 word \ 64 word \ nat \ nat \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'BitfieldMove",@{typ "state \ state"}, var("v24", @{typ "64 word \ bool \ bool \ 64 word \ 64 word \ nat \ nat \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.ConditionalCompareImmediate''32",@{typ Data}, var("v25", @{typ "32 word \ bool \ 32 word \ 4 word \ (bool \ bool \ bool \ bool) \ 5 word"}), @{theory}), apply (call ("dfn'ConditionalCompareImmediate",@{typ "state \ state"}, var("v25", @{typ "32 word \ bool \ 32 word \ 4 word \ (bool \ bool \ bool \ bool) \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.ConditionalCompareImmediate''64",@{typ Data}, var("v26", @{typ "64 word \ bool \ 64 word \ 4 word \ (bool \ bool \ bool \ bool) \ 5 word"}), @{theory}), apply (call ("dfn'ConditionalCompareImmediate",@{typ "state \ state"}, var("v26", @{typ "64 word \ bool \ 64 word \ 4 word \ (bool \ bool \ bool \ bool) \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.ConditionalCompareRegister''32",@{typ Data}, var("v27", @{typ "32 word \ bool \ 4 word \ (bool \ bool \ bool \ bool) \ 5 word \ 5 word"}),@{theory}), apply (call ("dfn'ConditionalCompareRegister",@{typ "state \ state"}, var("v27", @{typ "32 word \ bool \ 4 word \ (bool \ bool \ bool \ bool) \ 5 word \ 5 word"}),@{theory}),var("state",qTy))), (call ("Data.ConditionalCompareRegister''64",@{typ Data}, var("v28", @{typ "64 word \ bool \ 4 word \ (bool \ bool \ bool \ bool) \ 5 word \ 5 word"}),@{theory}), apply (call ("dfn'ConditionalCompareRegister",@{typ "state \ state"}, var("v28", @{typ "64 word \ bool \ 4 word \ (bool \ bool \ bool \ bool) \ 5 word \ 5 word"}),@{theory}),var("state",qTy))), (call ("Data.ConditionalSelect''32",@{typ Data}, var("v29", @{typ "32 word \ bool \ bool \ 4 word \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'ConditionalSelect",@{typ "state \ state"}, var("v29", @{typ "32 word \ bool \ bool \ 4 word \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.ConditionalSelect''64",@{typ Data}, var("v30", @{typ "64 word \ bool \ bool \ 4 word \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'ConditionalSelect",@{typ "state \ state"}, var("v30", @{typ "64 word \ bool \ bool \ 4 word \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.CountLeading''32",@{typ Data}, var("v31",@{typ "32 word \ bool \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'CountLeading",@{typ "state \ state"}, var("v31",@{typ "32 word \ bool \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.CountLeading''64",@{typ Data}, var("v32",@{typ "64 word \ bool \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'CountLeading",@{typ "state \ state"}, var("v32",@{typ "64 word \ bool \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.Division''32",@{typ Data}, var("v33", @{typ "32 word \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'Division",@{typ "state \ state"}, var("v33", @{typ "32 word \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.Division''64",@{typ Data}, var("v34", @{typ "64 word \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'Division",@{typ "state \ state"}, var("v34", @{typ "64 word \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.ExtractRegister''32",@{typ Data}, var("v35", @{typ "32 word \ 6 word \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'ExtractRegister",@{typ "state \ state"}, var("v35", @{typ "32 word \ 6 word \ 5 word \ 5 word \ 5 word"}),@{theory}), var("state",qTy))), (call ("Data.ExtractRegister''64",@{typ Data}, var("v36", @{typ "64 word \ 6 word \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'ExtractRegister",@{typ "state \ state"}, var("v36", @{typ "64 word \ 6 word \ 5 word \ 5 word \ 5 word"}),@{theory}), var("state",qTy))), (call ("Data.LogicalImmediate''32",@{typ Data}, var("v37", @{typ "32 word \ LogicalOp \ bool \ 32 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'LogicalImmediate",@{typ "state \ state"}, var("v37", @{typ "32 word \ LogicalOp \ bool \ 32 word \ 5 word \ 5 word"}),@{theory}), var("state",qTy))), (call ("Data.LogicalImmediate''64",@{typ Data}, var("v38", @{typ "64 word \ LogicalOp \ bool \ 64 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'LogicalImmediate",@{typ "state \ state"}, var("v38", @{typ "64 word \ LogicalOp \ bool \ 64 word \ 5 word \ 5 word"}),@{theory}), var("state",qTy))), (call ("Data.LogicalShiftedRegister''32",@{typ Data}, var("v39", @{typ "32 word \ LogicalOp \ bool \ bool \ ShiftType \ nat \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'LogicalShiftedRegister",@{typ "state \ state"}, var("v39", @{typ "32 word \ LogicalOp \ bool \ bool \ ShiftType \ nat \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.LogicalShiftedRegister''64",@{typ Data}, var("v40", @{typ "64 word \ LogicalOp \ bool \ bool \ ShiftType \ nat \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'LogicalShiftedRegister",@{typ "state \ state"}, var("v40", @{typ "64 word \ LogicalOp \ bool \ bool \ ShiftType \ nat \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.MoveWide''32",@{typ Data}, var("v41", @{typ "32 word \ MoveWideOp \ 2 word \ 16 word \ 5 word"}),@{theory}), apply (call ("dfn'MoveWide",@{typ "state \ state"}, var("v41", @{typ "32 word \ MoveWideOp \ 2 word \ 16 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.MoveWide''64",@{typ Data}, var("v42", @{typ "64 word \ MoveWideOp \ 2 word \ 16 word \ 5 word"}),@{theory}), apply (call ("dfn'MoveWide",@{typ "state \ state"}, var("v42", @{typ "64 word \ MoveWideOp \ 2 word \ 16 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.MultiplyAddSub''32",@{typ Data}, var("v43", @{typ "32 word \ bool \ 5 word \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'MultiplyAddSub",@{typ "state \ state"}, var("v43", @{typ "32 word \ bool \ 5 word \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.MultiplyAddSub''64",@{typ Data}, var("v44", @{typ "64 word \ bool \ 5 word \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'MultiplyAddSub",@{typ "state \ state"}, var("v44", @{typ "64 word \ bool \ 5 word \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.MultiplyAddSubLong",@{typ Data}, var("v45", @{typ "bool \ bool \ 5 word \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'MultiplyAddSubLong",@{typ "state \ state"}, var("v45", @{typ "bool \ bool \ 5 word \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.MultiplyHigh",@{typ Data}, var("v46",@{typ "bool \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'MultiplyHigh",@{typ "state \ state"}, var("v46",@{typ "bool \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.Reverse''32",@{typ Data}, var("v47",@{typ "32 word \ RevOp \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'Reverse",@{typ "state \ state"}, var("v47",@{typ "32 word \ RevOp \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.Reverse''64",@{typ Data}, var("v48",@{typ "64 word \ RevOp \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'Reverse",@{typ "state \ state"}, var("v48",@{typ "64 word \ RevOp \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("Data.Shift''32",@{typ Data}, var("v49", @{typ "32 word \ ShiftType \ 5 word \ 5 word \ 5 word"}),@{theory}), apply (call ("dfn'Shift",@{typ "state \ state"}, var("v49", @{typ "32 word \ ShiftType \ 5 word \ 5 word \ 5 word"}),@{theory}), var("state",qTy))), (call ("Data.Shift''64",@{typ Data}, var("v50", @{typ "64 word \ ShiftType \ 5 word \ 5 word \ 5 word"}),@{theory}), apply (call ("dfn'Shift",@{typ "state \ state"}, var("v50", @{typ "64 word \ ShiftType \ 5 word \ 5 word \ 5 word"}),@{theory}), var("state",qTy)))],@{context})), (call("instruction.Debug",@{typ instruction},var("v51",@{typ Debug}),@{theory}), cs(var("v51",@{typ Debug}), [(Term.Const(@{const_name "DebugRestore"},@{typ Debug}), apply (const("dfn'DebugRestore",@{typ "state \ state"},@{theory}), var("state",qTy))), (call("Debug.Breakpoint",@{typ Debug},var_w("v52",16),@{theory}), apply (call ("dfn'Breakpoint",@{typ "state \ state"},var_w("v52",16), @{theory}),var("state",qTy))), (call("Debug.DebugSwitch",@{typ Debug},var_w("v53",2),@{theory}), apply (call ("dfn'DebugSwitch",@{typ "state \ state"},var_w("v53",2), @{theory}),var("state",qTy))), (call("Debug.Halt",@{typ Debug},var_w("v54",16),@{theory}), apply (call("dfn'Halt",@{typ "state \ state"},var_w("v54",16),@{theory}), var("state",qTy)))],@{context})), (call("instruction.LoadStore",@{typ instruction},var("v55",@{typ LoadStore}),@{theory}), cs(var("v55",@{typ LoadStore}), [(call ("LoadStore.LoadLiteral''32",@{typ LoadStore}, var("v56", @{typ "32 word \ MemOp \ bool \ 64 word \ 5 word"}), @{theory}), apply (call ("dfn'LoadLiteral",@{typ "state \ state"}, var("v56", @{typ "32 word \ MemOp \ bool \ 64 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("LoadStore.LoadLiteral''64",@{typ LoadStore}, var("v57", @{typ "64 word \ MemOp \ bool \ 64 word \ 5 word"}), @{theory}), apply (call ("dfn'LoadLiteral",@{typ "state \ state"}, var("v57", @{typ "64 word \ MemOp \ bool \ 64 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("LoadStore.LoadStoreAcquire''16",@{typ LoadStore}, var("v58", @{typ "16 word \ MemOp \ AccType \ bool \ bool \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'LoadStoreAcquire",@{typ "state \ state"}, var("v58", @{typ "16 word \ MemOp \ AccType \ bool \ bool \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("LoadStore.LoadStoreAcquire''32",@{typ LoadStore}, var("v59", @{typ "32 word \ MemOp \ AccType \ bool \ bool \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'LoadStoreAcquire",@{typ "state \ state"}, var("v59", @{typ "32 word \ MemOp \ AccType \ bool \ bool \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("LoadStore.LoadStoreAcquire''64",@{typ LoadStore}, var("v60", @{typ "64 word \ MemOp \ AccType \ bool \ bool \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'LoadStoreAcquire",@{typ "state \ state"}, var("v60", @{typ "64 word \ MemOp \ AccType \ bool \ bool \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("LoadStore.LoadStoreAcquire''8",@{typ LoadStore}, var("v61", @{typ "8 word \ MemOp \ AccType \ bool \ bool \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'LoadStoreAcquire",@{typ "state \ state"}, var("v61", @{typ "8 word \ MemOp \ AccType \ bool \ bool \ bool \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("LoadStore.LoadStoreAcquirePair''128",@{typ LoadStore}, var("v62", @{typ "128 word \ MemOp \ AccType \ bool \ bool \ 5 word \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'LoadStoreAcquirePair",@{typ "state \ state"}, var("v62", @{typ "128 word \ MemOp \ AccType \ bool \ bool \ 5 word \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("LoadStore.LoadStoreAcquirePair''64",@{typ LoadStore}, var("v63", @{typ "64 word \ MemOp \ AccType \ bool \ bool \ 5 word \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'LoadStoreAcquirePair",@{typ "state \ state"}, var("v63", @{typ "64 word \ MemOp \ AccType \ bool \ bool \ 5 word \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("LoadStore.LoadStoreImmediate''16",@{typ LoadStore}, var("v64", @{typ "16 word \ bool \ MemOp \ AccType \ bool \ bool \ bool \ bool \ bool \ bool \ 64 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'LoadStoreImmediate",@{typ "state \ state"}, var("v64", @{typ "16 word \ bool \ MemOp \ AccType \ bool \ bool \ bool \ bool \ bool \ bool \ 64 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("LoadStore.LoadStoreImmediate''32",@{typ LoadStore}, var("v65", @{typ "32 word \ bool \ MemOp \ AccType \ bool \ bool \ bool \ bool \ bool \ bool \ 64 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'LoadStoreImmediate",@{typ "state \ state"}, var("v65", @{typ "32 word \ bool \ MemOp \ AccType \ bool \ bool \ bool \ bool \ bool \ bool \ 64 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("LoadStore.LoadStoreImmediate''64",@{typ LoadStore}, var("v66", @{typ "64 word \ bool \ MemOp \ AccType \ bool \ bool \ bool \ bool \ bool \ bool \ 64 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'LoadStoreImmediate",@{typ "state \ state"}, var("v66", @{typ "64 word \ bool \ MemOp \ AccType \ bool \ bool \ bool \ bool \ bool \ bool \ 64 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("LoadStore.LoadStoreImmediate''8",@{typ LoadStore}, var("v67", @{typ "8 word \ bool \ MemOp \ AccType \ bool \ bool \ bool \ bool \ bool \ bool \ 64 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'LoadStoreImmediate",@{typ "state \ state"}, var("v67", @{typ "8 word \ bool \ MemOp \ AccType \ bool \ bool \ bool \ bool \ bool \ bool \ 64 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("LoadStore.LoadStorePair''32",@{typ LoadStore}, var("v68", @{typ "32 word \ MemOp \ AccType \ bool \ bool \ bool \ bool \ bool \ 64 word \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'LoadStorePair",@{typ "state \ state"}, var("v68", @{typ "32 word \ MemOp \ AccType \ bool \ bool \ bool \ bool \ bool \ 64 word \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("LoadStore.LoadStorePair''64",@{typ LoadStore}, var("v69", @{typ "64 word \ MemOp \ AccType \ bool \ bool \ bool \ bool \ bool \ 64 word \ 5 word \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'LoadStorePair",@{typ "state \ state"}, var("v69", @{typ "64 word \ MemOp \ AccType \ bool \ bool \ bool \ bool \ bool \ 64 word \ 5 word \ 5 word \ 5 word"}), @{theory}),var("state",qTy))), (call ("LoadStore.LoadStoreRegister''16",@{typ LoadStore}, var("v70", @{typ "16 word \ bool \ MemOp \ bool \ 5 word \ ExtendType \ nat \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'LoadStoreRegister",@{typ "state \ state"}, var("v70", @{typ "16 word \ bool \ MemOp \ bool \ 5 word \ ExtendType \ nat \ 5 word \ 5 word"}),@{theory}), var("state",qTy))), (call ("LoadStore.LoadStoreRegister''32",@{typ LoadStore}, var("v71", @{typ "32 word \ bool \ MemOp \ bool \ 5 word \ ExtendType \ nat \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'LoadStoreRegister",@{typ "state \ state"}, var("v71", @{typ "32 word \ bool \ MemOp \ bool \ 5 word \ ExtendType \ nat \ 5 word \ 5 word"}),@{theory}), var("state",qTy))), (call ("LoadStore.LoadStoreRegister''64",@{typ LoadStore}, var("v72", @{typ "64 word \ bool \ MemOp \ bool \ 5 word \ ExtendType \ nat \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'LoadStoreRegister",@{typ "state \ state"}, var("v72", @{typ "64 word \ bool \ MemOp \ bool \ 5 word \ ExtendType \ nat \ 5 word \ 5 word"}),@{theory}), var("state",qTy))), (call ("LoadStore.LoadStoreRegister''8",@{typ LoadStore}, var("v73", @{typ "8 word \ bool \ MemOp \ bool \ 5 word \ ExtendType \ nat \ 5 word \ 5 word"}), @{theory}), apply (call ("dfn'LoadStoreRegister",@{typ "state \ state"}, var("v73", @{typ "8 word \ bool \ MemOp \ bool \ 5 word \ ExtendType \ nat \ 5 word \ 5 word"}),@{theory}), var("state",qTy)))],@{context})), (call("instruction.System",@{typ instruction},var("v74",@{typ System}),@{theory}), cs(var("v74",@{typ System}), [(Term.Const(@{const_name "ExceptionReturn"},@{typ System}), apply (const("dfn'ExceptionReturn",@{typ "state \ state"},@{theory}), var("state",qTy))), (call("System.HypervisorCall",@{typ System},var_w("v75",16),@{theory}), apply (call ("dfn'HypervisorCall",@{typ "state \ state"},var_w("v75",16), @{theory}),var("state",qTy))), (call ("System.MoveImmediateProcState",@{typ System}, var("v76",@{typ "PSTATEField \ 4 word"}),@{theory}), apply (call ("dfn'MoveImmediateProcState",@{typ "state \ state"}, var("v76",@{typ "PSTATEField \ 4 word"}),@{theory}),var("state",qTy))), (call ("System.MoveSystemRegister",@{typ System}, var("v77", @{typ "bool \ 3 word \ 3 word \ 3 word \ 4 word \ 4 word \ 5 word"}), @{theory}), apply (call ("dfn'MoveSystemRegister",@{typ "state \ state"}, var("v77", @{typ "bool \ 3 word \ 3 word \ 3 word \ 4 word \ 4 word \ 5 word"}), @{theory}),var("state",qTy))), (call("System.SecureMonitorCall",@{typ System},var_w("v78",16),@{theory}), apply (call ("dfn'SecureMonitorCall",@{typ "state \ state"},var_w("v78",16), @{theory}),var("state",qTy))), (call("System.SupervisorCall",@{typ System},var_w("v79",16),@{theory}), apply (call ("dfn'SupervisorCall",@{typ "state \ state"},var_w("v79",16), @{theory}),var("state",qTy))), (call ("System.SystemInstruction",@{typ System}, var("v80", @{typ "3 word \ 3 word \ 4 word \ 4 word \ bool \ 5 word"}), @{theory}), apply (call ("dfn'SystemInstruction",@{typ "state \ state"}, var("v80", @{typ "3 word \ 3 word \ 4 word \ 4 word \ bool \ 5 word"}), @{theory}),var("state",qTy)))],@{context}))],@{context})))) end \ ML \ local open L3 in val () = def ("DecodeLogicalOp", close (var_w("opc",2), itb([(eq(var_w("opc",2),lw(0,2)),tp[lc("LogicalOp_AND","LogicalOp",@{theory}),lf]), (eq(var_w("opc",2),lw(1,2)),tp[lc("LogicalOp_ORR","LogicalOp",@{theory}),lf]), (eq(var_w("opc",2),lw(2,2)),tp[lc("LogicalOp_EOR","LogicalOp",@{theory}),lf]), (eq(var_w("opc",2),lw(3,2)),tp[lc("LogicalOp_AND","LogicalOp",@{theory}),lt])], lx(@{typ "LogicalOp \ bool"})))) end \ ML \ local open L3 in val () = def ("NoOperation", call ("instruction.Hint",@{typ instruction},lc("SystemHintOp_NOP","SystemHintOp",@{theory}), @{theory})) end \ ML \ local open L3 in val () = def ("LoadStoreRegister", close (tp[var_w("size",2),var_b"regsize_word",var("memop",@{typ MemOp}),var_b"signed",var_w("m",5), var("extend_type",@{typ ExtendType}),var_n"shift",var_w("n",5),var_w("t",5)], itb([(eq(var_w("size",2),lw(0,2)), call ("instruction.LoadStore",@{typ instruction}, call ("LoadStore.LoadStoreRegister''8",@{typ LoadStore}, tp[lw(0,8),var_b"regsize_word",var("memop",@{typ MemOp}),var_b"signed", var_w("m",5),var("extend_type",@{typ ExtendType}),var_n"shift",var_w("n",5), var_w("t",5)],@{theory}),@{theory})), (eq(var_w("size",2),lw(1,2)), call ("instruction.LoadStore",@{typ instruction}, call ("LoadStore.LoadStoreRegister''16",@{typ LoadStore}, tp[lw(1,16),var_b"regsize_word",var("memop",@{typ MemOp}),var_b"signed", var_w("m",5),var("extend_type",@{typ ExtendType}),var_n"shift",var_w("n",5), var_w("t",5)],@{theory}),@{theory})), (eq(var_w("size",2),lw(2,2)), call ("instruction.LoadStore",@{typ instruction}, call ("LoadStore.LoadStoreRegister''32",@{typ LoadStore}, tp[lw(2,32),var_b"regsize_word",var("memop",@{typ MemOp}),var_b"signed", var_w("m",5),var("extend_type",@{typ ExtendType}),var_n"shift",var_w("n",5), var_w("t",5)],@{theory}),@{theory})), (eq(var_w("size",2),lw(3,2)), call ("instruction.LoadStore",@{typ instruction}, call ("LoadStore.LoadStoreRegister''64",@{typ LoadStore}, tp[lw(3,64),var_b"regsize_word",var("memop",@{typ MemOp}),var_b"signed", var_w("m",5),var("extend_type",@{typ ExtendType}),var_n"shift",var_w("n",5), var_w("t",5)],@{theory}),@{theory}))],lx @{typ instruction}))) end \ ML \ local open L3 in val () = def ("LoadStoreImmediateN", close (tp[var_w("size",2),var_b"regsize_word",var("memop",@{typ MemOp}), var("acctype",@{typ AccType}),var_b"signed",var_b"wb_unknown",var_b"rt_unknown", var_b"wback",var_b"postindex",var_b"unsigned_offset",var_w("offset",64),var_w("n",5), var_w("t",5)], itb([(eq(var_w("size",2),lw(0,2)), call ("instruction.LoadStore",@{typ instruction}, call ("LoadStore.LoadStoreImmediate''8",@{typ LoadStore}, tp[lw(0,8),var_b"regsize_word",var("memop",@{typ MemOp}), var("acctype",@{typ AccType}),var_b"signed",var_b"wb_unknown", var_b"rt_unknown",var_b"wback",var_b"postindex",var_b"unsigned_offset", var_w("offset",64),var_w("n",5),var_w("t",5)],@{theory}),@{theory})), (eq(var_w("size",2),lw(1,2)), call ("instruction.LoadStore",@{typ instruction}, call ("LoadStore.LoadStoreImmediate''16",@{typ LoadStore}, tp[lw(1,16),var_b"regsize_word",var("memop",@{typ MemOp}), var("acctype",@{typ AccType}),var_b"signed",var_b"wb_unknown", var_b"rt_unknown",var_b"wback",var_b"postindex",var_b"unsigned_offset", var_w("offset",64),var_w("n",5),var_w("t",5)],@{theory}),@{theory})), (eq(var_w("size",2),lw(2,2)), call ("instruction.LoadStore",@{typ instruction}, call ("LoadStore.LoadStoreImmediate''32",@{typ LoadStore}, tp[lw(2,32),var_b"regsize_word",var("memop",@{typ MemOp}), var("acctype",@{typ AccType}),var_b"signed",var_b"wb_unknown", var_b"rt_unknown",var_b"wback",var_b"postindex",var_b"unsigned_offset", var_w("offset",64),var_w("n",5),var_w("t",5)],@{theory}),@{theory})), (eq(var_w("size",2),lw(3,2)), call ("instruction.LoadStore",@{typ instruction}, call ("LoadStore.LoadStoreImmediate''64",@{typ LoadStore}, tp[lw(3,64),var_b"regsize_word",var("memop",@{typ MemOp}), var("acctype",@{typ AccType}),var_b"signed",var_b"wb_unknown", var_b"rt_unknown",var_b"wback",var_b"postindex",var_b"unsigned_offset", var_w("offset",64),var_w("n",5),var_w("t",5)],@{theory}),@{theory}))], lx @{typ instruction}))) end \ ML \ local open L3 in val () = def ("LoadStoreImmediate", close (tp[var_w("size",2),var_w("opc",2),var("acctype",@{typ AccType}),var_b"wback",var_b"postindex", var_b"unsigned_offset",var_w("offset",64),var_w("Rn",5),var_w("Rt",5)], let' (tp[var("memop",@{typ MemOp}),var_b"regsize_word",var_b"signed"], itb([(mop(Not,bop(Bit,var_w("opc",2),ln 1)), tp[ite(bop(Bit,var_w("opc",2),ln 0),lc("MemOp_LOAD","MemOp",@{theory}), lc("MemOp_STORE","MemOp",@{theory})),mop(Not,eq(var_w("size",2),lw(3,2))),lf]), (eq(var_w("size",2),lw(3,2)), tp[lc("MemOp_PREFETCH","MemOp",@{theory}),lx HOLogic.boolT,lx HOLogic.boolT])], tp[lc("MemOp_LOAD","MemOp",@{theory}),bop(Bit,var_w("opc",2),ln 0),lt]), itb([(bop(And,eq(var("memop",@{typ MemOp}),lc("MemOp_LOAD","MemOp",@{theory})), bop(And,var_b"wback", bop(And,eq(var_w("Rn",5),var_w("Rt",5)),mop(Not,eq(var_w("Rn",5),lw(31,5)))))), cs(apply(lx(@{typ "string \ 2 word"}),ls"LoadImmediate unpredictable"), [(var_w("v",2), itb([(eq(var_w("v",2),lw(0,2)), call ("LoadStoreImmediateN",@{typ instruction}, tp[var_w("size",2),var_b"regsize_word",var("memop",@{typ MemOp}), var("acctype",@{typ AccType}),var_b"signed",lf,lf,lf, var_b"postindex",var_b"unsigned_offset",var_w("offset",64), var_w("Rn",5),var_w("Rt",5)],@{theory})), (eq(var_w("v",2),lw(1,2)), call ("LoadStoreImmediateN",@{typ instruction}, tp[var_w("size",2),var_b"regsize_word",var("memop",@{typ MemOp}), var("acctype",@{typ AccType}),var_b"signed",lt,lf,var_b"wback", var_b"postindex",var_b"unsigned_offset",var_w("offset",64), var_w("Rn",5),var_w("Rt",5)],@{theory})), (eq(var_w("v",2),lw(2,2)), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (eq(var_w("v",2),lw(3,2)),const("NoOperation",@{typ instruction},@{theory}))], lx @{typ instruction}))],@{context})), (bop(And,eq(var("memop",@{typ MemOp}),lc("MemOp_STORE","MemOp",@{theory})), bop(And,var_b"wback", bop(And,eq(var_w("Rn",5),var_w("Rt",5)),mop(Not,eq(var_w("Rn",5),lw(31,5)))))), cs(apply(lx(@{typ "string \ 2 word"}),ls"StoreImmediate unpredictable"), [(var_w("v",2), itb([(eq(var_w("v",2),lw(0,2)), call ("LoadStoreImmediateN",@{typ instruction}, tp[var_w("size",2),var_b"regsize_word",var("memop",@{typ MemOp}), var("acctype",@{typ AccType}),var_b"signed",lf,lf,var_b"wback", var_b"postindex",var_b"unsigned_offset",var_w("offset",64), var_w("Rn",5),var_w("Rt",5)],@{theory})), (eq(var_w("v",2),lw(1,2)), call ("LoadStoreImmediateN",@{typ instruction}, tp[var_w("size",2),var_b"regsize_word",var("memop",@{typ MemOp}), var("acctype",@{typ AccType}),var_b"signed",lf,lt,var_b"wback", var_b"postindex",var_b"unsigned_offset",var_w("offset",64), var_w("Rn",5),var_w("Rt",5)],@{theory})), (eq(var_w("v",2),lw(2,2)), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (eq(var_w("v",2),lw(3,2)),const("NoOperation",@{typ instruction},@{theory}))], lx @{typ instruction}))],@{context}))], call ("LoadStoreImmediateN",@{typ instruction}, tp[var_w("size",2),var_b"regsize_word",var("memop",@{typ MemOp}), var("acctype",@{typ AccType}),var_b"signed",lf,lf,var_b"wback",var_b"postindex", var_b"unsigned_offset",var_w("offset",64),var_w("Rn",5),var_w("Rt",5)],@{theory}))))) end \ ML \ local open L3 in val () = def ("LoadStorePairN", close (tp[var_w("sf",1),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}),var_b"signed", var_b"wb_unknown",var_b"rt_unknown",var_b"wback",var_b"postindex",var_w("offset",64), var_w("n",5),var_w("t",5),var_w("t2",5)], ite(eq(var_w("sf",1),lw(1,1)), call ("instruction.LoadStore",@{typ instruction}, call ("LoadStore.LoadStorePair''64",@{typ LoadStore}, tp[lw(1,64),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}),var_b"signed", var_b"wb_unknown",var_b"rt_unknown",var_b"wback",var_b"postindex", var_w("offset",64),var_w("n",5),var_w("t",5),var_w("t2",5)],@{theory}),@{theory}), call ("instruction.LoadStore",@{typ instruction}, call ("LoadStore.LoadStorePair''32",@{typ LoadStore}, tp[lw(0,32),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}),var_b"signed", var_b"wb_unknown",var_b"rt_unknown",var_b"wback",var_b"postindex", var_w("offset",64),var_w("n",5),var_w("t",5),var_w("t2",5)],@{theory}),@{theory})))) end \ ML \ local open L3 in val () = def ("LoadStorePair", close (tp[var_w("sf",1),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}),var_b"signed", var_b"wback",var_b"postindex",var_w("offset",64),var_w("Rn",5),var_w("Rt",5),var_w("Rt2",5)], itb([(bop(And,eq(var("memop",@{typ MemOp}),lc("MemOp_LOAD","MemOp",@{theory})), bop(And,var_b"wback", bop(And, bop(Or,eq(var_w("Rn",5),var_w("Rt",5)),eq(var_w("Rn",5),var_w("Rt2",5))), mop(Not,eq(var_w("Rn",5),lw(31,5)))))), cs(apply(lx(@{typ "string \ 2 word"}),ls"LoadPair unpredictable"), [(var_w("v",2), itb([(eq(var_w("v",2),lw(0,2)), call ("LoadStorePairN",@{typ instruction}, tp[var_w("sf",1),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}), var_b"signed",lf,lf,lf,var_b"postindex",var_w("offset",64), var_w("Rn",5),var_w("Rt",5),var_w("Rt2",5)],@{theory})), (eq(var_w("v",2),lw(1,2)), call ("LoadStorePairN",@{typ instruction}, tp[var_w("sf",1),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}), var_b"signed",lt,lf,var_b"wback",var_b"postindex",var_w("offset",64), var_w("Rn",5),var_w("Rt",5),var_w("Rt2",5)],@{theory})), (eq(var_w("v",2),lw(2,2)), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (eq(var_w("v",2),lw(3,2)),const("NoOperation",@{typ instruction},@{theory}))], lx @{typ instruction}))],@{context})), (bop(And,eq(var("memop",@{typ MemOp}),lc("MemOp_STORE","MemOp",@{theory})), bop(And,var_b"wback", bop(And, bop(Or,eq(var_w("Rn",5),var_w("Rt",5)),eq(var_w("Rn",5),var_w("Rt2",5))), mop(Not,eq(var_w("Rn",5),lw(31,5)))))), cs(apply(lx(@{typ "string \ 2 word"}),ls"StorePair unpredictable"), [(var_w("v",2), itb([(eq(var_w("v",2),lw(0,2)), call ("LoadStorePairN",@{typ instruction}, tp[var_w("sf",1),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}), var_b"signed",lf,lf,var_b"wback",var_b"postindex",var_w("offset",64), var_w("Rn",5),var_w("Rt",5),var_w("Rt2",5)],@{theory})), (eq(var_w("v",2),lw(1,2)), call ("LoadStorePairN",@{typ instruction}, tp[var_w("sf",1),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}), var_b"signed",lf,lt,var_b"wback",var_b"postindex",var_w("offset",64), var_w("Rn",5),var_w("Rt",5),var_w("Rt2",5)],@{theory})), (eq(var_w("v",2),lw(2,2)), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (eq(var_w("v",2),lw(3,2)),const("NoOperation",@{typ instruction},@{theory}))], lx @{typ instruction}))],@{context})), (bop(And,eq(var("memop",@{typ MemOp}),lc("MemOp_LOAD","MemOp",@{theory})), eq(var_w("Rt",5),var_w("Rt2",5))), cs(apply(lx(@{typ "string \ 2 word"}),ls"LoadPair Rt = Rt2 unpredictable"), [(var_w("v",2), itb([(eq(var_w("v",2),lw(0,2)), call ("LoadStorePairN",@{typ instruction}, tp[var_w("sf",1),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}), var_b"signed",lf,lt,var_b"wback",var_b"postindex",var_w("offset",64), var_w("Rn",5),var_w("Rt",5),var_w("Rt2",5)],@{theory})), (eq(var_w("v",2),lw(1,2)), Term.Const(@{const_name "Unallocated"},@{typ instruction}))], const("NoOperation",@{typ instruction},@{theory})))],@{context}))], call ("LoadStorePairN",@{typ instruction}, tp[var_w("sf",1),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}),var_b"signed", lf,lf,var_b"wback",var_b"postindex",var_w("offset",64),var_w("Rn",5),var_w("Rt",5), var_w("Rt2",5)],@{theory})))) end \ ML \ local open L3 in val () = def ("LoadStoreAcquireN", close (tp[var_w("size",2),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}),var_b"excl", var_b"pair",var_b"rn_unknown",var_b"rt_unknown",var_w("s",5),var_w("n",5),var_w("t",5), var_w("t2",5)], itb([(var_b"pair", ite(eq(var_w("size",2),lw(2,2)), call ("instruction.LoadStore",@{typ instruction}, call ("LoadStore.LoadStoreAcquirePair''64",@{typ LoadStore}, tp[lw(2,64),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}), var_b"rn_unknown",var_b"rt_unknown",var_w("s",5),var_w("n",5),var_w("t",5), var_w("t2",5)],@{theory}),@{theory}), call ("instruction.LoadStore",@{typ instruction}, call ("LoadStore.LoadStoreAcquirePair''128",@{typ LoadStore}, tp[lw(3,128),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}), var_b"rn_unknown",var_b"rt_unknown",var_w("s",5),var_w("n",5),var_w("t",5), var_w("t2",5)],@{theory}),@{theory}))), (eq(var_w("size",2),lw(0,2)), call ("instruction.LoadStore",@{typ instruction}, call ("LoadStore.LoadStoreAcquire''8",@{typ LoadStore}, tp[lw(0,8),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}),var_b"excl", var_b"rn_unknown",var_b"rt_unknown",var_w("s",5),var_w("n",5),var_w("t",5)], @{theory}),@{theory})), (eq(var_w("size",2),lw(1,2)), call ("instruction.LoadStore",@{typ instruction}, call ("LoadStore.LoadStoreAcquire''16",@{typ LoadStore}, tp[lw(1,16),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}),var_b"excl", var_b"rn_unknown",var_b"rt_unknown",var_w("s",5),var_w("n",5),var_w("t",5)], @{theory}),@{theory})), (eq(var_w("size",2),lw(2,2)), call ("instruction.LoadStore",@{typ instruction}, call ("LoadStore.LoadStoreAcquire''32",@{typ LoadStore}, tp[lw(2,32),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}),var_b"excl", var_b"rn_unknown",var_b"rt_unknown",var_w("s",5),var_w("n",5),var_w("t",5)], @{theory}),@{theory})), (eq(var_w("size",2),lw(3,2)), call ("instruction.LoadStore",@{typ instruction}, call ("LoadStore.LoadStoreAcquire''64",@{typ LoadStore}, tp[lw(3,64),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}),var_b"excl", var_b"rn_unknown",var_b"rt_unknown",var_w("s",5),var_w("n",5),var_w("t",5)], @{theory}),@{theory}))],lx @{typ instruction}))) end \ ML \ local open L3 in val () = def ("LoadStoreAcquire", close (tp[var_w("size",2),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}),var_b"excl", var_b"pair",var_w("Rs",5),var_w("Rn",5),var_w("Rt",5),var_w("Rt2",5)], let' (tp[var_b"rt_unknown",var_b"rn_unknown",var("ast",@{typ "instruction option"})], ite(bop(And,eq(var("memop",@{typ MemOp}),lc("MemOp_LOAD","MemOp",@{theory})), bop(And,var_b"pair",eq(var_w("Rt",5),var_w("Rt2",5)))), cs(apply(lx(@{typ "string \ 2 word"}),ls"LoadAcquire unpredictable"), [(var_w("v",2), ite(eq(var_w("v",2),lw(0,2)),tp[lt,lf,lo @{typ instruction}], tp[lf,lf, ite(eq(var_w("v",2),lw(1,2)), mop(Some,Term.Const(@{const_name "Unallocated"},@{typ instruction})), mop(Some,const("NoOperation",@{typ instruction},@{theory})))]))], @{context}),tp[lf,lf,lo @{typ instruction}]), let' (tp[var_b"rt_unknown",var_b"rn_unknown",var("ast",@{typ "instruction option"})], ite(bop(Or, bop(And,eq(var("memop",@{typ MemOp}),lc("MemOp_STORE","MemOp",@{theory})), bop(And,var_b"excl",eq(var_w("Rs",5),var_w("Rt",5)))), bop(And,var_b"pair",eq(var_w("Rs",5),var_w("Rt2",5)))), cs(apply (lx(@{typ "string \ 2 word"}), ls"StoreAcquire Rs = Rt unpredictable"), [(var_w("v",2), itb([(eq(var_w("v",2),lw(0,2)), tp[lt,var_b"rn_unknown",var("ast",@{typ "instruction option"})]), (eq(var_w("v",2),lw(1,2)), tp[var_b"rt_unknown",var_b"rn_unknown", var("ast",@{typ "instruction option"})]), (eq(var_w("v",2),lw(2,2)), tp[var_b"rt_unknown",var_b"rn_unknown", mop(Some,Term.Const(@{const_name "Unallocated"},@{typ instruction}))]), (eq(var_w("v",2),lw(3,2)), tp[var_b"rt_unknown",var_b"rn_unknown", mop(Some,const("NoOperation",@{typ instruction},@{theory}))])], lx(@{typ "bool \ bool \ instruction option"})))],@{context}), tp[var_b"rt_unknown",var_b"rn_unknown",var("ast",@{typ "instruction option"})]), let' (tp[var_b"rt_unknown",var_b"rn_unknown",var("ast",@{typ "instruction option"})], ite(bop(And,eq(var("memop",@{typ MemOp}),lc("MemOp_STORE","MemOp",@{theory})), bop(And,var_b"excl", bop(And,eq(var_w("Rs",5),var_w("Rn",5)), mop(Not,eq(var_w("Rn",5),lw(31,5)))))), cs(apply (lx(@{typ "string \ 2 word"}), ls"StoreAcquire Rs = Rn unpredictable"), [(var_w("v",2), itb([(eq(var_w("v",2),lw(0,2)), tp[var_b"rt_unknown",lt,var("ast",@{typ "instruction option"})]), (eq(var_w("v",2),lw(1,2)), tp[var_b"rt_unknown",var_b"rn_unknown", var("ast",@{typ "instruction option"})]), (eq(var_w("v",2),lw(2,2)), tp[var_b"rt_unknown",var_b"rn_unknown", mop(Some,Term.Const(@{const_name "Unallocated"},@{typ instruction}))]), (eq(var_w("v",2),lw(3,2)), tp[var_b"rt_unknown",var_b"rn_unknown", mop(Some,const("NoOperation",@{typ instruction},@{theory}))])], lx(@{typ "bool \ bool \ instruction option"})))], @{context}), tp[var_b"rt_unknown",var_b"rn_unknown",var("ast",@{typ "instruction option"})]), cs(var("ast",@{typ "instruction option"}), [(mop(Some,var("i",@{typ instruction})),var("i",@{typ instruction})), (lo @{typ instruction}, call ("LoadStoreAcquireN",@{typ instruction}, tp[var_w("size",2),var("memop",@{typ MemOp}),var("acctype",@{typ AccType}), var_b"excl",var_b"pair",var_b"rn_unknown",var_b"rt_unknown",var_w("Rs",5), var_w("Rn",5),var_w("Rt",5),var_w("Rt2",5)],@{theory}))],@{context})))))) end \ ML \ local open L3 in val () = def ("Decode", close (var_w("w",32), let' (tp[var_b"b'31",var_b"b'30",var_b"b'29",var_b"b'28",var_b"b'27",var_b"b'26",var_b"b'25", var_b"b'24",var_b"b'23",var_b"b'22",var_b"b'21",var_b"b'20",var_b"b'19",var_b"b'18", var_b"b'17",var_b"b'16",var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11", var_b"b'10",var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5",var_b"b'4", var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"], call ("boolify'32", @{typ "bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool \ bool"}, var_w("w",32),@{theory}), itb([(bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,mop(Not,var_b"b'26"), bop(And,mop(Not,var_b"b'25"),mop(Not,var_b"b'24"))))), let' (var_w("immhi",19), mop(Cast (Word_Lib.mk_wordT 19), ll[var_b"b'23",var_b"b'22",var_b"b'21",var_b"b'20",var_b"b'19",var_b"b'18", var_b"b'17",var_b"b'16",var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12", var_b"b'11",var_b"b'10",var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6", var_b"b'5"]), let' (var_w("immlo",2),mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'30",var_b"b'29"]), let' (var_b"page",mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'31"])), call ("instruction.Address",@{typ instruction}, tp[var_b"page", ite(var_b"page", mop(SE w64,cc[var_w("immhi",19),var_w("immlo",2),lw(0,12)]), mop(SE w64,cc[var_w("immhi",19),var_w("immlo",2)])), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])], @{theory}))))), (bop(And,mop(Not,var_b"b'28"), bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,var_b"b'24", bop(And,var_b"b'23",bop(And,var_b"b'22",mop(Not,var_b"b'21")))))))), Term.Const(@{const_name "Reserved"},@{typ instruction})), (bop(And,mop(Not,var_b"b'31"), bop(And,mop(Not,var_b"b'28"), bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25",bop(And,var_b"b'24",mop(Not,var_b"b'21"))))))), let' (var_w("imm6",6), mop(Cast (Word_Lib.mk_wordT 6), ll[var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11",var_b"b'10"]), ite(bop(Bit,var_w("imm6",6),ln 5), Term.Const(@{const_name "Reserved"},@{typ instruction}), call ("instruction.Data",@{typ instruction}, call ("Data.AddSubShiftedRegister''32",@{typ Data}, tp[lw(0,32),mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'30"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'29"])), call ("DecodeShift",@{typ ShiftType}, mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'23",var_b"b'22"]), @{theory}), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), var_w("imm6",6), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])], @{theory}),@{theory})))), (bop(And,var_b"b'31", bop(And,mop(Not,var_b"b'28"), bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25",bop(And,var_b"b'24",mop(Not,var_b"b'21"))))))), call ("instruction.Data",@{typ instruction}, call ("Data.AddSubShiftedRegister''64",@{typ Data}, tp[lw(1,64),mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'30"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'29"])), call ("DecodeShift",@{typ ShiftType}, mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'23",var_b"b'22"]),@{theory}), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 6), ll[var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11", var_b"b'10"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,mop(Not,var_b"b'31"), bop(And,mop(Not,var_b"b'28"), bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,var_b"b'24", bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"),var_b"b'21")))))))), let' (var_w("imm3",3), mop(Cast (Word_Lib.mk_wordT 3),ll[var_b"b'12",var_b"b'11",var_b"b'10"]), ite(bop(Ugt,var_w("imm3",3),lw(4,3)), Term.Const(@{const_name "Reserved"},@{typ instruction}), call ("instruction.Data",@{typ instruction}, call ("Data.AddSubExtendRegister''32",@{typ Data}, tp[lw(0,32),mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'30"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'29"])), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), call ("DecodeRegExtend",@{typ ExtendType}, mop(Cast (Word_Lib.mk_wordT 3), ll[var_b"b'15",var_b"b'14",var_b"b'13"]),@{theory}), var_w("imm3",3), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])], @{theory}),@{theory})))), (bop(And,var_b"b'31", bop(And,mop(Not,var_b"b'28"), bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,var_b"b'24", bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"),var_b"b'21")))))))), let' (var_w("imm3",3), mop(Cast (Word_Lib.mk_wordT 3),ll[var_b"b'12",var_b"b'11",var_b"b'10"]), ite(bop(Ugt,var_w("imm3",3),lw(4,3)), Term.Const(@{const_name "Reserved"},@{typ instruction}), call ("instruction.Data",@{typ instruction}, call ("Data.AddSubExtendRegister''64",@{typ Data}, tp[lw(1,64),mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'30"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'29"])), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), call ("DecodeRegExtend",@{typ ExtendType}, mop(Cast (Word_Lib.mk_wordT 3), ll[var_b"b'15",var_b"b'14",var_b"b'13"]),@{theory}), var_w("imm3",3), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])], @{theory}),@{theory})))), (bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,mop(Not,var_b"b'26"), bop(And,mop(Not,var_b"b'25"),bop(And,var_b"b'24",var_b"b'23"))))), Term.Const(@{const_name "Reserved"},@{typ instruction})), (bop(And,mop(Not,var_b"b'31"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,mop(Not,var_b"b'26"),bop(And,mop(Not,var_b"b'25"),var_b"b'24"))))), let' (var_w("imm12",12), mop(Cast (Word_Lib.mk_wordT 12), ll[var_b"b'21",var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16", var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11",var_b"b'10"]), call ("instruction.Data",@{typ instruction}, call ("Data.AddSubImmediate''32",@{typ Data}, tp[lw(0,32),mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'30"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'29"])), ite(eq(mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'23",var_b"b'22"]), lw(0,2)),mop(Cast w32,var_w("imm12",12)), bop(Lsl,mop(Cast w32,var_w("imm12",12)),ln 12)), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])], @{theory}),@{theory}))), (bop(And,var_b"b'31", bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,mop(Not,var_b"b'26"),bop(And,mop(Not,var_b"b'25"),var_b"b'24"))))), let' (var_w("imm12",12), mop(Cast (Word_Lib.mk_wordT 12), ll[var_b"b'21",var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16", var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11",var_b"b'10"]), call ("instruction.Data",@{typ instruction}, call ("Data.AddSubImmediate''64",@{typ Data}, tp[lw(1,64),mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'30"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'29"])), ite(eq(mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'23",var_b"b'22"]), lw(0,2)),mop(Cast w64,var_w("imm12",12)), bop(Lsl,mop(Cast w64,var_w("imm12",12)),ln 12)), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])], @{theory}),@{theory}))), (bop(And,mop(Not,var_b"b'31"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"), bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'15"), bop(And,mop(Not,var_b"b'14"), bop(And,mop(Not,var_b"b'13"), bop(And,mop(Not,var_b"b'12"), bop(And,mop(Not,var_b"b'11"), mop(Not,var_b"b'10"))))))))))))))), call ("instruction.Data",@{typ instruction}, call ("Data.AddSubCarry''32",@{typ Data}, tp[lw(0,32),mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'30"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'29"])), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"), bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'15"), bop(And,mop(Not,var_b"b'14"), bop(And,mop(Not,var_b"b'13"), bop(And,mop(Not,var_b"b'12"), bop(And,mop(Not,var_b"b'11"), mop(Not,var_b"b'10"))))))))))))))), call ("instruction.Data",@{typ instruction}, call ("Data.AddSubCarry''64",@{typ Data}, tp[lw(1,64),mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'30"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'29"])), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,mop(Not,var_b"b'31"), bop(And,mop(Not,var_b"b'28"), bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"),bop(And,var_b"b'25",mop(Not,var_b"b'24")))))), let' (var_w("imm6",6), mop(Cast (Word_Lib.mk_wordT 6), ll[var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11",var_b"b'10"]), ite(bop(Bit,var_w("imm6",6),ln 5), Term.Const(@{const_name "Reserved"},@{typ instruction}), let' (tp[var("opc",@{typ LogicalOp}),var_b"setflags"], call ("DecodeLogicalOp",@{typ "LogicalOp \ bool"}, mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'30",var_b"b'29"]),@{theory}), call ("instruction.Data",@{typ instruction}, call ("Data.LogicalShiftedRegister''32",@{typ Data}, tp[lw(0,32),var("opc",@{typ LogicalOp}), eq(mop(Cast w1,ll[var_b"b'21"]),lw(1,1)),var_b"setflags", call ("DecodeShift",@{typ ShiftType}, mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'23",var_b"b'22"]), @{theory}),mop(Cast HOLogic.natT,var_w("imm6",6)), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])], @{theory}),@{theory}))))), (bop(And,var_b"b'31", bop(And,mop(Not,var_b"b'28"), bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"),bop(And,var_b"b'25",mop(Not,var_b"b'24")))))), let' (tp[var("opc",@{typ LogicalOp}),var_b"setflags"], call ("DecodeLogicalOp",@{typ "LogicalOp \ bool"}, mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'30",var_b"b'29"]),@{theory}), call ("instruction.Data",@{typ instruction}, call ("Data.LogicalShiftedRegister''64",@{typ Data}, tp[lw(1,64),var("opc",@{typ LogicalOp}), eq(mop(Cast w1,ll[var_b"b'21"]),lw(1,1)),var_b"setflags", call ("DecodeShift",@{typ ShiftType}, mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'23",var_b"b'22"]),@{theory}), mop(Cast HOLogic.natT, mop(Cast (Word_Lib.mk_wordT 6), ll[var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11", var_b"b'10"])), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])], @{theory}),@{theory}))), (bop(And,mop(Not,var_b"b'31"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,mop(Not,var_b"b'23"),var_b"b'22"))))))), Term.Const(@{const_name "Reserved"},@{typ instruction})), (bop(And,mop(Not,var_b"b'31"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"),mop(Not,var_b"b'23"))))))), cs(call ("DecodeBitMasks",@{typ "(32 word \ 32 word) option"}, tp[mop(Cast w1,ll[var_b"b'22"]), mop(Cast (Word_Lib.mk_wordT 6), ll[var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11", var_b"b'10"]), mop(Cast (Word_Lib.mk_wordT 6), ll[var_b"b'21",var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17", var_b"b'16"]),lt],@{theory}), [(mop(Some,tp[var_w("imm",32),var_a w32]), let' (tp[var("opc",@{typ LogicalOp}),var_b"setflags"], call ("DecodeLogicalOp",@{typ "LogicalOp \ bool"}, mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'30",var_b"b'29"]),@{theory}), call ("instruction.Data",@{typ instruction}, call ("Data.LogicalImmediate''32",@{typ Data}, tp[lw(0,32),var("opc",@{typ LogicalOp}),var_b"setflags", var_w("imm",32), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])], @{theory}),@{theory}))), (lo(@{typ "32 word \ 32 word"}), Term.Const(@{const_name "Reserved"},@{typ instruction}))],@{context})), (bop(And,var_b"b'31", bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"),mop(Not,var_b"b'23"))))))), cs(call ("DecodeBitMasks",@{typ "(64 word \ 64 word) option"}, tp[mop(Cast w1,ll[var_b"b'22"]), mop(Cast (Word_Lib.mk_wordT 6), ll[var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11", var_b"b'10"]), mop(Cast (Word_Lib.mk_wordT 6), ll[var_b"b'21",var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17", var_b"b'16"]),lt],@{theory}), [(mop(Some,tp[var_w("imm",64),var_a w64]), let' (tp[var("opc",@{typ LogicalOp}),var_b"setflags"], call ("DecodeLogicalOp",@{typ "LogicalOp \ bool"}, mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'30",var_b"b'29"]),@{theory}), call ("instruction.Data",@{typ instruction}, call ("Data.LogicalImmediate''64",@{typ Data}, tp[lw(1,64),var("opc",@{typ LogicalOp}),var_b"setflags", var_w("imm",64), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])], @{theory}),@{theory}))), (lo(@{typ "64 word \ 64 word"}), Term.Const(@{const_name "Reserved"},@{typ instruction}))],@{context})), (bop(And,mop(Not,var_b"b'31"), bop(And,mop(Not,var_b"b'30"), bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,var_b"b'22", bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'15"), bop(And,mop(Not,var_b"b'14"), bop(And,var_b"b'13", mop(Not,var_b"b'12"))))))))))))))), call ("instruction.Data",@{typ instruction}, call ("Data.Shift''32",@{typ Data}, tp[lw(0,32), call ("DecodeShift",@{typ ShiftType}, mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'11",var_b"b'10"]),@{theory}), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,var_b"b'31", bop(And,mop(Not,var_b"b'30"), bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,var_b"b'22", bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'15"), bop(And,mop(Not,var_b"b'14"), bop(And,var_b"b'13", mop(Not,var_b"b'12"))))))))))))))), call ("instruction.Data",@{typ instruction}, call ("Data.Shift''64",@{typ Data}, tp[lw(1,64), call ("DecodeShift",@{typ ShiftType}, mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'11",var_b"b'10"]),@{theory}), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,mop(Not,var_b"b'31"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"),bop(And,var_b"b'23",var_b"b'22"))))))), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (bop(And,mop(Not,var_b"b'30"), bop(And,var_b"b'29", bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25",bop(And,mop(Not,var_b"b'24"),var_b"b'23"))))))), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25",bop(And,mop(Not,var_b"b'24"),var_b"b'23"))))), let' (var_w("Rd",5), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"]), let' (var_w("imm16",16), mop(Cast w16, ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16",var_b"b'15", var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11",var_b"b'10",var_b"b'9", var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), let' (var_w("hw",2),mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'22",var_b"b'21"]), let' (var("opcode",@{typ MoveWideOp}), cs(mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'30",var_b"b'29"]), [(var_w("v",2), itb([(eq(var_w("v",2),lw(0,2)), lc("MoveWideOp_N","MoveWideOp",@{theory})), (eq(var_w("v",2),lw(2,2)), lc("MoveWideOp_Z","MoveWideOp",@{theory})), (eq(var_w("v",2),lw(3,2)), lc("MoveWideOp_K","MoveWideOp",@{theory}))], lx @{typ MoveWideOp}))],@{context}), ite(eq(mop(Cast w1,ll[var_b"b'31"]),lw(1,1)), call ("instruction.Data",@{typ instruction}, call ("Data.MoveWide''64",@{typ Data}, tp[lw(1,64),var("opcode",@{typ MoveWideOp}),var_w("hw",2), var_w("imm16",16),var_w("Rd",5)],@{theory}),@{theory}), call ("instruction.Data",@{typ instruction}, call ("Data.MoveWide''32",@{typ Data}, tp[lw(0,32),var("opcode",@{typ MoveWideOp}),var_w("hw",2), var_w("imm16",16),var_w("Rd",5)],@{theory}),@{theory}))))))), (bop(And,var_b"b'30", bop(And,var_b"b'29", bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25",bop(And,var_b"b'24",mop(Not,var_b"b'23")))))))), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (bop(And,mop(Not,var_b"b'31"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25",bop(And,var_b"b'24",mop(Not,var_b"b'23"))))))), let' (var_w("imms",6), mop(Cast (Word_Lib.mk_wordT 6), ll[var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11",var_b"b'10"]), let' (var_w("immr",6), mop(Cast (Word_Lib.mk_wordT 6), ll[var_b"b'21",var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), let' (var_w("N",1),mop(Cast w1,ll[var_b"b'22"]), ite(bop(Or,eq(var_w("N",1),lw(1,1)), bop(Or,bop(Bit,var_w("immr",6),ln 5),bop(Bit,var_w("imms",6),ln 5))), Term.Const(@{const_name "Reserved"},@{typ instruction}), let' (tp[var_b"inzero",var_b"extend"], cs(mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'30",var_b"b'29"]), [(var_w("v",2), itb([(eq(var_w("v",2),lw(0,2)),tp[lt,lt]), (eq(var_w("v",2),lw(1,2)),tp[lf,lf]), (eq(var_w("v",2),lw(2,2)),tp[lt,lf])], lx(@{typ "bool \ bool"})))],@{context}), cs(call ("DecodeBitMasks",@{typ "(32 word \ 32 word) option"}, tp[var_w("N",1),var_w("imms",6),var_w("immr",6),lf],@{theory}), [(mop(Some,tp[var_w("wmask",32),var_w("tmask",32)]), call ("instruction.Data",@{typ instruction}, call ("Data.BitfieldMove''32",@{typ Data}, tp[lw(0,32),var_b"inzero",var_b"extend",var_w("wmask",32), var_w("tmask",32), mop(Cast HOLogic.natT,var_w("immr",6)), mop(Cast HOLogic.natT,var_w("imms",6)), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6", var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1", var_b"b'0"])],@{theory}),@{theory})), (lo(@{typ "32 word \ 32 word"}), Term.Const(@{const_name "Reserved"},@{typ instruction}))], @{context}))))))), (bop(And,var_b"b'31", bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25",bop(And,var_b"b'24",mop(Not,var_b"b'23"))))))), let' (var_w("imms",6), mop(Cast (Word_Lib.mk_wordT 6), ll[var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11",var_b"b'10"]), let' (var_w("immr",6), mop(Cast (Word_Lib.mk_wordT 6), ll[var_b"b'21",var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), let' (var_w("N",1),mop(Cast w1,ll[var_b"b'22"]), ite(eq(var_w("N",1),lw(0,1)), Term.Const(@{const_name "Reserved"},@{typ instruction}), let' (tp[var_b"inzero",var_b"extend"], cs(mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'30",var_b"b'29"]), [(var_w("v",2), itb([(eq(var_w("v",2),lw(0,2)),tp[lt,lt]), (eq(var_w("v",2),lw(1,2)),tp[lf,lf]), (eq(var_w("v",2),lw(2,2)),tp[lt,lf])], lx(@{typ "bool \ bool"})))],@{context}), cs(call ("DecodeBitMasks",@{typ "(64 word \ 64 word) option"}, tp[var_w("N",1),var_w("imms",6),var_w("immr",6),lf],@{theory}), [(mop(Some,tp[var_w("wmask",64),var_w("tmask",64)]), call ("instruction.Data",@{typ instruction}, call ("Data.BitfieldMove''64",@{typ Data}, tp[lw(1,64),var_b"inzero",var_b"extend",var_w("wmask",64), var_w("tmask",64), mop(Cast HOLogic.natT,var_w("immr",6)), mop(Cast HOLogic.natT,var_w("imms",6)), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6", var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1", var_b"b'0"])],@{theory}),@{theory})), (lo(@{typ "64 word \ 64 word"}), Term.Const(@{const_name "Reserved"},@{typ instruction}))], @{context}))))))), (bop(And,mop(Not,var_b"b'31"), bop(And,var_b"b'29", bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,mop(Not,var_b"b'23"), bop(And,var_b"b'22", bop(And,mop(Not,var_b"b'21"), bop(And,var_b"b'11", bop(And,mop(Not,var_b"b'10"), mop(Not,var_b"b'4"))))))))))))), call ("instruction.Data",@{typ instruction}, call ("Data.ConditionalCompareImmediate''32",@{typ Data}, tp[lw(0,32),mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'30"])), mop(Cast w32, mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"])), mop(Cast w4,ll[var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12"]), tp[mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'3"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'2"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'1"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'0"]))], mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"])],@{theory}), @{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'29", bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,mop(Not,var_b"b'23"), bop(And,var_b"b'22", bop(And,mop(Not,var_b"b'21"), bop(And,var_b"b'11", bop(And,mop(Not,var_b"b'10"), mop(Not,var_b"b'4"))))))))))))), call ("instruction.Data",@{typ instruction}, call ("Data.ConditionalCompareImmediate''64",@{typ Data}, tp[lw(1,64),mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'30"])), mop(Cast w64, mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"])), mop(Cast w4,ll[var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12"]), tp[mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'3"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'2"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'1"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'0"]))], mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"])],@{theory}), @{theory})), (bop(And,mop(Not,var_b"b'31"), bop(And,var_b"b'29", bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,mop(Not,var_b"b'23"), bop(And,var_b"b'22", bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'11"), bop(And,mop(Not,var_b"b'10"), mop(Not,var_b"b'4"))))))))))))), call ("instruction.Data",@{typ instruction}, call ("Data.ConditionalCompareRegister''32",@{typ Data}, tp[lw(0,32),mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'30"])), mop(Cast w4,ll[var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12"]), tp[mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'3"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'2"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'1"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'0"]))], mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"])],@{theory}), @{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'29", bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,mop(Not,var_b"b'23"), bop(And,var_b"b'22", bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'11"), bop(And,mop(Not,var_b"b'10"), mop(Not,var_b"b'4"))))))))))))), call ("instruction.Data",@{typ instruction}, call ("Data.ConditionalCompareRegister''64",@{typ Data}, tp[lw(1,64),mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'30"])), mop(Cast w4,ll[var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12"]), tp[mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'3"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'2"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'1"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'0"]))], mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"])],@{theory}), @{theory})), (bop(And,mop(Not,var_b"b'31"), bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,mop(Not,var_b"b'22"), bop(And,mop(Not,var_b"b'21"),mop(Not,var_b"b'11"))))))))))), call ("instruction.Data",@{typ instruction}, call ("Data.ConditionalSelect''32",@{typ Data}, tp[lw(0,32),mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'30"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'10"])), mop(Cast w4,ll[var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,var_b"b'31", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,mop(Not,var_b"b'22"), bop(And,mop(Not,var_b"b'21"),mop(Not,var_b"b'11"))))))))))), call ("instruction.Data",@{typ instruction}, call ("Data.ConditionalSelect''64",@{typ Data}, tp[lw(1,64),mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'30"])), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'10"])), mop(Cast w4,ll[var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,mop(Not,var_b"b'31"), bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,var_b"b'22", bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'20"), bop(And,mop(Not,var_b"b'19"), bop(And,mop(Not,var_b"b'18"), bop(And,mop(Not,var_b"b'17"), bop(And, mop(Not,var_b"b'16"), bop(And, mop(Not, var_b"b'15"), bop(And, mop(Not, var_b"b'14"), bop(And, mop(Not, var_b"b'13"), bop(And, var_b"b'12", mop(Not, var_b"b'11"))))))))))))))))))))), call ("instruction.Data",@{typ instruction}, call ("Data.CountLeading''32",@{typ Data}, tp[lw(0,32),mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'10"])), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,var_b"b'22", bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'20"), bop(And,mop(Not,var_b"b'19"), bop(And,mop(Not,var_b"b'18"), bop(And,mop(Not,var_b"b'17"), bop(And, mop(Not,var_b"b'16"), bop(And, mop(Not, var_b"b'15"), bop(And, mop(Not, var_b"b'14"), bop(And, mop(Not, var_b"b'13"), bop(And, var_b"b'12", mop(Not, var_b"b'11"))))))))))))))))))))), call ("instruction.Data",@{typ instruction}, call ("Data.CountLeading''64",@{typ Data}, tp[lw(1,64),mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'10"])), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,mop(Not,var_b"b'31"), bop(And,mop(Not,var_b"b'30"), bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,var_b"b'24", bop(And,var_b"b'23",mop(Not,var_b"b'21")))))))))), let' (var_w("imms",6), mop(Cast (Word_Lib.mk_wordT 6), ll[var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11",var_b"b'10"]), itb([(mop(Not,eq(mop(Cast w1,ll[var_b"b'22"]),lw(0,1))), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (bop(Bit,var_w("imms",6),ln 5), Term.Const(@{const_name "Reserved"},@{typ instruction}))], call ("instruction.Data",@{typ instruction}, call ("Data.ExtractRegister''32",@{typ Data}, tp[lw(0,32),var_w("imms",6), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])], @{theory}),@{theory})))), (bop(And,var_b"b'31", bop(And,mop(Not,var_b"b'30"), bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,var_b"b'24", bop(And,var_b"b'23",mop(Not,var_b"b'21")))))))))), ite(mop(Not,eq(mop(Cast w1,ll[var_b"b'22"]),lw(1,1))), Term.Const(@{const_name "Unallocated"},@{typ instruction}), call ("instruction.Data",@{typ instruction}, call ("Data.ExtractRegister''64",@{typ Data}, tp[lw(1,64), mop(Cast (Word_Lib.mk_wordT 6), ll[var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11", var_b"b'10"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])], @{theory}),@{theory}))), (bop(And,mop(Not,var_b"b'31"), bop(And,mop(Not,var_b"b'30"), bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,var_b"b'22", bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'15"), bop(And,mop(Not,var_b"b'14"), bop(And,mop(Not,var_b"b'13"), bop(And,mop(Not,var_b"b'12"), var_b"b'11"))))))))))))))), call ("instruction.Data",@{typ instruction}, call ("Data.Division''32",@{typ Data}, tp[lw(0,32),eq(mop(Cast w1,ll[var_b"b'10"]),lw(0,1)), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,var_b"b'31", bop(And,mop(Not,var_b"b'30"), bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,var_b"b'22", bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'15"), bop(And,mop(Not,var_b"b'14"), bop(And,mop(Not,var_b"b'13"), bop(And,mop(Not,var_b"b'12"), var_b"b'11"))))))))))))))), call ("instruction.Data",@{typ instruction}, call ("Data.Division''64",@{typ Data}, tp[lw(1,64),eq(mop(Cast w1,ll[var_b"b'10"]),lw(0,1)), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,mop(Not,var_b"b'31"), bop(And,mop(Not,var_b"b'30"), bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,var_b"b'24", bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"),mop(Not,var_b"b'21"))))))))))), call ("instruction.Data",@{typ instruction}, call ("Data.MultiplyAddSub''32",@{typ Data}, tp[lw(0,32),eq(mop(Cast w1,ll[var_b"b'15"]),lw(1,1)), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11",var_b"b'10"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,var_b"b'31", bop(And,mop(Not,var_b"b'30"), bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,var_b"b'24", bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"),mop(Not,var_b"b'21"))))))))))), call ("instruction.Data",@{typ instruction}, call ("Data.MultiplyAddSub''64",@{typ Data}, tp[lw(1,64),eq(mop(Cast w1,ll[var_b"b'15"]),lw(1,1)), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11",var_b"b'10"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,var_b"b'31", bop(And,mop(Not,var_b"b'30"), bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,var_b"b'24", bop(And,mop(Not,var_b"b'22"),var_b"b'21"))))))))), call ("instruction.Data",@{typ instruction}, call ("Data.MultiplyAddSubLong",@{typ Data}, tp[mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'15"])), eq(mop(Cast w1,ll[var_b"b'23"]),lw(0,1)), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11",var_b"b'10"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,var_b"b'31", bop(And,mop(Not,var_b"b'30"), bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,var_b"b'24", bop(And,var_b"b'22", bop(And,mop(Not,var_b"b'21"),mop(Not,var_b"b'15"))))))))))), call ("instruction.Data",@{typ instruction}, call ("Data.MultiplyHigh",@{typ Data}, tp[eq(mop(Cast w1,ll[var_b"b'23"]),lw(0,1)), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,mop(Not,var_b"b'31"), bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,var_b"b'22", bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'20"), bop(And,mop(Not,var_b"b'19"), bop(And,mop(Not,var_b"b'18"), bop(And,mop(Not,var_b"b'17"), bop(And, mop(Not,var_b"b'16"), bop(And, mop(Not, var_b"b'15"), bop(And, mop(Not, var_b"b'14"), bop(And, mop(Not, var_b"b'13"), bop(And, mop(Not, var_b"b'12"), bop(And, var_b"b'11", var_b"b'10"))))))))))))))))))))), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (bop(And,mop(Not,var_b"b'31"), bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,var_b"b'22", bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'20"), bop(And,mop(Not,var_b"b'19"), bop(And,mop(Not,var_b"b'18"), bop(And,mop(Not,var_b"b'17"), bop(And, mop(Not,var_b"b'16"), bop(And, mop(Not, var_b"b'15"), bop(And, mop(Not, var_b"b'14"), bop(And, mop(Not, var_b"b'13"), mop(Not, var_b"b'12")))))))))))))))))))), call ("instruction.Data",@{typ instruction}, call ("Data.Reverse''32",@{typ Data}, tp[lw(0,32), mop(Cast @{typ RevOp}, mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'11",var_b"b'10"])), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,var_b"b'22", bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'20"), bop(And,mop(Not,var_b"b'19"), bop(And,mop(Not,var_b"b'18"), bop(And,mop(Not,var_b"b'17"), bop(And, mop(Not,var_b"b'16"), bop(And, mop(Not, var_b"b'15"), bop(And, mop(Not, var_b"b'14"), bop(And, mop(Not, var_b"b'13"), mop(Not, var_b"b'12")))))))))))))))))))), call ("instruction.Data",@{typ instruction}, call ("Data.Reverse''64",@{typ Data}, tp[lw(1,64), mop(Cast @{typ RevOp}, mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'11",var_b"b'10"])), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,mop(Not,var_b"b'31"), bop(And,mop(Not,var_b"b'30"), bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,var_b"b'22", bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'15"), bop(And,var_b"b'14", bop(And,mop(Not,var_b"b'13"), bop(And,mop(Not,var_b"b'11"), mop(Not,var_b"b'10")))))))))))))))), call ("instruction.CRCExt",@{typ instruction}, call ("CRCExt.CRC''8",@{typ CRCExt}, tp[lw(0,8),mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'12"])), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,mop(Not,var_b"b'31"), bop(And,mop(Not,var_b"b'30"), bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,var_b"b'22", bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'15"), bop(And,var_b"b'14", bop(And,mop(Not,var_b"b'13"), bop(And,mop(Not,var_b"b'11"), var_b"b'10"))))))))))))))), call ("instruction.CRCExt",@{typ instruction}, call ("CRCExt.CRC''16",@{typ CRCExt}, tp[lw(1,16),mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'12"])), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,mop(Not,var_b"b'31"), bop(And,mop(Not,var_b"b'30"), bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,var_b"b'22", bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'15"), bop(And,var_b"b'14", bop(And,mop(Not,var_b"b'13"), bop(And,var_b"b'11", mop(Not,var_b"b'10")))))))))))))))), call ("instruction.CRCExt",@{typ instruction}, call ("CRCExt.CRC''32",@{typ CRCExt}, tp[lw(2,32),mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'12"])), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,var_b"b'31", bop(And,mop(Not,var_b"b'30"), bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,var_b"b'22", bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'15"), bop(And,var_b"b'14", bop(And,mop(Not,var_b"b'13"), bop(And,var_b"b'11", var_b"b'10"))))))))))))))), call ("instruction.CRCExt",@{typ instruction}, call ("CRCExt.CRC''64",@{typ CRCExt}, tp[lw(3,64),mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'12"])), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,mop(Not,var_b"b'31"), bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,mop(Not,var_b"b'25"), bop(And,mop(Not,var_b"b'24"),mop(Not,var_b"b'4"))))))))), call ("instruction.Branch",@{typ instruction}, call ("Branch.BranchConditional",@{typ Branch}, tp[mop(SE w64, cc[mop(Cast (Word_Lib.mk_wordT 19), ll[var_b"b'23",var_b"b'22",var_b"b'21",var_b"b'20",var_b"b'19", var_b"b'18",var_b"b'17",var_b"b'16",var_b"b'15",var_b"b'14", var_b"b'13",var_b"b'12",var_b"b'11",var_b"b'10",var_b"b'9", var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]),lw(0,2)]), mop(Cast w4,ll[var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,mop(Not,var_b"b'30"), bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28",bop(And,mop(Not,var_b"b'27"),var_b"b'26")))), call ("instruction.Branch",@{typ instruction}, call ("Branch.BranchImmediate",@{typ Branch}, tp[mop(SE w64, cc[mop(Cast (Word_Lib.mk_wordT 26), ll[var_b"b'25",var_b"b'24",var_b"b'23",var_b"b'22",var_b"b'21", var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16", var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11", var_b"b'10",var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6", var_b"b'5",var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1", var_b"b'0"]),lw(0,2)]), ite(eq(mop(Cast w1,ll[var_b"b'31"]),lw(1,1)), lc("BranchType_CALL","BranchType",@{theory}), lc("BranchType_JMP","BranchType",@{theory}))],@{theory}),@{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"), bop(And,mop(Not,var_b"b'21"), bop(And,var_b"b'20", bop(And,var_b"b'19", bop(And,var_b"b'18", bop(And,var_b"b'17", bop(And,var_b"b'16", bop(And, mop(Not, var_b"b'15"), bop(And, mop(Not, var_b"b'14"), bop(And, mop(Not, var_b"b'13"), bop(And, mop(Not, var_b"b'12"), bop(And, mop(Not, var_b"b'11"), bop(And, mop(Not, var_b"b'10"), bop(And, mop(Not, var_b"b'4"), bop(And, mop(Not, var_b"b'3"), bop(And, mop(Not, var_b"b'2"), bop(And, mop(Not, var_b"b'1"), mop(Not, var_b"b'0"))))))))))))))))))))))))))), call ("instruction.Branch",@{typ instruction}, call ("Branch.BranchRegister",@{typ Branch}, tp[mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), lc("BranchType_JMP","BranchType",@{theory})],@{theory}),@{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"), bop(And,var_b"b'21", bop(And,var_b"b'20", bop(And,var_b"b'19", bop(And,var_b"b'18", bop(And,var_b"b'17", bop(And,var_b"b'16", bop(And, mop(Not, var_b"b'15"), bop(And, mop(Not, var_b"b'14"), bop(And, mop(Not, var_b"b'13"), bop(And, mop(Not, var_b"b'12"), bop(And, mop(Not, var_b"b'11"), bop(And, mop(Not, var_b"b'10"), bop(And, mop(Not, var_b"b'4"), bop(And, mop(Not, var_b"b'3"), bop(And, mop(Not, var_b"b'2"), bop(And, mop(Not, var_b"b'1"), mop(Not, var_b"b'0"))))))))))))))))))))))))))), call ("instruction.Branch",@{typ instruction}, call ("Branch.BranchRegister",@{typ Branch}, tp[mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), lc("BranchType_CALL","BranchType",@{theory})],@{theory}),@{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,mop(Not,var_b"b'23"), bop(And,var_b"b'22", bop(And,mop(Not,var_b"b'21"), bop(And,var_b"b'20", bop(And,var_b"b'19", bop(And,var_b"b'18", bop(And,var_b"b'17", bop(And,var_b"b'16", bop(And, mop(Not, var_b"b'15"), bop(And, mop(Not, var_b"b'14"), bop(And, mop(Not, var_b"b'13"), bop(And, mop(Not, var_b"b'12"), bop(And, mop(Not, var_b"b'11"), bop(And, mop(Not, var_b"b'10"), bop(And, mop(Not, var_b"b'4"), bop(And, mop(Not, var_b"b'3"), bop(And, mop(Not, var_b"b'2"), bop(And, mop(Not, var_b"b'1"), mop(Not, var_b"b'0"))))))))))))))))))))))))))), call ("instruction.Branch",@{typ instruction}, call ("Branch.BranchRegister",@{typ Branch}, tp[mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), lc("BranchType_RET","BranchType",@{theory})],@{theory}),@{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,mop(Not,var_b"b'23"), bop(And,var_b"b'20", bop(And,var_b"b'19", bop(And,var_b"b'18", bop(And,var_b"b'17", bop(And,var_b"b'16", bop(And,mop(Not,var_b"b'15"), bop(And, mop(Not,var_b"b'14"), bop(And, mop(Not, var_b"b'13"), bop(And, mop(Not, var_b"b'12"), bop(And, mop(Not, var_b"b'11"), bop(And, mop(Not, var_b"b'10"), bop(And, mop(Not, var_b"b'4"), bop(And, mop(Not, var_b"b'3"), bop(And, mop(Not, var_b"b'2"), bop(And, mop(Not, var_b"b'1"), mop(Not, var_b"b'0"))))))))))))))))))))))))), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (bop(And,mop(Not,var_b"b'30"), bop(And,var_b"b'29", bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"),bop(And,var_b"b'26",mop(Not,var_b"b'25")))))), let' (var_w("Rt",5), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"]), let' (var_b"iszero",eq(mop(Cast w1,ll[var_b"b'24"]),lw(0,1)), let' (var_w("offset",64), mop(SE w64, cc[mop(Cast (Word_Lib.mk_wordT 19), ll[var_b"b'23",var_b"b'22",var_b"b'21",var_b"b'20",var_b"b'19", var_b"b'18",var_b"b'17",var_b"b'16",var_b"b'15",var_b"b'14", var_b"b'13",var_b"b'12",var_b"b'11",var_b"b'10",var_b"b'9", var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]),lw(0,2)]), ite(eq(mop(Cast w1,ll[var_b"b'31"]),lw(1,1)), call ("instruction.Branch",@{typ instruction}, call ("Branch.CompareAndBranch''64",@{typ Branch}, tp[lw(1,64),var_b"iszero",var_w("offset",64),var_w("Rt",5)], @{theory}),@{theory}), call ("instruction.Branch",@{typ instruction}, call ("Branch.CompareAndBranch''32",@{typ Branch}, tp[lw(0,32),var_b"iszero",var_w("offset",64),var_w("Rt",5)], @{theory}),@{theory})))))), (bop(And,mop(Not,var_b"b'30"), bop(And,var_b"b'29", bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"),bop(And,var_b"b'26",var_b"b'25"))))), let' (var_w("Rt",5), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"]), let' (var_w("sf",1),mop(Cast w1,ll[var_b"b'31"]), let' (var_w("bit_pos",6), cc[var_w("sf",1), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'23",var_b"b'22",var_b"b'21",var_b"b'20",var_b"b'19"])], let' (var_b"bit_val",mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'24"])), let' (var_w("offset",64), mop(SE w64, cc[mop(Cast (Word_Lib.mk_wordT 14), ll[var_b"b'18",var_b"b'17",var_b"b'16",var_b"b'15", var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11", var_b"b'10",var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6", var_b"b'5"]),lw(0,2)]), ite(eq(var_w("sf",1),lw(1,1)), call ("instruction.Branch",@{typ instruction}, call ("Branch.TestBitAndBranch''64",@{typ Branch}, tp[lw(1,64),var_w("bit_pos",6),var_b"bit_val", var_w("offset",64),var_w("Rt",5)],@{theory}),@{theory}), call ("instruction.Branch",@{typ instruction}, call ("Branch.TestBitAndBranch''32",@{typ Branch}, tp[lw(0,32),var_w("bit_pos",6),var_b"bit_val", var_w("offset",64),var_w("Rt",5)],@{theory}),@{theory})))))))), (bop(And,var_b"b'31", bop(And,mop(Not,var_b"b'30"), bop(And,var_b"b'29", bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,mop(Not,var_b"b'25"), bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,var_b"b'22",mop(Not,var_b"b'21"))))))))))), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (bop(And,var_b"b'31", bop(And,mop(Not,var_b"b'30"), bop(And,var_b"b'29", bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,mop(Not,var_b"b'25"), bop(And,var_b"b'24",bop(And,var_b"b'23",var_b"b'22"))))))))), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,var_b"b'29", bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,mop(Not,var_b"b'25"), bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,var_b"b'22",mop(Not,var_b"b'21"))))))))))), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,var_b"b'29", bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,mop(Not,var_b"b'25"), bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,mop(Not,var_b"b'21"), bop(And,var_b"b'11",mop(Not,var_b"b'10")))))))))))), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (bop(And,var_b"b'29", bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,mop(Not,var_b"b'25"), bop(And,mop(Not,var_b"b'24"), bop(And,mop(Not,var_b"b'21"),var_b"b'10"))))))), call ("LoadStoreImmediate",@{typ instruction}, tp[mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'31",var_b"b'30"]), mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'23",var_b"b'22"]), lc("AccType_NORMAL","AccType",@{theory}),lt, eq(mop(Cast w1,ll[var_b"b'11"]),lw(0,1)),lf, mop(SE w64, mop(Cast (Word_Lib.mk_wordT 9), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16", var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12"])), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory})), (bop(And,var_b"b'29", bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,mop(Not,var_b"b'25"), bop(And,mop(Not,var_b"b'24"), bop(And,mop(Not,var_b"b'21"),mop(Not,var_b"b'10")))))))), call ("LoadStoreImmediate",@{typ instruction}, tp[mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'31",var_b"b'30"]), mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'23",var_b"b'22"]), ite(eq(mop(Cast w1,ll[var_b"b'11"]),lw(1,1)), lc("AccType_UNPRIV","AccType",@{theory}), lc("AccType_NORMAL","AccType",@{theory})),lf,lf,lf, mop(SE w64, mop(Cast (Word_Lib.mk_wordT 9), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16", var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12"])), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory})), (bop(And,var_b"b'29", bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"),bop(And,mop(Not,var_b"b'25"),var_b"b'24"))))), let' (var_w("size",2),mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'31",var_b"b'30"]), call ("LoadStoreImmediate",@{typ instruction}, tp[var_w("size",2),mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'23",var_b"b'22"]), lc("AccType_NORMAL","AccType",@{theory}),lf,lf,lt, bop(Lsl, mop(Cast w64, mop(Cast (Word_Lib.mk_wordT 12), ll[var_b"b'21",var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17", var_b"b'16",var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12", var_b"b'11",var_b"b'10"])), mop(Cast HOLogic.natT,var_w("size",2))), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}))), (bop(And,var_b"b'31", bop(And,var_b"b'29", bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,mop(Not,var_b"b'25"), bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,var_b"b'22", bop(And,var_b"b'21", bop(And,var_b"b'11",mop(Not,var_b"b'10")))))))))))), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (bop(And,var_b"b'29", bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,mop(Not,var_b"b'25"), bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'21", bop(And,mop(Not,var_b"b'15"), bop(And,mop(Not,var_b"b'14"), bop(And,var_b"b'11",mop(Not,var_b"b'10"))))))))))), Term.Const(@{const_name "Reserved"},@{typ instruction})), (bop(And,var_b"b'29", bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,mop(Not,var_b"b'25"), bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'21", bop(And,var_b"b'15", bop(And,mop(Not,var_b"b'14"), bop(And,var_b"b'11",mop(Not,var_b"b'10"))))))))))), Term.Const(@{const_name "Reserved"},@{typ instruction})), (bop(And,var_b"b'29", bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,mop(Not,var_b"b'25"), bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'21",bop(And,var_b"b'11",mop(Not,var_b"b'10"))))))))), let' (var_w("opc",2),mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'23",var_b"b'22"]), let' (var_w("size",2),mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'31",var_b"b'30"]), let' (tp[var("memop",@{typ MemOp}),var_b"regsize_word",var_b"signed"], itb([(mop(Not,bop(Bit,var_w("opc",2),ln 1)), tp[ite(bop(Bit,var_w("opc",2),ln 0), lc("MemOp_LOAD","MemOp",@{theory}), lc("MemOp_STORE","MemOp",@{theory})), mop(Not,eq(var_w("size",2),lw(3,2))),lf]), (eq(var_w("size",2),lw(3,2)), tp[lc("MemOp_PREFETCH","MemOp",@{theory}),lx HOLogic.boolT, lx HOLogic.boolT])], tp[lc("MemOp_LOAD","MemOp",@{theory}),bop(Bit,var_w("opc",2),ln 0),lt]), call ("LoadStoreRegister",@{typ instruction}, tp[var_w("size",2),var_b"regsize_word",var("memop",@{typ MemOp}), var_b"signed", mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), call ("DecodeRegExtend",@{typ ExtendType}, mop(Cast (Word_Lib.mk_wordT 3), ll[var_b"b'15",var_b"b'14",var_b"b'13"]),@{theory}), ite(eq(mop(Cast w1,ll[var_b"b'12"]),lw(1,1)), mop(Cast HOLogic.natT,var_w("size",2)),ln 0), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])], @{theory}))))), (bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,mop(Not,var_b"b'25"),mop(Not,var_b"b'24")))))), let' (var_w("Rt",5), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"]), let' (var_w("offset",64), mop(SE w64, cc[mop(Cast (Word_Lib.mk_wordT 19), ll[var_b"b'23",var_b"b'22",var_b"b'21",var_b"b'20",var_b"b'19", var_b"b'18",var_b"b'17",var_b"b'16",var_b"b'15",var_b"b'14", var_b"b'13",var_b"b'12",var_b"b'11",var_b"b'10",var_b"b'9", var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]),lw(0,2)]), cs(mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'31",var_b"b'30"]), [(var_w("v",2), itb([(eq(var_w("v",2),lw(0,2)), call ("instruction.LoadStore",@{typ instruction}, call ("LoadStore.LoadLiteral''32",@{typ LoadStore}, tp[lw(0,32),lc("MemOp_LOAD","MemOp",@{theory}),lf, var_w("offset",64),var_w("Rt",5)],@{theory}),@{theory})), (eq(var_w("v",2),lw(1,2)), call ("instruction.LoadStore",@{typ instruction}, call ("LoadStore.LoadLiteral''64",@{typ LoadStore}, tp[lw(1,64),lc("MemOp_LOAD","MemOp",@{theory}),lf, var_w("offset",64),var_w("Rt",5)],@{theory}),@{theory})), (eq(var_w("v",2),lw(2,2)), call ("instruction.LoadStore",@{typ instruction}, call ("LoadStore.LoadLiteral''32",@{typ LoadStore}, tp[lw(2,32),lc("MemOp_LOAD","MemOp",@{theory}),lt, var_w("offset",64),var_w("Rt",5)],@{theory}),@{theory})), (eq(var_w("v",2),lw(3,2)), call ("instruction.LoadStore",@{typ instruction}, call ("LoadStore.LoadLiteral''32",@{typ LoadStore}, tp[lw(3,32),lc("MemOp_PREFETCH","MemOp",@{theory}),lf, var_w("offset",64),var_w("Rt",5)],@{theory}),@{theory}))], lx @{typ instruction}))],@{context})))), (bop(And,var_b"b'30", bop(And,var_b"b'29", bop(And,mop(Not,var_b"b'28"), bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,mop(Not,var_b"b'25"),mop(Not,var_b"b'22"))))))), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,var_b"b'29", bop(And,mop(Not,var_b"b'28"), bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"),mop(Not,var_b"b'25"))))))), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (bop(And,var_b"b'29", bop(And,mop(Not,var_b"b'28"), bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,mop(Not,var_b"b'25"), bop(And,mop(Not,var_b"b'24"),mop(Not,var_b"b'23"))))))), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (bop(And,var_b"b'29", bop(And,mop(Not,var_b"b'28"), bop(And,var_b"b'27",bop(And,mop(Not,var_b"b'26"),mop(Not,var_b"b'25"))))), let' (var_w("sf",1),mop(Cast w1,ll[var_b"b'31"]), let' (var_b"wback",eq(mop(Cast w1,ll[var_b"b'23"]),lw(1,1)), let' (var_b"signed",eq(mop(Cast w1,ll[var_b"b'30"]),lw(1,1)), let' (var_b"postindex",eq(mop(Cast w1,ll[var_b"b'24"]),lw(0,1)), let' (var_b"nontemporal", bop(And,mop(Not,bop(Or,var_b"wback",var_b"signed")),var_b"postindex"), call ("LoadStorePair",@{typ instruction}, tp[var_w("sf",1), ite(eq(mop(Cast w1,ll[var_b"b'22"]),lw(1,1)), lc("MemOp_LOAD","MemOp",@{theory}), lc("MemOp_STORE","MemOp",@{theory})), ite(var_b"nontemporal",lc("AccType_STREAM","AccType",@{theory}), lc("AccType_NORMAL","AccType",@{theory})),var_b"signed", var_b"wback", bop(And,mop(Not,var_b"nontemporal"),var_b"postindex"), bop(Lsl, mop(SE w64, mop(Cast (Word_Lib.mk_wordT 7), ll[var_b"b'21",var_b"b'20",var_b"b'19",var_b"b'18", var_b"b'17",var_b"b'16",var_b"b'15"])), bop(Add,ln 2,mop(Cast HOLogic.natT,var_w("sf",1)))), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11", var_b"b'10"])],@{theory}))))))), (bop(And,mop(Not,var_b"b'29"), bop(And,mop(Not,var_b"b'28"), bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,mop(Not,var_b"b'25"), bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,mop(Not,var_b"b'21"),mop(Not,var_b"b'15"))))))))), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (bop(And,mop(Not,var_b"b'29"), bop(And,mop(Not,var_b"b'28"), bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,mop(Not,var_b"b'25"), bop(And,mop(Not,var_b"b'24"),bop(And,var_b"b'23",var_b"b'21"))))))), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (bop(And,mop(Not,var_b"b'31"), bop(And,mop(Not,var_b"b'29"), bop(And,mop(Not,var_b"b'28"), bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,mop(Not,var_b"b'25"), bop(And,mop(Not,var_b"b'24"),var_b"b'21"))))))), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (bop(And,mop(Not,var_b"b'29"), bop(And,mop(Not,var_b"b'28"), bop(And,var_b"b'27", bop(And,mop(Not,var_b"b'26"), bop(And,mop(Not,var_b"b'25"),mop(Not,var_b"b'24")))))), call ("LoadStoreAcquire",@{typ instruction}, tp[mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'31",var_b"b'30"]), ite(eq(mop(Cast w1,ll[var_b"b'22"]),lw(1,1)), lc("MemOp_LOAD","MemOp",@{theory}),lc("MemOp_STORE","MemOp",@{theory})), ite(eq(mop(Cast w1,ll[var_b"b'15"]),lw(1,1)), lc("AccType_ORDERED","AccType",@{theory}), lc("AccType_ATOMIC","AccType",@{theory})), eq(mop(Cast w1,ll[var_b"b'23"]),lw(0,1)), eq(mop(Cast w1,ll[var_b"b'21"]),lw(1,1)), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'9",var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11",var_b"b'10"])],@{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,mop(Not,var_b"b'25"), bop(And,var_b"b'24", bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"),var_b"b'20")))))))))), call ("instruction.System",@{typ instruction}, call ("System.MoveSystemRegister",@{typ System}, tp[mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'21"])), bop(Add,lw(2,3),mop(Cast (Word_Lib.mk_wordT 3),mop(Cast w1,ll[var_b"b'19"]))), mop(Cast (Word_Lib.mk_wordT 3),ll[var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 3),ll[var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast w4,ll[var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12"]), mop(Cast w4,ll[var_b"b'11",var_b"b'10",var_b"b'9",var_b"b'8"]), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,mop(Not,var_b"b'25"), bop(And,var_b"b'24", bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"), bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'20"), bop(And,mop(Not,var_b"b'19"), bop(And,mop(Not,var_b"b'18"), bop(And,mop(Not,var_b"b'17"), bop(And, mop(Not,var_b"b'16"), bop(And, mop(Not, var_b"b'15"), bop(And, var_b"b'14", bop(And, mop(Not, var_b"b'13"), bop(And, mop(Not, var_b"b'12"), bop(And, var_b"b'7", bop(And, mop(Not, var_b"b'6"), bop(And, var_b"b'5", bop(And, var_b"b'4", bop(And, var_b"b'3", bop(And, var_b"b'2", bop(And, var_b"b'1", var_b"b'0"))))))))))))))))))))))))))), call ("instruction.System",@{typ instruction}, call ("System.MoveImmediateProcState",@{typ System}, tp[lc("PSTATEField_SP","PSTATEField",@{theory}), mop(Cast w4,ll[var_b"b'11",var_b"b'10",var_b"b'9",var_b"b'8"])],@{theory}), @{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,mop(Not,var_b"b'25"), bop(And,var_b"b'24", bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"), bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'20"), bop(And,mop(Not,var_b"b'19"), bop(And,mop(Not,var_b"b'18"), bop(And,var_b"b'17", bop(And,var_b"b'16", bop(And, mop(Not, var_b"b'15"), bop(And, var_b"b'14", bop(And, mop(Not, var_b"b'13"), bop(And, mop(Not, var_b"b'12"), bop(And, var_b"b'7", bop(And, var_b"b'6", bop(And, mop(Not, var_b"b'5"), bop(And, var_b"b'4", bop(And, var_b"b'3", bop(And, var_b"b'2", bop(And, var_b"b'1", var_b"b'0"))))))))))))))))))))))))))), call ("instruction.System",@{typ instruction}, call ("System.MoveImmediateProcState",@{typ System}, tp[lc("PSTATEField_DAIFSet","PSTATEField",@{theory}), mop(Cast w4,ll[var_b"b'11",var_b"b'10",var_b"b'9",var_b"b'8"])],@{theory}), @{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,mop(Not,var_b"b'25"), bop(And,var_b"b'24", bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"), bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'20"), bop(And,mop(Not,var_b"b'19"), bop(And,mop(Not,var_b"b'18"), bop(And,var_b"b'17", bop(And,var_b"b'16", bop(And, mop(Not, var_b"b'15"), bop(And, var_b"b'14", bop(And, mop(Not, var_b"b'13"), bop(And, mop(Not, var_b"b'12"), bop(And, var_b"b'7", bop(And, var_b"b'6", bop(And, var_b"b'5", bop(And, var_b"b'4", bop(And, var_b"b'3", bop(And, var_b"b'2", bop(And, var_b"b'1", var_b"b'0"))))))))))))))))))))))))))), call ("instruction.System",@{typ instruction}, call ("System.MoveImmediateProcState",@{typ System}, tp[lc("PSTATEField_DAIFClr","PSTATEField",@{theory}), mop(Cast w4,ll[var_b"b'11",var_b"b'10",var_b"b'9",var_b"b'8"])],@{theory}), @{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,mop(Not,var_b"b'25"), bop(And,var_b"b'24", bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"), bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'20"), bop(And,mop(Not,var_b"b'19"), bop(And,mop(Not,var_b"b'18"), bop(And,var_b"b'17", bop(And,var_b"b'16", bop(And, mop(Not, var_b"b'15"), bop(And, mop(Not, var_b"b'14"), bop(And, var_b"b'13", bop(And, var_b"b'12", bop(And, var_b"b'7", bop(And, var_b"b'6", bop(And, var_b"b'5", bop(And, var_b"b'4", bop(And, var_b"b'3", bop(And, var_b"b'2", bop(And, var_b"b'1", var_b"b'0"))))))))))))))))))))))))))), Term.Const(@{const_name "Unallocated"},@{typ instruction})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,mop(Not,var_b"b'25"), bop(And,var_b"b'24", bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"), bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'20"), bop(And,mop(Not,var_b"b'19"), bop(And,mop(Not,var_b"b'18"), bop(And,var_b"b'17", bop(And,var_b"b'16", bop(And, mop(Not, var_b"b'15"), bop(And, mop(Not, var_b"b'14"), bop(And, var_b"b'13", bop(And, var_b"b'12", bop(And, var_b"b'7", bop(And, var_b"b'4", bop(And, var_b"b'3", bop(And, var_b"b'2", bop(And, var_b"b'1", var_b"b'0"))))))))))))))))))))))))), call ("instruction.MemoryBarrier",@{typ instruction}, tp[mop(Cast @{typ MemBarrierOp}, mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'6",var_b"b'5"])), mop(Cast w4,ll[var_b"b'11",var_b"b'10",var_b"b'9",var_b"b'8"])],@{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,mop(Not,var_b"b'25"), bop(And,mop(Not,var_b"b'24"), bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"), bop(And,var_b"b'21", bop(And,mop(Not,var_b"b'4"), bop(And,mop(Not,var_b"b'3"), bop(And,mop(Not,var_b"b'2"), bop(And,mop(Not,var_b"b'1"), mop(Not,var_b"b'0")))))))))))))))), call ("instruction.Debug",@{typ instruction}, call ("Debug.Breakpoint",@{typ Debug}, mop(Cast w16, ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16",var_b"b'15", var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11",var_b"b'10",var_b"b'9", var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]),@{theory}),@{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,mop(Not,var_b"b'25"), bop(And,var_b"b'24", bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"), bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'20"), bop(And,mop(Not,var_b"b'19"), bop(And,mop(Not,var_b"b'18"), bop(And,var_b"b'17", bop(And,var_b"b'16", bop(And, mop(Not, var_b"b'15"), bop(And, mop(Not, var_b"b'14"), bop(And, var_b"b'13", bop(And, mop(Not, var_b"b'12"), bop(And, var_b"b'4", bop(And, var_b"b'3", bop(And, var_b"b'2", bop(And, var_b"b'1", var_b"b'0")))))))))))))))))))))))), let' (var_w("op2",3), mop(Cast (Word_Lib.mk_wordT 3),ll[var_b"b'7",var_b"b'6",var_b"b'5"]), call ("instruction.Hint",@{typ instruction}, ite(bop(And, eq(mop(Cast w4,ll[var_b"b'11",var_b"b'10",var_b"b'9",var_b"b'8"]), lw(0,4)),bop(Ult,var_w("op2",3),lw(6,3))), mop(Cast @{typ SystemHintOp},var_w("op2",3)), lc("SystemHintOp_NOP","SystemHintOp",@{theory})),@{theory}))), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,mop(Not,var_b"b'25"), bop(And,var_b"b'24", bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"), bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'20"), bop(And,mop(Not,var_b"b'19"), bop(And,mop(Not,var_b"b'18"), bop(And,var_b"b'17", bop(And,var_b"b'16", bop(And, mop(Not, var_b"b'15"), bop(And, mop(Not, var_b"b'14"), bop(And, var_b"b'13", bop(And, var_b"b'12", bop(And, mop(Not, var_b"b'7"), bop(And, var_b"b'6", bop(And, mop(Not, var_b"b'5"), bop(And, var_b"b'4", bop(And, var_b"b'3", bop(And, var_b"b'2", bop(And, var_b"b'1", var_b"b'0"))))))))))))))))))))))))))), call ("instruction.ClearExclusive",@{typ instruction}, mop(Cast w4,ll[var_b"b'11",var_b"b'10",var_b"b'9",var_b"b'8"]),@{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,mop(Not,var_b"b'22"), bop(And,var_b"b'21", bop(And,var_b"b'20", bop(And,var_b"b'19", bop(And,var_b"b'18", bop(And,var_b"b'17", bop(And,var_b"b'16", bop(And, mop(Not, var_b"b'15"), bop(And, mop(Not, var_b"b'14"), bop(And, mop(Not, var_b"b'13"), bop(And, mop(Not, var_b"b'12"), bop(And, mop(Not, var_b"b'11"), bop(And, mop(Not, var_b"b'10"), bop(And, var_b"b'9", bop(And, var_b"b'8", bop(And, var_b"b'7", bop(And, var_b"b'6", bop(And, var_b"b'5", bop(And, mop(Not, var_b"b'4"), bop(And, mop(Not, var_b"b'3"), bop(And, mop(Not, var_b"b'2"), bop(And, mop(Not, var_b"b'1"), mop(Not, var_b"b'0")))))))))))))))))))))))))))))))), call ("instruction.Debug",@{typ instruction}, Term.Const(@{const_name "DebugRestore"},@{typ Debug}),@{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,mop(Not,var_b"b'25"), bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,mop(Not,var_b"b'22"), bop(And,var_b"b'21", bop(And,mop(Not,var_b"b'4"), bop(And,mop(Not,var_b"b'3"), mop(Not,var_b"b'2")))))))))))))), call ("instruction.Debug",@{typ instruction}, call ("Debug.DebugSwitch",@{typ Debug}, mop(Cast (Word_Lib.mk_wordT 2),ll[var_b"b'1",var_b"b'0"]),@{theory}),@{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,mop(Not,var_b"b'25"), bop(And,mop(Not,var_b"b'24"), bop(And,mop(Not,var_b"b'23"), bop(And,var_b"b'22", bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'4"), bop(And,mop(Not,var_b"b'3"), bop(And,mop(Not,var_b"b'2"), bop(And,mop(Not,var_b"b'1"), mop(Not,var_b"b'0")))))))))))))))), call ("instruction.Debug",@{typ instruction}, call ("Debug.Halt",@{typ Debug}, mop(Cast w16, ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16",var_b"b'15", var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11",var_b"b'10",var_b"b'9", var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]),@{theory}),@{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,var_b"b'25", bop(And,mop(Not,var_b"b'24"), bop(And,var_b"b'23", bop(And,mop(Not,var_b"b'22"), bop(And,mop(Not,var_b"b'21"), bop(And,var_b"b'20", bop(And,var_b"b'19", bop(And,var_b"b'18", bop(And,var_b"b'17", bop(And,var_b"b'16", bop(And, mop(Not, var_b"b'15"), bop(And, mop(Not, var_b"b'14"), bop(And, mop(Not, var_b"b'13"), bop(And, mop(Not, var_b"b'12"), bop(And, mop(Not, var_b"b'11"), bop(And, mop(Not, var_b"b'10"), bop(And, var_b"b'9", bop(And, var_b"b'8", bop(And, var_b"b'7", bop(And, var_b"b'6", bop(And, var_b"b'5", bop(And, mop(Not, var_b"b'4"), bop(And, mop(Not, var_b"b'3"), bop(And, mop(Not, var_b"b'2"), bop(And, mop(Not, var_b"b'1"), mop(Not, var_b"b'0")))))))))))))))))))))))))))))))), call ("instruction.System",@{typ instruction}, Term.Const(@{const_name "ExceptionReturn"},@{typ System}),@{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,mop(Not,var_b"b'25"), bop(And,mop(Not,var_b"b'24"), bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"), bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'4"), bop(And,mop(Not,var_b"b'3"), bop(And,mop(Not,var_b"b'2"), bop(And,mop(Not,var_b"b'1"), var_b"b'0"))))))))))))))), call ("instruction.System",@{typ instruction}, call ("System.SupervisorCall",@{typ System}, mop(Cast w16, ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16",var_b"b'15", var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11",var_b"b'10",var_b"b'9", var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]),@{theory}),@{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,mop(Not,var_b"b'25"), bop(And,mop(Not,var_b"b'24"), bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"), bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'4"), bop(And,mop(Not,var_b"b'3"), bop(And,mop(Not,var_b"b'2"), bop(And,var_b"b'1", mop(Not,var_b"b'0")))))))))))))))), call ("instruction.System",@{typ instruction}, call ("System.HypervisorCall",@{typ System}, mop(Cast w16, ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16",var_b"b'15", var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11",var_b"b'10",var_b"b'9", var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]),@{theory}),@{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,mop(Not,var_b"b'25"), bop(And,mop(Not,var_b"b'24"), bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"), bop(And,mop(Not,var_b"b'21"), bop(And,mop(Not,var_b"b'4"), bop(And,mop(Not,var_b"b'3"), bop(And,mop(Not,var_b"b'2"), bop(And,var_b"b'1",var_b"b'0"))))))))))))))), call ("instruction.System",@{typ instruction}, call ("System.SecureMonitorCall",@{typ System}, mop(Cast w16, ll[var_b"b'20",var_b"b'19",var_b"b'18",var_b"b'17",var_b"b'16",var_b"b'15", var_b"b'14",var_b"b'13",var_b"b'12",var_b"b'11",var_b"b'10",var_b"b'9", var_b"b'8",var_b"b'7",var_b"b'6",var_b"b'5"]),@{theory}),@{theory})), (bop(And,var_b"b'31", bop(And,var_b"b'30", bop(And,mop(Not,var_b"b'29"), bop(And,var_b"b'28", bop(And,mop(Not,var_b"b'27"), bop(And,var_b"b'26", bop(And,mop(Not,var_b"b'25"), bop(And,var_b"b'24", bop(And,mop(Not,var_b"b'23"), bop(And,mop(Not,var_b"b'22"), bop(And,mop(Not,var_b"b'20"),var_b"b'19"))))))))))), call ("instruction.System",@{typ instruction}, call ("System.SystemInstruction",@{typ System}, tp[mop(Cast (Word_Lib.mk_wordT 3),ll[var_b"b'18",var_b"b'17",var_b"b'16"]), mop(Cast (Word_Lib.mk_wordT 3),ll[var_b"b'7",var_b"b'6",var_b"b'5"]), mop(Cast w4,ll[var_b"b'15",var_b"b'14",var_b"b'13",var_b"b'12"]), mop(Cast w4,ll[var_b"b'11",var_b"b'10",var_b"b'9",var_b"b'8"]), mop(Cast HOLogic.boolT,mop(Cast w1,ll[var_b"b'21"])), mop(Cast (Word_Lib.mk_wordT 5), ll[var_b"b'4",var_b"b'3",var_b"b'2",var_b"b'1",var_b"b'0"])],@{theory}), @{theory}))],Term.Const(@{const_name "Unallocated"},@{typ instruction}))))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("Fetch", close (var("state",qTy), apply (call ("Mem",@{typ "state \ (32 word \ state)"}, tp[call("state.PC",w64,var("state",qTy),@{theory}),ln 4, lc("AccType_IFETCH","AccType",@{theory})],@{theory}),var("state",qTy)))) end \ ML \ local open L3 val qTy = @{typ state} in val () = def ("Next", close (var("state",qTy), let' (tp[var_w("v",32),var("s",qTy)], apply (const("Fetch",@{typ "state \ (32 word \ state)"},@{theory}), rupd("state.branch_hint",tp[var("state",qTy),lo @{typ BranchType}],@{theory})), let' (var("s",qTy), apply (call ("Run",@{typ "state \ state"}, call("Decode",@{typ instruction},var_w("v",32),@{theory}),@{theory}),var("s",qTy)), ite(mop(Not, mop(IsSome, call("state.branch_hint",@{typ "BranchType option"},var("s",qTy),@{theory}))), rupd ("state.PC", tp[var("s",qTy),bop(Add,call("state.PC",w64,var("s",qTy),@{theory}),lw(4,64))], @{theory}),var("s",qTy)))))) end \ termination ByteList by lexicographic_order termination Poly32Mod2_loop by lexicographic_order end