1(* armScript.sml - generated by L3 - Wed Jan 31 16:14:43 2018 *)
2open HolKernel boolLib bossLib Import
3
4val () = Import.start "arm"
5
6val () = ieee_underflow_before := true
7
8val _ = Construct
9  [("Architecture",
10    [("ARMv4",[]),("ARMv4T",[]),("ARMv5T",[]),("ARMv5TE",[]),("ARMv6",[]),
11     ("ARMv6K",[]),("ARMv6T2",[]),("ARMv7_A",[]),("ARMv7_R",[])])]
12;
13val _ = Construct
14  [("Extensions",
15    [("Extension_ThumbEE",[]),("Extension_Security",[]),
16     ("Extension_Multiprocessing",[]),("Extension_Virtualization",[]),
17     ("Extension_AdvanvedSIMD",[])])]
18;
19val _ = Record
20  ("PSR",
21   [("A",bTy),("C",bTy),("E",bTy),("F",bTy),("GE",F4),("I",bTy),("IT",F8),
22    ("J",bTy),("M",FTy 5),("N",bTy),("Q",bTy),("T",bTy),("V",bTy),
23    ("Z",bTy),("psr'rst",F4)])
24;
25val _ = Record ("CP14",[("TEEHBR",F32)])
26;
27val _ = Record
28  ("SCTLR",
29   [("A",bTy),("B",bTy),("BR",bTy),("C",bTy),("DZ",bTy),("EE",bTy),
30    ("FI",bTy),("I",bTy),("IE",bTy),("M",bTy),("NMFI",bTy),("RR",bTy),
31    ("SW",bTy),("TE",bTy),("U",bTy),("V",bTy),("VE",bTy),("Z",bTy),
32    ("sctlr'rst",FTy 14)])
33;
34val _ = Record
35  ("HSCTLR",
36   [("A",bTy),("C",bTy),("CP15BEN",bTy),("EE",bTy),("FI",bTy),("I",bTy),
37    ("M",bTy),("TE",bTy),("WXN",bTy),("hsctlr'rst",FTy 23)])
38;
39val _ = Record ("HSR",[("EC",FTy 6),("IL",bTy),("ISS",FTy 25)])
40;
41val _ = Record
42  ("SCR",
43   [("AW",bTy),("EA",bTy),("FIQ",bTy),("FW",bTy),("HCE",bTy),("IRQ",bTy),
44    ("NS",bTy),("SCD",bTy),("SIF",bTy),("nET",bTy),("scr'rst",FTy 22)])
45;
46val _ = Record
47  ("NSACR",
48   [("NSASEDIS",bTy),("NSD32DIS",bTy),("NSTRCDIS",bTy),("RFR",bTy),
49    ("cp",FTy 14),("nsacr'rst",FTy 14)])
50;
51val _ = Record
52  ("HCR",
53   [("AMO",bTy),("BSU",FTy 2),("DC",bTy),("FB",bTy),("FMO",bTy),
54    ("IMO",bTy),("PTW",bTy),("SWIO",bTy),("TAC",bTy),("TGE",bTy),
55    ("TID",F4),("TIDCP",bTy),("TPC",bTy),("TPU",bTy),("TSC",bTy),
56    ("TSW",bTy),("TTLB",bTy),("TVM",bTy),("TWE",bTy),("TWI",bTy),
57    ("VA",bTy),("VF",bTy),("VI",bTy),("VM",bTy),("hcr'rst",F4)])
58;
59val _ = Record
60  ("CP15",
61   [("HCR",CTy"HCR"),("HSCTLR",CTy"HSCTLR"),("HSR",CTy"HSR"),
62    ("MVBAR",F32),("NSACR",CTy"NSACR"),("SCR",CTy"SCR"),
63    ("SCTLR",CTy"SCTLR"),("VBAR",F32)])
64;
65val _ = Construct
66  [("InstrSet",
67    [("InstrSet_ARM",[]),("InstrSet_Thumb",[]),("InstrSet_Jazelle",[]),
68     ("InstrSet_ThumbEE",[])])]
69;
70val _ = Construct
71  [("Encoding",
72    [("Encoding_Thumb",[]),("Encoding_Thumb2",[]),("Encoding_ARM",[])])]
73;
74val _ = Construct
75  [("RName",
76    [("RName_0usr",[]),("RName_1usr",[]),("RName_2usr",[]),
77     ("RName_3usr",[]),("RName_4usr",[]),("RName_5usr",[]),
78     ("RName_6usr",[]),("RName_7usr",[]),("RName_8usr",[]),
79     ("RName_8fiq",[]),("RName_9usr",[]),("RName_9fiq",[]),
80     ("RName_10usr",[]),("RName_10fiq",[]),("RName_11usr",[]),
81     ("RName_11fiq",[]),("RName_12usr",[]),("RName_12fiq",[]),
82     ("RName_SPusr",[]),("RName_SPfiq",[]),("RName_SPirq",[]),
83     ("RName_SPsvc",[]),("RName_SPabt",[]),("RName_SPund",[]),
84     ("RName_SPmon",[]),("RName_SPhyp",[]),("RName_LRusr",[]),
85     ("RName_LRfiq",[]),("RName_LRirq",[]),("RName_LRsvc",[]),
86     ("RName_LRabt",[]),("RName_LRund",[]),("RName_LRmon",[]),
87     ("RName_PC",[])])]
88;
89val _ = Construct
90  [("SRType",
91    [("SRType_LSL",[]),("SRType_LSR",[]),("SRType_ASR",[]),
92     ("SRType_ROR",[]),("SRType_RRX",[])])]
93;
94val _ = Construct
95  [("VFPExtension",[("NoVFP",[]),("VFPv2",[]),("VFPv3",[]),("VFPv4",[])])]
96;
97val _ = Record
98  ("FPSCR",
99   [("AHP",bTy),("C",bTy),("DN",bTy),("DZC",bTy),("DZE",bTy),("FZ",bTy),
100    ("IDC",bTy),("IDE",bTy),("IOC",bTy),("IOE",bTy),("IXC",bTy),
101    ("IXE",bTy),("N",bTy),("OFC",bTy),("OFE",bTy),("QC",bTy),
102    ("RMode",FTy 2),("UFC",bTy),("UFE",bTy),("V",bTy),("Z",bTy),
103    ("fpscr'rst",FTy 10)])
104;
105val _ = Record ("FP",[("FPSCR",CTy"FPSCR"),("REG",ATy(FTy 5,F64))])
106;
107val _ = Construct
108  [("VFPNegMul",
109    [("VFPNegMul_VNMLA",[]),("VFPNegMul_VNMLS",[]),("VFPNegMul_VNMUL",[])])]
110;
111val _ = Construct
112  [("offset1",
113    [("immediate_form1",[F32]),
114     ("register_form1",[PTy(F4,PTy(CTy"SRType",nTy))])])]
115;
116val _ = Construct
117  [("offset2",[("immediate_form2",[F32]),("register_form2",[F4])])]
118;
119val _ = Construct
120  [("Hint",
121    [("Breakpoint",[F32]),("DataMemoryBarrier",[F4]),
122     ("DataSynchronizationBarrier",[F4]),("Debug",[F4]),
123     ("InstructionSynchronizationBarrier",[F4]),
124     ("PreloadData",[PTy(bTy,PTy(bTy,PTy(F4,CTy"offset1")))]),
125     ("PreloadDataLiteral",[PTy(bTy,F32)]),
126     ("PreloadInstruction",[PTy(bTy,PTy(F4,CTy"offset1"))]),
127     ("SendEvent",[]),("WaitForEvent",[]),("WaitForInterrupt",[]),
128     ("Yield",[])])]
129;
130val _ = Construct
131  [("System",
132    [("ChangeProcessorState",
133      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(bTy,PTy(bTy,OTy(FTy 5))))))]),
134     ("EnterxLeavex",[bTy]),("ExceptionReturn",[]),
135     ("HypervisorCall",[F16]),
136     ("MoveToBankedOrSpecialRegister",[PTy(bTy,PTy(FTy 5,F4))]),
137     ("MoveToRegisterFromBankedOrSpecial",[PTy(bTy,PTy(FTy 5,F4))]),
138     ("MoveToRegisterFromSpecial",[PTy(bTy,F4)]),
139     ("MoveToSpecialFromImmediate",[PTy(bTy,PTy(F32,F4))]),
140     ("MoveToSpecialFromRegister",[PTy(bTy,PTy(F4,F4))]),
141     ("ReturnFromException",[PTy(bTy,PTy(bTy,PTy(bTy,F4)))]),
142     ("SecureMonitorCall",[F4]),("Setend",[bTy]),
143     ("StoreReturnState",[PTy(bTy,PTy(bTy,PTy(bTy,FTy 5)))]),
144     ("SupervisorCall",[F32])])]
145;
146val _ = Construct
147  [("Store",
148    [("StoreByte",
149      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))]),
150     ("StoreByteUnprivileged",
151      [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))]),
152     ("StoreDual",
153      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,CTy"offset2"))))))]),
154     ("StoreExclusive",[PTy(F4,PTy(F4,PTy(F4,F32)))]),
155     ("StoreExclusiveByte",[PTy(F4,PTy(F4,F4))]),
156     ("StoreExclusiveDoubleword",[PTy(F4,PTy(F4,PTy(F4,F4)))]),
157     ("StoreExclusiveHalf",[PTy(F4,PTy(F4,F4))]),
158     ("StoreHalf",
159      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))]),
160     ("StoreHalfUnprivileged",
161      [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2"))))]),
162     ("StoreMultiple",[PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,F16))))]),
163     ("StoreMultipleUserRegisters",[PTy(bTy,PTy(bTy,PTy(F4,F16)))]),
164     ("StoreUnprivileged",[PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))]),
165     ("StoreWord",
166      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))])])]
167;
168val _ = Construct
169  [("Load",
170    [("LoadByte",
171      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))]),
172     ("LoadByteLiteral",[PTy(bTy,PTy(bTy,PTy(F4,F32)))]),
173     ("LoadByteUnprivileged",
174      [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))]),
175     ("LoadDual",
176      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,CTy"offset2"))))))]),
177     ("LoadDualLiteral",[PTy(bTy,PTy(F4,PTy(F4,F32)))]),
178     ("LoadExclusive",[PTy(F4,PTy(F4,F32))]),
179     ("LoadExclusiveByte",[PTy(F4,F4)]),
180     ("LoadExclusiveDoubleword",[PTy(F4,PTy(F4,F4))]),
181     ("LoadExclusiveHalf",[PTy(F4,F4)]),
182     ("LoadHalf",
183      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))]),
184     ("LoadHalfLiteral",[PTy(bTy,PTy(bTy,PTy(F4,F32)))]),
185     ("LoadHalfUnprivileged",
186      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2")))))]),
187     ("LoadLiteral",[PTy(bTy,PTy(F4,F32))]),
188     ("LoadMultiple",[PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,F16))))]),
189     ("LoadMultipleExceptionReturn",
190      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,FTy 15))))]),
191     ("LoadMultipleUserRegisters",[PTy(bTy,PTy(bTy,PTy(F4,FTy 15)))]),
192     ("LoadSignedByteUnprivileged",
193      [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2"))))]),
194     ("LoadUnprivileged",[PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))]),
195     ("LoadWord",[PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))])])]
196;
197val _ = Construct
198  [("Media",
199    [("BitFieldClearOrInsert",[PTy(F4,PTy(F4,PTy(nTy,nTy)))]),
200     ("BitFieldExtract",[PTy(bTy,PTy(F4,PTy(F4,PTy(nTy,nTy))))]),
201     ("ByteReverse",[PTy(F4,F4)]),
202     ("ByteReversePackedHalfword",[PTy(F4,F4)]),
203     ("ByteReverseSignedHalfword",[PTy(F4,F4)]),
204     ("ExtendByte",[PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy))))]),
205     ("ExtendByte16",[PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy))))]),
206     ("ExtendHalfword",[PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy))))]),
207     ("PackHalfword",
208      [PTy(CTy"SRType",PTy(nTy,PTy(bTy,PTy(F4,PTy(F4,F4)))))]),
209     ("ReverseBits",[PTy(F4,F4)]),
210     ("Saturate",[PTy(CTy"SRType",PTy(nTy,PTy(nTy,PTy(bTy,PTy(F4,F4)))))]),
211     ("Saturate16",[PTy(nTy,PTy(bTy,PTy(F4,F4)))]),
212     ("SaturatingAddSubtract",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]),
213     ("SelectBytes",[PTy(F4,PTy(F4,F4))])])]
214;
215val _ = Construct
216  [("SIMD",
217    [("SignedAddSub16",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]),
218     ("SignedAddSub8",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),
219     ("SignedHalvingAddSub16",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]),
220     ("SignedHalvingAddSub8",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),
221     ("SignedSaturatingAddSub16",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]),
222     ("SignedSaturatingAddSub8",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),
223     ("UnsignedAddSub16",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]),
224     ("UnsignedAddSub8",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),
225     ("UnsignedHalvingAddSub16",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]),
226     ("UnsignedHalvingAddSub8",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),
227     ("UnsignedSaturatingAddSub16",[PTy(FTy 2,PTy(F4,PTy(F4,F4)))]),
228     ("UnsignedSaturatingAddSub8",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),
229     ("UnsignedSumAbsoluteDifferences",[PTy(F4,PTy(F4,PTy(F4,F4)))])])]
230;
231val _ = Construct
232  [("Multiply",
233    [("Multiply32",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),
234     ("MultiplyAccumulate",[PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))]),
235     ("MultiplyAccumulateAccumulate",[PTy(F4,PTy(F4,PTy(F4,F4)))]),
236     ("MultiplyLong",
237      [PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))]),
238     ("MultiplySubtract",[PTy(F4,PTy(F4,PTy(F4,F4)))]),
239     ("Signed16Multiply32Accumulate",
240      [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))]),
241     ("Signed16Multiply32Result",[PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,F4))))]),
242     ("Signed16Multiply64Accumulate",
243      [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))]),
244     ("Signed16x32Multiply32Accumulate",
245      [PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))]),
246     ("Signed16x32Multiply32Result",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),
247     ("SignedMostSignificantMultiply",
248      [PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))]),
249     ("SignedMostSignificantMultiplySubtract",
250      [PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))]),
251     ("SignedMultiplyDual",[PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))]),
252     ("SignedMultiplyLongDual",
253      [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))])])]
254;
255val _ = Construct
256  [("Data",
257    [("AddSub",[PTy(bTy,PTy(F4,PTy(F4,FTy 12)))]),
258     ("ArithLogicImmediate",[PTy(F4,PTy(bTy,PTy(F4,PTy(F4,FTy 12))))]),
259     ("CountLeadingZeroes",[PTy(F4,F4)]),
260     ("Move",[PTy(bTy,PTy(bTy,PTy(F4,FTy 12)))]),
261     ("MoveHalfword",[PTy(bTy,PTy(F4,F16))]),
262     ("Register",
263      [PTy(F4,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy))))))]),
264     ("RegisterShiftedRegister",
265      [PTy(F4,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,PTy(CTy"SRType",F4))))))]),
266     ("ShiftImmediate",
267      [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy)))))]),
268     ("ShiftRegister",
269      [PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(CTy"SRType",F4)))))]),
270     ("TestCompareImmediate",[PTy(FTy 2,PTy(F4,FTy 12))]),
271     ("TestCompareRegister",
272      [PTy(FTy 2,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy))))])])]
273;
274val _ = Construct
275  [("Branch",
276    [("BranchExchange",[F4]),
277     ("BranchLinkExchangeImmediate",[PTy(CTy"InstrSet",F32)]),
278     ("BranchLinkExchangeRegister",[F4]),("BranchTarget",[F32]),
279     ("CheckArray",[PTy(F4,F4)]),("CompareBranch",[PTy(bTy,PTy(F4,F32))]),
280     ("HandlerBranchLink",[PTy(bTy,F32)]),
281     ("HandlerBranchLinkParameter",[PTy(F32,F32)]),
282     ("HandlerBranchParameter",[PTy(F32,F32)]),
283     ("TableBranchByte",[PTy(bTy,PTy(F4,F4))])])]
284;
285val _ = Construct
286  [("VFP",
287    [("vabs",[PTy(bTy,PTy(FTy 5,FTy 5))]),
288     ("vadd",[PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))]),
289     ("vcmp",[PTy(bTy,PTy(FTy 5,OTy(FTy 5)))]),
290     ("vcvt_float",[PTy(bTy,PTy(FTy 5,FTy 5))]),
291     ("vcvt_from_integer",[PTy(bTy,PTy(bTy,PTy(FTy 5,FTy 5)))]),
292     ("vcvt_to_integer",[PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,FTy 5))))]),
293     ("vdiv",[PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))]),
294     ("vfma_vfms",[PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
295     ("vfnma_vfnms",[PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
296     ("vldm",[PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F8)))))]),
297     ("vldr",[PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F32))))]),
298     ("vmla_vmls",[PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
299     ("vmov",[PTy(bTy,PTy(FTy 5,FTy 5))]),
300     ("vmov_double",[PTy(bTy,PTy(F4,PTy(F4,FTy 5)))]),
301     ("vmov_imm",[PTy(bTy,PTy(FTy 5,F64))]),
302     ("vmov_single",[PTy(bTy,PTy(F4,FTy 5))]),
303     ("vmov_two_singles",[PTy(bTy,PTy(F4,PTy(F4,FTy 5)))]),("vmrs",[F4]),
304     ("vmsr",[F4]),("vmul",[PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))]),
305     ("vneg",[PTy(bTy,PTy(FTy 5,FTy 5))]),
306     ("vneg_mul",
307      [PTy(bTy,PTy(CTy"VFPNegMul",PTy(FTy 5,PTy(FTy 5,FTy 5))))]),
308     ("vsqrt",[PTy(bTy,PTy(FTy 5,FTy 5))]),
309     ("vstm",[PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F8)))))]),
310     ("vstr",[PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F32))))]),
311     ("vsub",[PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))])])]
312;
313val _ = Construct
314  [("instruction",
315    [("Branch",[CTy"Branch"]),("ClearExclusive",[]),("Data",[CTy"Data"]),
316     ("Divide",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),("Hint",[CTy"Hint"]),
317     ("IfThen",[PTy(F4,F4)]),("Load",[CTy"Load"]),("Media",[CTy"Media"]),
318     ("Multiply",[CTy"Multiply"]),("NoOperation",[]),("SIMD",[CTy"SIMD"]),
319     ("Store",[CTy"Store"]),("Swap",[PTy(bTy,PTy(F4,PTy(F4,F4)))]),
320     ("System",[CTy"System"]),("Undefined",[F32]),("VFP",[CTy"VFP"])])]
321;
322val _ = Construct
323  [("MachineCode",
324    [("ARM",[F32]),("BadCode",[sTy]),("Thumb",[F16]),
325     ("Thumb2",[PTy(F16,F16)]),("ThumbEE",[F16])])]
326;
327val _ = Construct
328  [("exception",
329    [("ASSERT",[sTy]),("AlignmentFault",[F32]),
330     ("IMPLEMENTATION_DEFINED",[sTy]),("NoException",[]),
331     ("UNPREDICTABLE",[sTy]),("VFP_EXCEPTION",[sTy])])]
332;
333val _ = Record
334  ("arm_state",
335   [("Architecture",CTy"Architecture"),("CP14",CTy"CP14"),
336    ("CP15",CTy"CP15"),("CPSR",CTy"PSR"),("CurrentCondition",F4),
337    ("ELR_hyp",F32),("Encoding",CTy"Encoding"),
338    ("Extensions",STy(CTy"Extensions")),("FP",CTy"FP"),
339    ("MEM",ATy(F32,F8)),("REG",ATy(CTy"RName",F32)),("SPSR_abt",CTy"PSR"),
340    ("SPSR_fiq",CTy"PSR"),("SPSR_hyp",CTy"PSR"),("SPSR_irq",CTy"PSR"),
341    ("SPSR_mon",CTy"PSR"),("SPSR_svc",CTy"PSR"),("SPSR_und",CTy"PSR"),
342    ("VFPExtension",CTy"VFPExtension"),("exception",CTy"exception"),
343    ("undefined",bTy)])
344;
345val qTy = CTy "arm_state";
346fun qVar v = Term.mk_var (v, ParseDatatype.pretypeToType qTy);
347val raise'exception_def = Def
348  ("raise'exception",Var("e",CTy"exception"),
349   Close
350     (qVar"state",
351      TP[LX(VTy"a"),
352         ITE(EQ(Dest("exception",CTy"exception",qVar"state"),
353                Const("NoException",CTy"exception")),
354             Rupd("exception",TP[qVar"state",Var("e",CTy"exception")]),
355             qVar"state")]))
356;
357val ArchVersion_def = Def
358  ("ArchVersion",AVar uTy,
359   Close
360     (qVar"state",
361      CS(Dest("Architecture",CTy"Architecture",qVar"state"),
362         [(LC("ARMv4",CTy"Architecture"),LN 4),
363          (LC("ARMv4T",CTy"Architecture"),LN 4),
364          (LC("ARMv5T",CTy"Architecture"),LN 5),
365          (LC("ARMv5TE",CTy"Architecture"),LN 5),
366          (LC("ARMv6",CTy"Architecture"),LN 6),
367          (LC("ARMv6K",CTy"Architecture"),LN 6),
368          (LC("ARMv6T2",CTy"Architecture"),LN 6),
369          (LC("ARMv7_A",CTy"Architecture"),LN 7),
370          (LC("ARMv7_R",CTy"Architecture"),LN 7)])))
371;
372val HaveDSPSupport_def = Def
373  ("HaveDSPSupport",AVar uTy,
374   Close
375     (qVar"state",
376      Mop(Not,
377          Bop(In,Dest("Architecture",CTy"Architecture",qVar"state"),
378              SL[LC("ARMv4",CTy"Architecture"),
379                 LC("ARMv4T",CTy"Architecture"),
380                 LC("ARMv5T",CTy"Architecture")]))))
381;
382val HaveThumb2_def = Def
383  ("HaveThumb2",AVar uTy,
384   Close
385     (qVar"state",
386      Bop(In,Dest("Architecture",CTy"Architecture",qVar"state"),
387          SL[LC("ARMv6T2",CTy"Architecture"),
388             LC("ARMv7_A",CTy"Architecture"),
389             LC("ARMv7_R",CTy"Architecture")])))
390;
391val HaveThumbEE_def = Def
392  ("HaveThumbEE",AVar uTy,
393   Close
394     (qVar"state",
395      Bop(Or,
396          EQ(Dest("Architecture",CTy"Architecture",qVar"state"),
397             LC("ARMv7_A",CTy"Architecture")),
398          Bop(And,
399              EQ(Dest("Architecture",CTy"Architecture",qVar"state"),
400                 LC("ARMv7_R",CTy"Architecture")),
401              Bop(In,LC("Extension_ThumbEE",CTy"Extensions"),
402                  Dest("Extensions",STy(CTy"Extensions"),qVar"state"))))))
403;
404val HaveMPExt_def = Def
405  ("HaveMPExt",AVar uTy,
406   Close
407     (qVar"state",
408      Bop(And,
409          Bop(Ge,Apply(Call("ArchVersion",ATy(qTy,nTy),LU),qVar"state"),
410              LN 7),
411          Bop(In,LC("Extension_Multiprocessing",CTy"Extensions"),
412              Dest("Extensions",STy(CTy"Extensions"),qVar"state")))))
413;
414val HaveSecurityExt_def = Def
415  ("HaveSecurityExt",AVar uTy,
416   Close
417     (qVar"state",
418      Bop(And,
419          Bop(In,Dest("Architecture",CTy"Architecture",qVar"state"),
420              SL[LC("ARMv6K",CTy"Architecture"),
421                 LC("ARMv7_A",CTy"Architecture")]),
422          Bop(In,LC("Extension_Security",CTy"Extensions"),
423              Dest("Extensions",STy(CTy"Extensions"),qVar"state")))))
424;
425val HaveVirtExt_def = Def
426  ("HaveVirtExt",AVar uTy,
427   Close
428     (qVar"state",
429      Bop(And,
430          Bop(Ge,Apply(Call("ArchVersion",ATy(qTy,nTy),LU),qVar"state"),
431              LN 7),
432          Bop(In,LC("Extension_Virtualization",CTy"Extensions"),
433              Dest("Extensions",STy(CTy"Extensions"),qVar"state")))))
434;
435val rec'PSR_def = Def
436  ("rec'PSR",Var("x",F32),
437   Rec(CTy"PSR",
438       [Bop(Bit,Var("x",F32),LN 8),Bop(Bit,Var("x",F32),LN 29),
439        Bop(Bit,Var("x",F32),LN 9),Bop(Bit,Var("x",F32),LN 6),
440        EX(Var("x",F32),LN 19,LN 16,F4),Bop(Bit,Var("x",F32),LN 7),
441        CC[EX(Var("x",F32),LN 15,LN 10,FTy 6),
442           EX(Var("x",F32),LN 26,LN 25,FTy 2)],
443        Bop(Bit,Var("x",F32),LN 24),EX(Var("x",F32),LN 4,LN 0,FTy 5),
444        Bop(Bit,Var("x",F32),LN 31),Bop(Bit,Var("x",F32),LN 27),
445        Bop(Bit,Var("x",F32),LN 5),Bop(Bit,Var("x",F32),LN 28),
446        Bop(Bit,Var("x",F32),LN 30),EX(Var("x",F32),LN 23,LN 20,F4)]))
447;
448val reg'PSR_def = Def
449  ("reg'PSR",Var("x",CTy"PSR"),
450   CS(Var("x",CTy"PSR"),
451      [(Rec(CTy"PSR",
452            [bVar"A",bVar"C",bVar"E",bVar"F",Var("GE",F4),bVar"I",
453             Var("IT",F8),bVar"J",Var("M",FTy 5),bVar"N",bVar"Q",bVar"T",
454             bVar"V",bVar"Z",Var("psr'rst",F4)]),
455        CC[Mop(Cast F1,bVar"N"),Mop(Cast F1,bVar"Z"),Mop(Cast F1,bVar"C"),
456           Mop(Cast F1,bVar"V"),Mop(Cast F1,bVar"Q"),
457           EX(Var("IT",F8),LN 1,LN 0,FTy 2),Mop(Cast F1,bVar"J"),
458           Var("psr'rst",F4),Var("GE",F4),
459           EX(Var("IT",F8),LN 7,LN 2,FTy 6),Mop(Cast F1,bVar"E"),
460           Mop(Cast F1,bVar"A"),Mop(Cast F1,bVar"I"),Mop(Cast F1,bVar"F"),
461           Mop(Cast F1,bVar"T"),Var("M",FTy 5)])]))
462;
463val write'rec'PSR_def = Def
464  ("write'rec'PSR",TP[AVar F32,Var("x",CTy"PSR")],
465   Call("reg'PSR",F32,Var("x",CTy"PSR")))
466;
467val write'reg'PSR_def = Def
468  ("write'reg'PSR",TP[AVar(CTy"PSR"),Var("x",F32)],
469   Call("rec'PSR",CTy"PSR",Var("x",F32)))
470;
471val rec'SCTLR_def = Def
472  ("rec'SCTLR",Var("x",F32),
473   Rec(CTy"SCTLR",
474       [Bop(Bit,Var("x",F32),LN 1),Bop(Bit,Var("x",F32),LN 7),
475        Bop(Bit,Var("x",F32),LN 17),Bop(Bit,Var("x",F32),LN 2),
476        Bop(Bit,Var("x",F32),LN 19),Bop(Bit,Var("x",F32),LN 25),
477        Bop(Bit,Var("x",F32),LN 21),Bop(Bit,Var("x",F32),LN 12),
478        Bop(Bit,Var("x",F32),LN 31),Bop(Bit,Var("x",F32),LN 0),
479        Bop(Bit,Var("x",F32),LN 27),Bop(Bit,Var("x",F32),LN 14),
480        Bop(Bit,Var("x",F32),LN 10),Bop(Bit,Var("x",F32),LN 30),
481        Bop(Bit,Var("x",F32),LN 22),Bop(Bit,Var("x",F32),LN 13),
482        Bop(Bit,Var("x",F32),LN 24),Bop(Bit,Var("x",F32),LN 11),
483        CC[EX(Var("x",F32),LN 6,LN 3,F4),EX(Var("x",F32),LN 9,LN 8,FTy 2),
484           EX(Var("x",F32),LN 16,LN 15,FTy 2),
485           EX(Var("x",F32),LN 18,LN 18,F1),
486           EX(Var("x",F32),LN 20,LN 20,F1),
487           EX(Var("x",F32),LN 23,LN 23,F1),
488           EX(Var("x",F32),LN 26,LN 26,F1),
489           EX(Var("x",F32),LN 29,LN 28,FTy 2)]]))
490;
491val reg'SCTLR_def = Def
492  ("reg'SCTLR",Var("x",CTy"SCTLR"),
493   CS(Var("x",CTy"SCTLR"),
494      [(Rec(CTy"SCTLR",
495            [bVar"A",bVar"B",bVar"BR",bVar"C",bVar"DZ",bVar"EE",bVar"FI",
496             bVar"I",bVar"IE",bVar"M",bVar"NMFI",bVar"RR",bVar"SW",
497             bVar"TE",bVar"U",bVar"V",bVar"VE",bVar"Z",
498             Var("sctlr'rst",FTy 14)]),
499        CC[Mop(Cast F1,bVar"IE"),Mop(Cast F1,bVar"TE"),
500           EX(Var("sctlr'rst",FTy 14),LN 1,LN 0,FTy 2),
501           Mop(Cast F1,bVar"NMFI"),
502           EX(Var("sctlr'rst",FTy 14),LN 2,LN 2,F1),Mop(Cast F1,bVar"EE"),
503           Mop(Cast F1,bVar"VE"),EX(Var("sctlr'rst",FTy 14),LN 3,LN 3,F1),
504           Mop(Cast F1,bVar"U"),Mop(Cast F1,bVar"FI"),
505           EX(Var("sctlr'rst",FTy 14),LN 4,LN 4,F1),Mop(Cast F1,bVar"DZ"),
506           EX(Var("sctlr'rst",FTy 14),LN 5,LN 5,F1),Mop(Cast F1,bVar"BR"),
507           EX(Var("sctlr'rst",FTy 14),LN 7,LN 6,FTy 2),
508           Mop(Cast F1,bVar"RR"),Mop(Cast F1,bVar"V"),
509           Mop(Cast F1,bVar"I"),Mop(Cast F1,bVar"Z"),
510           Mop(Cast F1,bVar"SW"),
511           EX(Var("sctlr'rst",FTy 14),LN 9,LN 8,FTy 2),
512           Mop(Cast F1,bVar"B"),
513           EX(Var("sctlr'rst",FTy 14),LN 13,LN 10,F4),
514           Mop(Cast F1,bVar"C"),Mop(Cast F1,bVar"A"),Mop(Cast F1,bVar"M")])]))
515;
516val write'rec'SCTLR_def = Def
517  ("write'rec'SCTLR",TP[AVar F32,Var("x",CTy"SCTLR")],
518   Call("reg'SCTLR",F32,Var("x",CTy"SCTLR")))
519;
520val write'reg'SCTLR_def = Def
521  ("write'reg'SCTLR",TP[AVar(CTy"SCTLR"),Var("x",F32)],
522   Call("rec'SCTLR",CTy"SCTLR",Var("x",F32)))
523;
524val rec'HSCTLR_def = Def
525  ("rec'HSCTLR",Var("x",F32),
526   Rec(CTy"HSCTLR",
527       [Bop(Bit,Var("x",F32),LN 1),Bop(Bit,Var("x",F32),LN 2),
528        Bop(Bit,Var("x",F32),LN 5),Bop(Bit,Var("x",F32),LN 25),
529        Bop(Bit,Var("x",F32),LN 21),Bop(Bit,Var("x",F32),LN 12),
530        Bop(Bit,Var("x",F32),LN 0),Bop(Bit,Var("x",F32),LN 30),
531        Bop(Bit,Var("x",F32),LN 19),
532        CC[EX(Var("x",F32),LN 4,LN 3,FTy 2),
533           EX(Var("x",F32),LN 11,LN 6,FTy 6),
534           EX(Var("x",F32),LN 18,LN 13,FTy 6),
535           EX(Var("x",F32),LN 20,LN 20,F1),
536           EX(Var("x",F32),LN 24,LN 22,FTy 3),
537           EX(Var("x",F32),LN 29,LN 26,F4),EX(Var("x",F32),LN 31,LN 31,F1)]]))
538;
539val reg'HSCTLR_def = Def
540  ("reg'HSCTLR",Var("x",CTy"HSCTLR"),
541   CS(Var("x",CTy"HSCTLR"),
542      [(Rec(CTy"HSCTLR",
543            [bVar"A",bVar"C",bVar"CP15BEN",bVar"EE",bVar"FI",bVar"I",
544             bVar"M",bVar"TE",bVar"WXN",Var("hsctlr'rst",FTy 23)]),
545        CC[EX(Var("hsctlr'rst",FTy 23),LN 0,LN 0,F1),
546           Mop(Cast F1,bVar"TE"),
547           EX(Var("hsctlr'rst",FTy 23),LN 4,LN 1,F4),
548           Mop(Cast F1,bVar"EE"),
549           EX(Var("hsctlr'rst",FTy 23),LN 7,LN 5,FTy 3),
550           Mop(Cast F1,bVar"FI"),
551           EX(Var("hsctlr'rst",FTy 23),LN 8,LN 8,F1),
552           Mop(Cast F1,bVar"WXN"),
553           EX(Var("hsctlr'rst",FTy 23),LN 14,LN 9,FTy 6),
554           Mop(Cast F1,bVar"I"),
555           EX(Var("hsctlr'rst",FTy 23),LN 20,LN 15,FTy 6),
556           Mop(Cast F1,bVar"CP15BEN"),
557           EX(Var("hsctlr'rst",FTy 23),LN 22,LN 21,FTy 2),
558           Mop(Cast F1,bVar"C"),Mop(Cast F1,bVar"A"),Mop(Cast F1,bVar"M")])]))
559;
560val write'rec'HSCTLR_def = Def
561  ("write'rec'HSCTLR",TP[AVar F32,Var("x",CTy"HSCTLR")],
562   Call("reg'HSCTLR",F32,Var("x",CTy"HSCTLR")))
563;
564val write'reg'HSCTLR_def = Def
565  ("write'reg'HSCTLR",TP[AVar(CTy"HSCTLR"),Var("x",F32)],
566   Call("rec'HSCTLR",CTy"HSCTLR",Var("x",F32)))
567;
568val rec'HSR_def = Def
569  ("rec'HSR",Var("x",F32),
570   Rec(CTy"HSR",
571       [EX(Var("x",F32),LN 31,LN 26,FTy 6),Bop(Bit,Var("x",F32),LN 25),
572        EX(Var("x",F32),LN 24,LN 0,FTy 25)]))
573;
574val reg'HSR_def = Def
575  ("reg'HSR",Var("x",CTy"HSR"),
576   CS(Var("x",CTy"HSR"),
577      [(Rec(CTy"HSR",[Var("EC",FTy 6),bVar"IL",Var("ISS",FTy 25)]),
578        CC[Var("EC",FTy 6),Mop(Cast F1,bVar"IL"),Var("ISS",FTy 25)])]))
579;
580val write'rec'HSR_def = Def
581  ("write'rec'HSR",TP[AVar F32,Var("x",CTy"HSR")],
582   Call("reg'HSR",F32,Var("x",CTy"HSR")))
583;
584val write'reg'HSR_def = Def
585  ("write'reg'HSR",TP[AVar(CTy"HSR"),Var("x",F32)],
586   Call("rec'HSR",CTy"HSR",Var("x",F32)))
587;
588val rec'SCR_def = Def
589  ("rec'SCR",Var("x",F32),
590   Rec(CTy"SCR",
591       [Bop(Bit,Var("x",F32),LN 5),Bop(Bit,Var("x",F32),LN 3),
592        Bop(Bit,Var("x",F32),LN 2),Bop(Bit,Var("x",F32),LN 4),
593        Bop(Bit,Var("x",F32),LN 8),Bop(Bit,Var("x",F32),LN 1),
594        Bop(Bit,Var("x",F32),LN 0),Bop(Bit,Var("x",F32),LN 7),
595        Bop(Bit,Var("x",F32),LN 9),Bop(Bit,Var("x",F32),LN 6),
596        EX(Var("x",F32),LN 31,LN 10,FTy 22)]))
597;
598val reg'SCR_def = Def
599  ("reg'SCR",Var("x",CTy"SCR"),
600   CS(Var("x",CTy"SCR"),
601      [(Rec(CTy"SCR",
602            [bVar"AW",bVar"EA",bVar"FIQ",bVar"FW",bVar"HCE",bVar"IRQ",
603             bVar"NS",bVar"SCD",bVar"SIF",bVar"nET",Var("scr'rst",FTy 22)]),
604        CC[Var("scr'rst",FTy 22),Mop(Cast F1,bVar"SIF"),
605           Mop(Cast F1,bVar"HCE"),Mop(Cast F1,bVar"SCD"),
606           Mop(Cast F1,bVar"nET"),Mop(Cast F1,bVar"AW"),
607           Mop(Cast F1,bVar"FW"),Mop(Cast F1,bVar"EA"),
608           Mop(Cast F1,bVar"FIQ"),Mop(Cast F1,bVar"IRQ"),
609           Mop(Cast F1,bVar"NS")])]))
610;
611val write'rec'SCR_def = Def
612  ("write'rec'SCR",TP[AVar F32,Var("x",CTy"SCR")],
613   Call("reg'SCR",F32,Var("x",CTy"SCR")))
614;
615val write'reg'SCR_def = Def
616  ("write'reg'SCR",TP[AVar(CTy"SCR"),Var("x",F32)],
617   Call("rec'SCR",CTy"SCR",Var("x",F32)))
618;
619val rec'NSACR_def = Def
620  ("rec'NSACR",Var("x",F32),
621   Rec(CTy"NSACR",
622       [Bop(Bit,Var("x",F32),LN 15),Bop(Bit,Var("x",F32),LN 14),
623        Bop(Bit,Var("x",F32),LN 20),Bop(Bit,Var("x",F32),LN 19),
624        EX(Var("x",F32),LN 13,LN 0,FTy 14),
625        CC[EX(Var("x",F32),LN 18,LN 16,FTy 3),
626           EX(Var("x",F32),LN 31,LN 21,FTy 11)]]))
627;
628val reg'NSACR_def = Def
629  ("reg'NSACR",Var("x",CTy"NSACR"),
630   CS(Var("x",CTy"NSACR"),
631      [(Rec(CTy"NSACR",
632            [bVar"NSASEDIS",bVar"NSD32DIS",bVar"NSTRCDIS",bVar"RFR",
633             Var("cp",FTy 14),Var("nsacr'rst",FTy 14)]),
634        CC[EX(Var("nsacr'rst",FTy 14),LN 10,LN 0,FTy 11),
635           Mop(Cast F1,bVar"NSTRCDIS"),Mop(Cast F1,bVar"RFR"),
636           EX(Var("nsacr'rst",FTy 14),LN 13,LN 11,FTy 3),
637           Mop(Cast F1,bVar"NSASEDIS"),Mop(Cast F1,bVar"NSD32DIS"),
638           Var("cp",FTy 14)])]))
639;
640val write'rec'NSACR_def = Def
641  ("write'rec'NSACR",TP[AVar F32,Var("x",CTy"NSACR")],
642   Call("reg'NSACR",F32,Var("x",CTy"NSACR")))
643;
644val write'reg'NSACR_def = Def
645  ("write'reg'NSACR",TP[AVar(CTy"NSACR"),Var("x",F32)],
646   Call("rec'NSACR",CTy"NSACR",Var("x",F32)))
647;
648val rec'HCR_def = Def
649  ("rec'HCR",Var("x",F32),
650   Rec(CTy"HCR",
651       [Bop(Bit,Var("x",F32),LN 5),EX(Var("x",F32),LN 11,LN 10,FTy 2),
652        Bop(Bit,Var("x",F32),LN 12),Bop(Bit,Var("x",F32),LN 9),
653        Bop(Bit,Var("x",F32),LN 3),Bop(Bit,Var("x",F32),LN 4),
654        Bop(Bit,Var("x",F32),LN 2),Bop(Bit,Var("x",F32),LN 1),
655        Bop(Bit,Var("x",F32),LN 21),Bop(Bit,Var("x",F32),LN 27),
656        EX(Var("x",F32),LN 18,LN 15,F4),Bop(Bit,Var("x",F32),LN 20),
657        Bop(Bit,Var("x",F32),LN 23),Bop(Bit,Var("x",F32),LN 24),
658        Bop(Bit,Var("x",F32),LN 19),Bop(Bit,Var("x",F32),LN 22),
659        Bop(Bit,Var("x",F32),LN 25),Bop(Bit,Var("x",F32),LN 26),
660        Bop(Bit,Var("x",F32),LN 14),Bop(Bit,Var("x",F32),LN 13),
661        Bop(Bit,Var("x",F32),LN 8),Bop(Bit,Var("x",F32),LN 6),
662        Bop(Bit,Var("x",F32),LN 7),Bop(Bit,Var("x",F32),LN 0),
663        EX(Var("x",F32),LN 31,LN 28,F4)]))
664;
665val reg'HCR_def = Def
666  ("reg'HCR",Var("x",CTy"HCR"),
667   CS(Var("x",CTy"HCR"),
668      [(Rec(CTy"HCR",
669            [bVar"AMO",Var("BSU",FTy 2),bVar"DC",bVar"FB",bVar"FMO",
670             bVar"IMO",bVar"PTW",bVar"SWIO",bVar"TAC",bVar"TGE",
671             Var("TID",F4),bVar"TIDCP",bVar"TPC",bVar"TPU",bVar"TSC",
672             bVar"TSW",bVar"TTLB",bVar"TVM",bVar"TWE",bVar"TWI",bVar"VA",
673             bVar"VF",bVar"VI",bVar"VM",Var("hcr'rst",F4)]),
674        CC[Var("hcr'rst",F4),Mop(Cast F1,bVar"TGE"),
675           Mop(Cast F1,bVar"TVM"),Mop(Cast F1,bVar"TTLB"),
676           Mop(Cast F1,bVar"TPU"),Mop(Cast F1,bVar"TPC"),
677           Mop(Cast F1,bVar"TSW"),Mop(Cast F1,bVar"TAC"),
678           Mop(Cast F1,bVar"TIDCP"),Mop(Cast F1,bVar"TSC"),Var("TID",F4),
679           Mop(Cast F1,bVar"TWE"),Mop(Cast F1,bVar"TWI"),
680           Mop(Cast F1,bVar"DC"),Var("BSU",FTy 2),Mop(Cast F1,bVar"FB"),
681           Mop(Cast F1,bVar"VA"),Mop(Cast F1,bVar"VI"),
682           Mop(Cast F1,bVar"VF"),Mop(Cast F1,bVar"AMO"),
683           Mop(Cast F1,bVar"IMO"),Mop(Cast F1,bVar"FMO"),
684           Mop(Cast F1,bVar"PTW"),Mop(Cast F1,bVar"SWIO"),
685           Mop(Cast F1,bVar"VM")])]))
686;
687val write'rec'HCR_def = Def
688  ("write'rec'HCR",TP[AVar F32,Var("x",CTy"HCR")],
689   Call("reg'HCR",F32,Var("x",CTy"HCR")))
690;
691val write'reg'HCR_def = Def
692  ("write'reg'HCR",TP[AVar(CTy"HCR"),Var("x",F32)],
693   Call("rec'HCR",CTy"HCR",Var("x",F32)))
694;
695val ProcessorID_def = Def ("ProcessorID",AVar uTy,LI 0)
696;
697val IsExternalAbort_def = Def ("IsExternalAbort",AVar uTy,LX bTy)
698;
699val IsSecure_def = Def
700  ("IsSecure",AVar uTy,
701   Close
702     (qVar"state",
703      Bop(Or,
704          Mop(Not,
705              Apply(Call("HaveSecurityExt",ATy(qTy,bTy),LU),qVar"state")),
706          Bop(Or,
707              Mop(Not,
708                  Dest
709                    ("NS",bTy,
710                     Dest
711                       ("SCR",CTy"SCR",Dest("CP15",CTy"CP15",qVar"state")))),
712              EQ(Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state")),
713                 LW(22,5))))))
714;
715val UnalignedSupport_def = Def
716  ("UnalignedSupport",AVar uTy,
717   Close
718     (qVar"state",
719      Let(nVar"v",Apply(Call("ArchVersion",ATy(qTy,nTy),LU),qVar"state"),
720          Bop(Or,Bop(Ge,nVar"v",LN 7),
721              Bop(And,EQ(nVar"v",LN 6),
722                  Dest
723                    ("U",bTy,
724                     Dest
725                       ("SCTLR",CTy"SCTLR",
726                        Dest("CP15",CTy"CP15",qVar"state"))))))))
727;
728val BadMode_def = Def
729  ("BadMode",Var("mode",FTy 5),
730   Close
731     (qVar"state",
732      CS(Var("mode",FTy 5),
733         [(LW(16,5),LF),(LW(17,5),LF),(LW(18,5),LF),(LW(19,5),LF),
734          (LW(22,5),
735           Mop(Not,
736               Apply(Call("HaveSecurityExt",ATy(qTy,bTy),LU),qVar"state"))),
737          (LW(23,5),LF),
738          (LW(26,5),
739           Mop(Not,Apply(Call("HaveVirtExt",ATy(qTy,bTy),LU),qVar"state"))),
740          (LW(27,5),LF),(LW(31,5),LF),(AVar(FTy 5),LT)])))
741;
742val CurrentModeIsNotUser_def = Def
743  ("CurrentModeIsNotUser",AVar uTy,
744   Close
745     (qVar"state",
746      Let(qVar"s",
747          ITE(Apply
748                (Call
749                   ("BadMode",ATy(qTy,bTy),
750                    Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state"))),
751                 qVar"state"),
752              Mop(Snd,
753                  Apply
754                    (Call
755                       ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
756                        Call
757                          ("UNPREDICTABLE",CTy"exception",
758                           CC[LS"BadMode: ",
759                              Mop(Cast sTy,
760                                  Dest
761                                    ("M",FTy 5,
762                                     Dest("CPSR",CTy"PSR",qVar"state")))])),
763                     qVar"state")),qVar"state"),
764          TP[Mop(Not,
765                 EQ(Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")),LW(16,5))),
766             qVar"s"])))
767;
768val CurrentModeIsUserOrSystem_def = Def
769  ("CurrentModeIsUserOrSystem",AVar uTy,
770   Close
771     (qVar"state",
772      Let(qVar"s",
773          ITE(Apply
774                (Call
775                   ("BadMode",ATy(qTy,bTy),
776                    Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state"))),
777                 qVar"state"),
778              Mop(Snd,
779                  Apply
780                    (Call
781                       ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
782                        Call
783                          ("UNPREDICTABLE",CTy"exception",
784                           CC[LS"BadMode: ",
785                              Mop(Cast sTy,
786                                  Dest
787                                    ("M",FTy 5,
788                                     Dest("CPSR",CTy"PSR",qVar"state")))])),
789                     qVar"state")),qVar"state"),
790          TP[Bop(In,Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")),
791                 SL[LW(16,5),LW(31,5)]),qVar"s"])))
792;
793val CurrentModeIsHyp_def = Def
794  ("CurrentModeIsHyp",AVar uTy,
795   Close
796     (qVar"state",
797      Let(qVar"s",
798          ITE(Apply
799                (Call
800                   ("BadMode",ATy(qTy,bTy),
801                    Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state"))),
802                 qVar"state"),
803              Mop(Snd,
804                  Apply
805                    (Call
806                       ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
807                        Call
808                          ("UNPREDICTABLE",CTy"exception",
809                           CC[LS"BadMode: ",
810                              Mop(Cast sTy,
811                                  Dest
812                                    ("M",FTy 5,
813                                     Dest("CPSR",CTy"PSR",qVar"state")))])),
814                     qVar"state")),qVar"state"),
815          TP[EQ(Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")),LW(26,5)),
816             qVar"s"])))
817;
818val IntegerZeroDivideTrappingEnabled_def = Def
819  ("IntegerZeroDivideTrappingEnabled",AVar uTy,
820   Close
821     (qVar"state",
822      Dest
823        ("DZ",bTy,
824         Dest("SCTLR",CTy"SCTLR",Dest("CP15",CTy"CP15",qVar"state")))))
825;
826val ISETSTATE_def = Def
827  ("ISETSTATE",qVar"state",
828   CC[Mop(Cast F1,Dest("J",bTy,Dest("CPSR",CTy"PSR",qVar"state"))),
829      Mop(Cast F1,Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"state")))])
830;
831val write'ISETSTATE_def = Def
832  ("write'ISETSTATE",Var("value",FTy 2),
833   Close
834     (qVar"state",
835      Let(qVar"s",
836          Rupd
837            ("CPSR",
838             TP[qVar"state",
839                Rupd
840                  ("J",
841                   TP[Dest("CPSR",CTy"PSR",qVar"state"),
842                      Bop(Bit,Var("value",FTy 2),LN 1)])]),
843          Rupd
844            ("CPSR",
845             TP[qVar"s",
846                Rupd
847                  ("T",
848                   TP[Dest("CPSR",CTy"PSR",qVar"s"),
849                      Bop(Bit,Var("value",FTy 2),LN 0)])]))))
850;
851val CurrentInstrSet_def = Def
852  ("CurrentInstrSet",AVar uTy,
853   Close
854     (qVar"state",
855      CS(Apply(Const("ISETSTATE",ATy(qTy,FTy 2)),qVar"state"),
856         [(LW(0,2),LC("InstrSet_ARM",CTy"InstrSet")),
857          (LW(1,2),LC("InstrSet_Thumb",CTy"InstrSet")),
858          (LW(2,2),LC("InstrSet_Jazelle",CTy"InstrSet")),
859          (LW(3,2),LC("InstrSet_ThumbEE",CTy"InstrSet"))])))
860;
861val SelectInstrSet_def = Def
862  ("SelectInstrSet",Var("iset",CTy"InstrSet"),
863   Close
864     (qVar"state",
865      CS(Var("iset",CTy"InstrSet"),
866         [(LC("InstrSet_ARM",CTy"InstrSet"),
867           ITE(EQ(Apply
868                    (Call("CurrentInstrSet",ATy(qTy,CTy"InstrSet"),LU),
869                     qVar"state"),LC("InstrSet_ThumbEE",CTy"InstrSet")),
870               Mop(Snd,
871                   Apply
872                     (Call
873                        ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
874                         Call
875                           ("UNPREDICTABLE",CTy"exception",
876                            LS"SelectInstrSet")),qVar"state")),
877               Apply
878                 (Call("write'ISETSTATE",ATy(qTy,qTy),LW(0,2)),qVar"state"))),
879          (LC("InstrSet_Thumb",CTy"InstrSet"),
880           Apply(Call("write'ISETSTATE",ATy(qTy,qTy),LW(1,2)),qVar"state")),
881          (LC("InstrSet_Jazelle",CTy"InstrSet"),
882           Apply(Call("write'ISETSTATE",ATy(qTy,qTy),LW(2,2)),qVar"state")),
883          (LC("InstrSet_ThumbEE",CTy"InstrSet"),
884           Apply(Call("write'ISETSTATE",ATy(qTy,qTy),LW(3,2)),qVar"state"))])))
885;
886val ITSTATE_def = Def
887  ("ITSTATE",qVar"state",
888   ITE(Apply(Call("HaveThumb2",ATy(qTy,bTy),LU),qVar"state"),
889       Dest("IT",F8,Dest("CPSR",CTy"PSR",qVar"state")),LW(0,8)))
890;
891val write'ITSTATE_def = Def
892  ("write'ITSTATE",Var("value",F8),
893   Close
894     (qVar"state",
895      Rupd
896        ("CPSR",
897         TP[qVar"state",
898            Rupd
899              ("IT",TP[Dest("CPSR",CTy"PSR",qVar"state"),Var("value",F8)])])))
900;
901val ITAdvance_def = Def
902  ("ITAdvance",AVar uTy,
903   Close
904     (qVar"state",
905      ITE(Bop(And,Apply(Call("HaveThumb2",ATy(qTy,bTy),LU),qVar"state"),
906              Mop(Not,
907                  EQ(Dest("Encoding",CTy"Encoding",qVar"state"),
908                     LC("Encoding_ARM",CTy"Encoding")))),
909          ITE(EQ(EX(Apply(Const("ITSTATE",ATy(qTy,F8)),qVar"state"),LN 2,
910                    LN 0,FTy 3),LW(0,3)),
911              Apply
912                (Call("write'ITSTATE",ATy(qTy,qTy),LW(0,8)),qVar"state"),
913              Apply
914                (Call
915                   ("write'ITSTATE",ATy(qTy,qTy),
916                    BFI(LN 4,LN 0,
917                        Bop(Lsl,
918                            EX(Apply
919                                 (Const("ITSTATE",ATy(qTy,F8)),qVar"state"),
920                               LN 4,LN 0,FTy 5),LN 1),
921                        Apply(Const("ITSTATE",ATy(qTy,F8)),qVar"state"))),
922                 qVar"state")),qVar"state")))
923;
924val InITBlock_def = Def
925  ("InITBlock",AVar uTy,
926   Close
927     (qVar"state",
928      Mop(Not,
929          EQ(EX(Apply(Const("ITSTATE",ATy(qTy,F8)),qVar"state"),LN 3,LN 0,
930                F4),LW(0,4)))))
931;
932val LastInITBlock_def = Def
933  ("LastInITBlock",AVar uTy,
934   Close
935     (qVar"state",
936      EQ(EX(Apply(Const("ITSTATE",ATy(qTy,F8)),qVar"state"),LN 3,LN 0,F4),
937         LW(8,4))))
938;
939val ThumbCondition_def = Def
940  ("ThumbCondition",AVar uTy,
941   Close
942     (qVar"state",
943      ITB([(EQ(Apply(Const("ITSTATE",ATy(qTy,F8)),qVar"state"),LW(0,8)),
944            TP[LW(14,4),qVar"state"]),
945           (Mop(Not,
946                EQ(EX(Dest("IT",F8,Dest("CPSR",CTy"PSR",qVar"state")),
947                      LN 3,LN 0,F4),LW(0,4))),
948            TP[EX(Dest("IT",F8,Dest("CPSR",CTy"PSR",qVar"state")),LN 7,
949                  LN 4,F4),qVar"state"])],
950          Apply
951            (Call
952               ("raise'exception",ATy(qTy,PTy(F4,qTy)),
953                Call("UNPREDICTABLE",CTy"exception",LS"ThumbCondition")),
954             qVar"state"))))
955;
956val BigEndian_def = Def
957  ("BigEndian",AVar uTy,
958   Close(qVar"state",Dest("E",bTy,Dest("CPSR",CTy"PSR",qVar"state"))))
959;
960val SetExclusiveMonitors_def = Def
961  ("SetExclusiveMonitors",TP[Var("address",F32),nVar"n"],LU)
962;
963val ExclusiveMonitorsPass_def = Def
964  ("ExclusiveMonitorsPass",TP[Var("address",F32),nVar"n"],LX bTy)
965;
966val ClearExclusiveLocal_def = Def ("ClearExclusiveLocal",iVar"id",LU)
967;
968val CurrentCond_def = Def
969  ("CurrentCond",AVar uTy,
970   Close(qVar"state",Dest("CurrentCondition",F4,qVar"state")))
971;
972val ConditionPassed_def = Def
973  ("ConditionPassed",AVar uTy,
974   Close
975     (qVar"state",
976      Let(Var("v",F4),
977          Apply(Call("CurrentCond",ATy(qTy,F4),LU),qVar"state"),
978          Let(TP[bVar"v0",qVar"s"],
979              CS(EX(Var("v",F4),LN 3,LN 1,FTy 3),
980                 [(LW(0,3),
981                   TP[Dest("Z",bTy,Dest("CPSR",CTy"PSR",qVar"state")),
982                      qVar"state"]),
983                  (LW(1,3),
984                   TP[Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"state")),
985                      qVar"state"]),
986                  (LW(2,3),
987                   TP[Dest("N",bTy,Dest("CPSR",CTy"PSR",qVar"state")),
988                      qVar"state"]),
989                  (LW(3,3),
990                   TP[Dest("V",bTy,Dest("CPSR",CTy"PSR",qVar"state")),
991                      qVar"state"]),
992                  (LW(4,3),
993                   TP[Bop(And,
994                          Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"state")),
995                          Mop(Not,
996                              Dest
997                                ("Z",bTy,Dest("CPSR",CTy"PSR",qVar"state")))),
998                      qVar"state"]),
999                  (LW(5,3),
1000                   TP[EQ(Dest("N",bTy,Dest("CPSR",CTy"PSR",qVar"state")),
1001                         Dest("V",bTy,Dest("CPSR",CTy"PSR",qVar"state"))),
1002                      qVar"state"]),
1003                  (LW(6,3),
1004                   TP[Bop(And,
1005                          EQ(Dest
1006                               ("N",bTy,Dest("CPSR",CTy"PSR",qVar"state")),
1007                             Dest
1008                               ("V",bTy,Dest("CPSR",CTy"PSR",qVar"state"))),
1009                          Mop(Not,
1010                              Dest
1011                                ("Z",bTy,Dest("CPSR",CTy"PSR",qVar"state")))),
1012                      qVar"state"]),(LW(7,3),TP[LT,qVar"state"])]),
1013              ITE(Bop(And,Bop(Bit,Var("v",F4),LN 0),
1014                      Mop(Not,EQ(Var("v",F4),LW(15,4)))),
1015                  Mop(Not,bVar"v0"),bVar"v0")))))
1016;
1017val SPSR_def = Def
1018  ("SPSR",qVar"state",
1019   ITE(Apply
1020         (Call
1021            ("BadMode",ATy(qTy,bTy),
1022             Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state"))),
1023          qVar"state"),
1024       Apply
1025         (Call
1026            ("raise'exception",ATy(qTy,PTy(CTy"PSR",qTy)),
1027             Call
1028               ("UNPREDICTABLE",CTy"exception",
1029                CC[LS"SPSR: BadMode: ",
1030                   Mop(Cast sTy,
1031                       Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state")))])),
1032          qVar"state"),
1033       CS(Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state")),
1034          [(LW(17,5),TP[Dest("SPSR_fiq",CTy"PSR",qVar"state"),qVar"state"]),
1035           (LW(18,5),TP[Dest("SPSR_irq",CTy"PSR",qVar"state"),qVar"state"]),
1036           (LW(19,5),TP[Dest("SPSR_svc",CTy"PSR",qVar"state"),qVar"state"]),
1037           (LW(22,5),TP[Dest("SPSR_mon",CTy"PSR",qVar"state"),qVar"state"]),
1038           (LW(23,5),TP[Dest("SPSR_abt",CTy"PSR",qVar"state"),qVar"state"]),
1039           (LW(26,5),TP[Dest("SPSR_hyp",CTy"PSR",qVar"state"),qVar"state"]),
1040           (LW(27,5),TP[Dest("SPSR_und",CTy"PSR",qVar"state"),qVar"state"]),
1041           (AVar(FTy 5),
1042            Apply
1043              (Call
1044                 ("raise'exception",ATy(qTy,PTy(CTy"PSR",qTy)),
1045                  Call("UNPREDICTABLE",CTy"exception",LS"SPSR")),
1046               qVar"state"))])))
1047;
1048val write'SPSR_def = Def
1049  ("write'SPSR",Var("value",CTy"PSR"),
1050   Close
1051     (qVar"state",
1052      ITE(Apply
1053            (Call
1054               ("BadMode",ATy(qTy,bTy),
1055                Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state"))),
1056             qVar"state"),
1057          Mop(Snd,
1058              Apply
1059                (Call
1060                   ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
1061                    Call
1062                      ("UNPREDICTABLE",CTy"exception",
1063                       CC[LS"SPSR: BadMode: ",
1064                          Mop(Cast sTy,
1065                              Dest
1066                                ("M",FTy 5,
1067                                 Dest("CPSR",CTy"PSR",qVar"state")))])),
1068                 qVar"state")),
1069          CS(Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state")),
1070             [(LW(17,5),
1071               Rupd("SPSR_fiq",TP[qVar"state",Var("value",CTy"PSR")])),
1072              (LW(18,5),
1073               Rupd("SPSR_irq",TP[qVar"state",Var("value",CTy"PSR")])),
1074              (LW(19,5),
1075               Rupd("SPSR_svc",TP[qVar"state",Var("value",CTy"PSR")])),
1076              (LW(22,5),
1077               Rupd("SPSR_mon",TP[qVar"state",Var("value",CTy"PSR")])),
1078              (LW(23,5),
1079               Rupd("SPSR_abt",TP[qVar"state",Var("value",CTy"PSR")])),
1080              (LW(26,5),
1081               Rupd("SPSR_hyp",TP[qVar"state",Var("value",CTy"PSR")])),
1082              (LW(27,5),
1083               Rupd("SPSR_und",TP[qVar"state",Var("value",CTy"PSR")])),
1084              (AVar(FTy 5),
1085               Mop(Snd,
1086                   Apply
1087                     (Call
1088                        ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
1089                         Call("UNPREDICTABLE",CTy"exception",LS"SPSR")),
1090                      qVar"state")))]))))
1091;
1092val CPSRWriteByInstr_def = Def
1093  ("CPSRWriteByInstr",
1094   TP[Var("value",F32),Var("bytemask",F4),bVar"is_excpt_return"],
1095   Close
1096     (qVar"state",
1097      Let(TP[bVar"v",qVar"s"],
1098          Apply
1099            (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
1100             qVar"state"),
1101          Let(qVar"s0",
1102              ITE(Bop(Bit,Var("bytemask",F4),LN 3),
1103                  Let(qVar"s",
1104                      Rupd
1105                        ("CPSR",
1106                         TP[qVar"s",
1107                            Call
1108                              ("write'reg'PSR",CTy"PSR",
1109                               TP[Dest("CPSR",CTy"PSR",qVar"s"),
1110                                  BFI(LN 31,LN 27,
1111                                      EX(Var("value",F32),LN 31,LN 27,
1112                                         FTy 5),
1113                                      Call
1114                                        ("reg'PSR",F32,
1115                                         Dest("CPSR",CTy"PSR",qVar"s")))])]),
1116                      ITE(bVar"is_excpt_return",
1117                          Rupd
1118                            ("CPSR",
1119                             TP[qVar"s",
1120                                Call
1121                                  ("write'reg'PSR",CTy"PSR",
1122                                   TP[Dest("CPSR",CTy"PSR",qVar"s"),
1123                                      BFI(LN 26,LN 24,
1124                                          EX(Var("value",F32),LN 26,LN 24,
1125                                             FTy 3),
1126                                          Call
1127                                            ("reg'PSR",F32,
1128                                             Dest("CPSR",CTy"PSR",qVar"s")))])]),
1129                          qVar"s")),qVar"s"),
1130              Let(qVar"s0",
1131                  ITE(Bop(Bit,Var("bytemask",F4),LN 2),
1132                      Rupd
1133                        ("CPSR",
1134                         TP[qVar"s0",
1135                            Call
1136                              ("write'reg'PSR",CTy"PSR",
1137                               TP[Dest("CPSR",CTy"PSR",qVar"s0"),
1138                                  BFI(LN 19,LN 16,
1139                                      EX(Var("value",F32),LN 19,LN 16,F4),
1140                                      Call
1141                                        ("reg'PSR",F32,
1142                                         Dest("CPSR",CTy"PSR",qVar"s0")))])]),
1143                      qVar"s0"),
1144                  Let(qVar"s0",
1145                      ITE(Bop(Bit,Var("bytemask",F4),LN 1),
1146                          Let(qVar"s",
1147                              ITE(bVar"is_excpt_return",
1148                                  Rupd
1149                                    ("CPSR",
1150                                     TP[qVar"s0",
1151                                        Call
1152                                          ("write'reg'PSR",CTy"PSR",
1153                                           TP[Dest
1154                                                ("CPSR",CTy"PSR",qVar"s0"),
1155                                              BFI(LN 15,LN 10,
1156                                                  EX(Var("value",F32),
1157                                                     LN 15,LN 10,FTy 6),
1158                                                  Call
1159                                                    ("reg'PSR",F32,
1160                                                     Dest
1161                                                       ("CPSR",CTy"PSR",
1162                                                        qVar"s0")))])]),
1163                                  qVar"s0"),
1164                              Let(qVar"s",
1165                                  Rupd
1166                                    ("CPSR",
1167                                     TP[qVar"s",
1168                                        Call
1169                                          ("write'reg'PSR",CTy"PSR",
1170                                           TP[Dest
1171                                                ("CPSR",CTy"PSR",qVar"s"),
1172                                              BFI(LN 9,LN 9,
1173                                                  Mop(Cast F1,
1174                                                      Bop(Bit,
1175                                                          Var("value",F32),
1176                                                          LN 9)),
1177                                                  Call
1178                                                    ("reg'PSR",F32,
1179                                                     Dest
1180                                                       ("CPSR",CTy"PSR",
1181                                                        qVar"s")))])]),
1182                                  ITE(Bop(And,bVar"v",
1183                                          Bop(Or,
1184                                              Apply
1185                                                (Call
1186                                                   ("IsSecure",
1187                                                    ATy(qTy,bTy),LU),
1188                                                 qVar"s"),
1189                                              Dest
1190                                                ("AW",bTy,
1191                                                 Dest
1192                                                   ("SCR",CTy"SCR",
1193                                                    Dest
1194                                                      ("CP15",CTy"CP15",
1195                                                       qVar"s"))))),
1196                                      Rupd
1197                                        ("CPSR",
1198                                         TP[qVar"s",
1199                                            Call
1200                                              ("write'reg'PSR",CTy"PSR",
1201                                               TP[Dest
1202                                                    ("CPSR",CTy"PSR",
1203                                                     qVar"s"),
1204                                                  BFI(LN 8,LN 8,
1205                                                      Mop(Cast F1,
1206                                                          Bop(Bit,
1207                                                              Var("value",
1208                                                                  F32),
1209                                                              LN 8)),
1210                                                      Call
1211                                                        ("reg'PSR",F32,
1212                                                         Dest
1213                                                           ("CPSR",
1214                                                            CTy"PSR",
1215                                                            qVar"s")))])]),
1216                                      qVar"s"))),qVar"s0"),
1217                      ITE(Bop(Bit,Var("bytemask",F4),LN 0),
1218                          Let(qVar"s0",
1219                              ITE(bVar"v",
1220                                  Rupd
1221                                    ("CPSR",
1222                                     TP[qVar"s0",
1223                                        Call
1224                                          ("write'reg'PSR",CTy"PSR",
1225                                           TP[Dest
1226                                                ("CPSR",CTy"PSR",qVar"s0"),
1227                                              BFI(LN 7,LN 7,
1228                                                  Mop(Cast F1,
1229                                                      Bop(Bit,
1230                                                          Var("value",F32),
1231                                                          LN 7)),
1232                                                  Call
1233                                                    ("reg'PSR",F32,
1234                                                     Dest
1235                                                       ("CPSR",CTy"PSR",
1236                                                        qVar"s0")))])]),
1237                                  qVar"s0"),
1238                              Let(qVar"s",
1239                                  ITE(Bop(And,bVar"v",
1240                                          Bop(And,
1241                                              Bop(Or,
1242                                                  Mop(Not,
1243                                                      Dest
1244                                                        ("NMFI",bTy,
1245                                                         Dest
1246                                                           ("SCTLR",
1247                                                            CTy"SCTLR",
1248                                                            Dest
1249                                                              ("CP15",
1250                                                               CTy"CP15",
1251                                                               qVar"s")))),
1252                                                  Mop(Not,
1253                                                      Bop(Bit,
1254                                                          Var("value",F32),
1255                                                          LN 6))),
1256                                              Bop(Or,
1257                                                  Apply
1258                                                    (Call
1259                                                       ("IsSecure",
1260                                                        ATy(qTy,bTy),LU),
1261                                                     qVar"s0"),
1262                                                  Bop(Or,
1263                                                      Dest
1264                                                        ("FW",bTy,
1265                                                         Dest
1266                                                           ("SCR",
1267                                                            CTy"SCR",
1268                                                            Dest
1269                                                              ("CP15",
1270                                                               CTy"CP15",
1271                                                               qVar"s0"))),
1272                                                      Apply
1273                                                        (Call
1274                                                           ("HaveVirtExt",
1275                                                            ATy(qTy,bTy),
1276                                                            LU),qVar"s0"))))),
1277                                      Rupd
1278                                        ("CPSR",
1279                                         TP[qVar"s0",
1280                                            Call
1281                                              ("write'reg'PSR",CTy"PSR",
1282                                               TP[Dest
1283                                                    ("CPSR",CTy"PSR",
1284                                                     qVar"s0"),
1285                                                  BFI(LN 6,LN 6,
1286                                                      Mop(Cast F1,
1287                                                          Bop(Bit,
1288                                                              Var("value",
1289                                                                  F32),
1290                                                              LN 6)),
1291                                                      Call
1292                                                        ("reg'PSR",F32,
1293                                                         Dest
1294                                                           ("CPSR",
1295                                                            CTy"PSR",
1296                                                            qVar"s0")))])]),
1297                                      qVar"s0"),
1298                                  Let(qVar"s",
1299                                      ITE(bVar"is_excpt_return",
1300                                          Rupd
1301                                            ("CPSR",
1302                                             TP[qVar"s",
1303                                                Call
1304                                                  ("write'reg'PSR",
1305                                                   CTy"PSR",
1306                                                   TP[Dest
1307                                                        ("CPSR",CTy"PSR",
1308                                                         qVar"s"),
1309                                                      BFI(LN 5,LN 5,
1310                                                          Mop(Cast F1,
1311                                                              Bop(Bit,
1312                                                                  Var("value",
1313                                                                      F32),
1314                                                                  LN 5)),
1315                                                          Call
1316                                                            ("reg'PSR",
1317                                                             F32,
1318                                                             Dest
1319                                                               ("CPSR",
1320                                                                CTy"PSR",
1321                                                                qVar"s")))])]),
1322                                          qVar"s"),
1323                                      ITE(bVar"v",
1324                                          ITE(Apply
1325                                                (Call
1326                                                   ("BadMode",
1327                                                    ATy(qTy,bTy),
1328                                                    EX(Var("value",F32),
1329                                                       LN 4,LN 0,FTy 5)),
1330                                                 qVar"s"),
1331                                              Mop(Snd,
1332                                                  Apply
1333                                                    (Call
1334                                                       ("raise'exception",
1335                                                        ATy(qTy,
1336                                                            PTy(uTy,qTy)),
1337                                                        Call
1338                                                          ("UNPREDICTABLE",
1339                                                           CTy"exception",
1340                                                           CC[LS
1341                                                               "CPSRWriteByInstr: BadMode: ",
1342                                                              Mop(Cast sTy,
1343                                                                  EX(Var("value",
1344                                                                         F32),
1345                                                                     LN 4,
1346                                                                     LN 0,
1347                                                                     FTy 5))])),
1348                                                     qVar"s")),
1349                                              Let(TP[bVar"v",qVar"s"],
1350                                                  Let(qVar"s0",
1351                                                      ITE(Bop(And,
1352                                                              Mop(Not,
1353                                                                  Apply
1354                                                                    (Call
1355                                                                       ("IsSecure",
1356                                                                        ATy(qTy,
1357                                                                            bTy),
1358                                                                        LU),
1359                                                                     qVar"s")),
1360                                                              EQ(EX(Var("value",
1361                                                                        F32),
1362                                                                    LN 4,
1363                                                                    LN 0,
1364                                                                    FTy 5),
1365                                                                 LW(22,5))),
1366                                                          Mop(Snd,
1367                                                              Apply
1368                                                                (Call
1369                                                                   ("raise'exception",
1370                                                                    ATy(qTy,
1371                                                                        PTy(uTy,
1372                                                                            qTy)),
1373                                                                    Call
1374                                                                      ("UNPREDICTABLE",
1375                                                                       CTy"exception",
1376                                                                       LS
1377                                                                        "CPSRWriteByInstr")),
1378                                                                 qVar"s")),
1379                                                          qVar"s"),
1380                                                      TP[Apply
1381                                                           (Call
1382                                                              ("IsSecure",
1383                                                               ATy(qTy,bTy),
1384                                                               LU),
1385                                                            qVar"s0"),
1386                                                         qVar"s0"]),
1387                                                  Let(qVar"s",
1388                                                      ITE(Bop(And,
1389                                                              Mop(Not,
1390                                                                  bVar"v"),
1391                                                              Bop(And,
1392                                                                  EQ(EX(Var("value",
1393                                                                            F32),
1394                                                                        LN
1395                                                                         4,
1396                                                                        LN
1397                                                                         0,
1398                                                                        FTy 5),
1399                                                                     LW(17,
1400                                                                        5)),
1401                                                                  Dest
1402                                                                    ("RFR",
1403                                                                     bTy,
1404                                                                     Dest
1405                                                                       ("NSACR",
1406                                                                        CTy"NSACR",
1407                                                                        Dest
1408                                                                          ("CP15",
1409                                                                           CTy"CP15",
1410                                                                           qVar"s"))))),
1411                                                          Mop(Snd,
1412                                                              Apply
1413                                                                (Call
1414                                                                   ("raise'exception",
1415                                                                    ATy(qTy,
1416                                                                        PTy(uTy,
1417                                                                            qTy)),
1418                                                                    Call
1419                                                                      ("UNPREDICTABLE",
1420                                                                       CTy"exception",
1421                                                                       LS
1422                                                                        "CPSRWriteByInstr")),
1423                                                                 qVar"s")),
1424                                                          qVar"s"),
1425                                                      Let(TP[bVar"v",
1426                                                             qVar"s"],
1427                                                          Let(qVar"s0",
1428                                                              ITE(Bop(And,
1429                                                                      Mop(Not,
1430                                                                          Dest
1431                                                                            ("NS",
1432                                                                             bTy,
1433                                                                             Dest
1434                                                                               ("SCR",
1435                                                                                CTy"SCR",
1436                                                                                Dest
1437                                                                                  ("CP15",
1438                                                                                   CTy"CP15",
1439                                                                                   qVar"s")))),
1440                                                                      EQ(EX(Var("value",
1441                                                                                F32),
1442                                                                            LN
1443                                                                             4,
1444                                                                            LN
1445                                                                             0,
1446                                                                            FTy 5),
1447                                                                         LW(26,
1448                                                                            5))),
1449                                                                  Mop(Snd,
1450                                                                      Apply
1451                                                                        (Call
1452                                                                           ("raise'exception",
1453                                                                            ATy(qTy,
1454                                                                                PTy(uTy,
1455                                                                                    qTy)),
1456                                                                            Call
1457                                                                              ("UNPREDICTABLE",
1458                                                                               CTy"exception",
1459                                                                               LS
1460                                                                                "CPSRWriteByInstr")),
1461                                                                         qVar"s")),
1462                                                                  qVar"s"),
1463                                                              TP[Apply
1464                                                                   (Call
1465                                                                      ("IsSecure",
1466                                                                       ATy(qTy,
1467                                                                           bTy),
1468                                                                       LU),
1469                                                                    qVar"s0"),
1470                                                                 qVar"s0"]),
1471                                                          Let(qVar"s",
1472                                                              ITE(Bop(And,
1473                                                                      Mop(Not,
1474                                                                          bVar"v"),
1475                                                                      Bop(And,
1476                                                                          Mop(Not,
1477                                                                              EQ(Dest
1478                                                                                   ("M",
1479                                                                                    FTy 5,
1480                                                                                    Dest
1481                                                                                      ("CPSR",
1482                                                                                       CTy"PSR",
1483                                                                                       qVar"s")),
1484                                                                                 LW(26,
1485                                                                                    5))),
1486                                                                          EQ(EX(Var("value",
1487                                                                                    F32),
1488                                                                                LN
1489                                                                                 4,
1490                                                                                LN
1491                                                                                 0,
1492                                                                                FTy 5),
1493                                                                             LW(26,
1494                                                                                5)))),
1495                                                                  Mop(Snd,
1496                                                                      Apply
1497                                                                        (Call
1498                                                                           ("raise'exception",
1499                                                                            ATy(qTy,
1500                                                                                PTy(uTy,
1501                                                                                    qTy)),
1502                                                                            Call
1503                                                                              ("UNPREDICTABLE",
1504                                                                               CTy"exception",
1505                                                                               LS
1506                                                                                "CPSRWriteByInstr")),
1507                                                                         qVar"s")),
1508                                                                  qVar"s"),
1509                                                              Let(qVar"s",
1510                                                                  ITE(Bop(And,
1511                                                                          EQ(Dest
1512                                                                               ("M",
1513                                                                                FTy 5,
1514                                                                                Dest
1515                                                                                  ("CPSR",
1516                                                                                   CTy"PSR",
1517                                                                                   qVar"s")),
1518                                                                             LW(26,
1519                                                                                5)),
1520                                                                          Bop(And,
1521                                                                              Mop(Not,
1522                                                                                  EQ(EX(Var("value",
1523                                                                                            F32),
1524                                                                                        LN
1525                                                                                         4,
1526                                                                                        LN
1527                                                                                         0,
1528                                                                                        FTy 5),
1529                                                                                     LW(26,
1530                                                                                        5))),
1531                                                                              Mop(Not,
1532                                                                                  bVar"is_excpt_return"))),
1533                                                                      Mop(Snd,
1534                                                                          Apply
1535                                                                            (Call
1536                                                                               ("raise'exception",
1537                                                                                ATy(qTy,
1538                                                                                    PTy(uTy,
1539                                                                                        qTy)),
1540                                                                                Call
1541                                                                                  ("UNPREDICTABLE",
1542                                                                                   CTy"exception",
1543                                                                                   LS
1544                                                                                    "CPSRWriteByInstr")),
1545                                                                             qVar"s")),
1546                                                                      qVar"s"),
1547                                                                  Rupd
1548                                                                    ("CPSR",
1549                                                                     TP[qVar"s",
1550                                                                        Call
1551                                                                          ("write'reg'PSR",
1552                                                                           CTy"PSR",
1553                                                                           TP[Dest
1554                                                                                ("CPSR",
1555                                                                                 CTy"PSR",
1556                                                                                 qVar"s"),
1557                                                                              BFI(LN
1558                                                                                   4,
1559                                                                                  LN
1560                                                                                   0,
1561                                                                                  EX(Var("value",
1562                                                                                         F32),
1563                                                                                     LN
1564                                                                                      4,
1565                                                                                     LN
1566                                                                                      0,
1567                                                                                     FTy 5),
1568                                                                                  Call
1569                                                                                    ("reg'PSR",
1570                                                                                     F32,
1571                                                                                     Dest
1572                                                                                       ("CPSR",
1573                                                                                        CTy"PSR",
1574                                                                                        qVar"s")))])]))))))),
1575                                          qVar"s")))),qVar"s0")))))))
1576;
1577val SPSRWriteByInstr_def = Def
1578  ("SPSRWriteByInstr",TP[Var("value",F32),Var("bytemask",F4)],
1579   Close
1580     (qVar"state",
1581      Let(TP[bVar"v",qVar"s"],
1582          Apply
1583            (Call("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)),LU),
1584             qVar"state"),
1585          Let(qVar"s",
1586              ITE(bVar"v",
1587                  Mop(Snd,
1588                      Apply
1589                        (Call
1590                           ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
1591                            Call
1592                              ("UNPREDICTABLE",CTy"exception",
1593                               LS"SPSRWriteByInstr")),qVar"s")),qVar"s"),
1594              Let(qVar"s",
1595                  ITE(Bop(Bit,Var("bytemask",F4),LN 3),
1596                      Let(TP[Var("v",CTy"PSR"),qVar"s"],
1597                          Apply
1598                            (Const("SPSR",ATy(qTy,PTy(CTy"PSR",qTy))),
1599                             qVar"s"),
1600                          Apply
1601                            (Call
1602                               ("write'SPSR",ATy(qTy,qTy),
1603                                Call
1604                                  ("write'reg'PSR",CTy"PSR",
1605                                   TP[Var("v",CTy"PSR"),
1606                                      BFI(LN 31,LN 24,
1607                                          EX(Var("value",F32),LN 31,LN 24,
1608                                             F8),
1609                                          Call
1610                                            ("reg'PSR",F32,
1611                                             Var("v",CTy"PSR")))])),
1612                             qVar"s")),qVar"s"),
1613                  Let(qVar"s",
1614                      ITE(Bop(Bit,Var("bytemask",F4),LN 2),
1615                          Let(TP[Var("v",CTy"PSR"),qVar"s"],
1616                              Apply
1617                                (Const("SPSR",ATy(qTy,PTy(CTy"PSR",qTy))),
1618                                 qVar"s"),
1619                              Apply
1620                                (Call
1621                                   ("write'SPSR",ATy(qTy,qTy),
1622                                    Call
1623                                      ("write'reg'PSR",CTy"PSR",
1624                                       TP[Var("v",CTy"PSR"),
1625                                          BFI(LN 19,LN 16,
1626                                              EX(Var("value",F32),LN 19,
1627                                                 LN 16,F4),
1628                                              Call
1629                                                ("reg'PSR",F32,
1630                                                 Var("v",CTy"PSR")))])),
1631                                 qVar"s")),qVar"s"),
1632                      Let(qVar"s",
1633                          ITE(Bop(Bit,Var("bytemask",F4),LN 1),
1634                              Let(TP[Var("v",CTy"PSR"),qVar"s"],
1635                                  Apply
1636                                    (Const
1637                                       ("SPSR",ATy(qTy,PTy(CTy"PSR",qTy))),
1638                                     qVar"s"),
1639                                  Apply
1640                                    (Call
1641                                       ("write'SPSR",ATy(qTy,qTy),
1642                                        Call
1643                                          ("write'reg'PSR",CTy"PSR",
1644                                           TP[Var("v",CTy"PSR"),
1645                                              BFI(LN 15,LN 8,
1646                                                  EX(Var("value",F32),
1647                                                     LN 15,LN 8,F8),
1648                                                  Call
1649                                                    ("reg'PSR",F32,
1650                                                     Var("v",CTy"PSR")))])),
1651                                     qVar"s")),qVar"s"),
1652                          ITE(Bop(Bit,Var("bytemask",F4),LN 0),
1653                              Let(TP[Var("v",CTy"PSR"),qVar"s"],
1654                                  Apply
1655                                    (Const
1656                                       ("SPSR",ATy(qTy,PTy(CTy"PSR",qTy))),
1657                                     qVar"s"),
1658                                  Let(TP[bVar"v",qVar"s"],
1659                                      Let(qVar"s0",
1660                                          Apply
1661                                            (Call
1662                                               ("write'SPSR",ATy(qTy,qTy),
1663                                                Call
1664                                                  ("write'reg'PSR",
1665                                                   CTy"PSR",
1666                                                   TP[Var("v",CTy"PSR"),
1667                                                      BFI(LN 7,LN 5,
1668                                                          EX(Var("value",
1669                                                                 F32),
1670                                                             LN 7,LN 5,
1671                                                             FTy 3),
1672                                                          Call
1673                                                            ("reg'PSR",
1674                                                             F32,
1675                                                             Var("v",
1676                                                                 CTy"PSR")))])),
1677                                             qVar"s"),
1678                                          TP[Apply
1679                                               (Call
1680                                                  ("BadMode",ATy(qTy,bTy),
1681                                                   EX(Var("value",F32),
1682                                                      LN 4,LN 0,FTy 5)),
1683                                                qVar"s0"),qVar"s0"]),
1684                                      ITE(bVar"v",
1685                                          Mop(Snd,
1686                                              Apply
1687                                                (Call
1688                                                   ("raise'exception",
1689                                                    ATy(qTy,PTy(uTy,qTy)),
1690                                                    Call
1691                                                      ("UNPREDICTABLE",
1692                                                       CTy"exception",
1693                                                       CC[LS
1694                                                           "SPSRWriteByInstr: BadMode: ",
1695                                                          Mop(Cast sTy,
1696                                                              EX(Var("value",
1697                                                                     F32),
1698                                                                 LN 4,
1699                                                                 LN 0,
1700                                                                 FTy 5))])),
1701                                                 qVar"s")),
1702                                          Let(TP[Var("v",CTy"PSR"),qVar"s"],
1703                                              Apply
1704                                                (Const
1705                                                   ("SPSR",
1706                                                    ATy(qTy,
1707                                                        PTy(CTy"PSR",qTy))),
1708                                                 qVar"s"),
1709                                              Apply
1710                                                (Call
1711                                                   ("write'SPSR",
1712                                                    ATy(qTy,qTy),
1713                                                    Call
1714                                                      ("write'reg'PSR",
1715                                                       CTy"PSR",
1716                                                       TP[Var("v",CTy"PSR"),
1717                                                          BFI(LN 4,LN 0,
1718                                                              EX(Var("value",
1719                                                                     F32),
1720                                                                 LN 4,
1721                                                                 LN 0,
1722                                                                 FTy 5),
1723                                                              Call
1724                                                                ("reg'PSR",
1725                                                                 F32,
1726                                                                 Var("v",
1727                                                                     CTy"PSR")))])),
1728                                                 qVar"s"))))),qVar"s"))))))))
1729;
1730val RBankSelect_def = Def
1731  ("RBankSelect",
1732   TP[Var("mode",FTy 5),Var("usr",CTy"RName"),Var("fiq",CTy"RName"),
1733      Var("irq",CTy"RName"),Var("svc",CTy"RName"),Var("abt",CTy"RName"),
1734      Var("und",CTy"RName"),Var("mon",CTy"RName"),Var("hyp",CTy"RName")],
1735   Close
1736     (qVar"state",
1737      ITE(Apply
1738            (Call("BadMode",ATy(qTy,bTy),Var("mode",FTy 5)),qVar"state"),
1739          Apply
1740            (Call
1741               ("raise'exception",ATy(qTy,PTy(CTy"RName",qTy)),
1742                Call
1743                  ("UNPREDICTABLE",CTy"exception",
1744                   CC[LS"RBankSelect: BadMode",
1745                      Mop(Cast sTy,Var("mode",FTy 5))])),qVar"state"),
1746          TP[CS(Var("mode",FTy 5),
1747                [(LW(16,5),Var("usr",CTy"RName")),
1748                 (LW(17,5),Var("fiq",CTy"RName")),
1749                 (LW(18,5),Var("irq",CTy"RName")),
1750                 (LW(19,5),Var("svc",CTy"RName")),
1751                 (LW(22,5),Var("mon",CTy"RName")),
1752                 (LW(23,5),Var("abt",CTy"RName")),
1753                 (LW(26,5),Var("hyp",CTy"RName")),
1754                 (LW(27,5),Var("und",CTy"RName")),
1755                 (LW(31,5),Var("usr",CTy"RName"))]),qVar"state"])))
1756;
1757val RfiqBankSelect_def = Def
1758  ("RfiqBankSelect",
1759   TP[Var("mode",FTy 5),Var("usr",CTy"RName"),Var("fiq",CTy"RName")],
1760   Close
1761     (qVar"state",
1762      Apply
1763        (Call
1764           ("RBankSelect",ATy(qTy,PTy(CTy"RName",qTy)),
1765            TP[Var("mode",FTy 5),Var("usr",CTy"RName"),
1766               Var("fiq",CTy"RName"),Var("usr",CTy"RName"),
1767               Var("usr",CTy"RName"),Var("usr",CTy"RName"),
1768               Var("usr",CTy"RName"),Var("usr",CTy"RName"),
1769               Var("usr",CTy"RName")]),qVar"state")))
1770;
1771val LookUpRName_def = Def
1772  ("LookUpRName",TP[Var("n",F4),Var("mode",FTy 5)],
1773   Close
1774     (qVar"state",
1775      CS(Var("n",F4),
1776         [(LW(0,4),TP[LC("RName_0usr",CTy"RName"),qVar"state"]),
1777          (LW(1,4),TP[LC("RName_1usr",CTy"RName"),qVar"state"]),
1778          (LW(2,4),TP[LC("RName_2usr",CTy"RName"),qVar"state"]),
1779          (LW(3,4),TP[LC("RName_3usr",CTy"RName"),qVar"state"]),
1780          (LW(4,4),TP[LC("RName_4usr",CTy"RName"),qVar"state"]),
1781          (LW(5,4),TP[LC("RName_5usr",CTy"RName"),qVar"state"]),
1782          (LW(6,4),TP[LC("RName_6usr",CTy"RName"),qVar"state"]),
1783          (LW(7,4),TP[LC("RName_7usr",CTy"RName"),qVar"state"]),
1784          (LW(8,4),
1785           Apply
1786             (Call
1787                ("RfiqBankSelect",ATy(qTy,PTy(CTy"RName",qTy)),
1788                 TP[Var("mode",FTy 5),LC("RName_8usr",CTy"RName"),
1789                    LC("RName_8fiq",CTy"RName")]),qVar"state")),
1790          (LW(9,4),
1791           Apply
1792             (Call
1793                ("RfiqBankSelect",ATy(qTy,PTy(CTy"RName",qTy)),
1794                 TP[Var("mode",FTy 5),LC("RName_9usr",CTy"RName"),
1795                    LC("RName_9fiq",CTy"RName")]),qVar"state")),
1796          (LW(10,4),
1797           Apply
1798             (Call
1799                ("RfiqBankSelect",ATy(qTy,PTy(CTy"RName",qTy)),
1800                 TP[Var("mode",FTy 5),LC("RName_10usr",CTy"RName"),
1801                    LC("RName_10fiq",CTy"RName")]),qVar"state")),
1802          (LW(11,4),
1803           Apply
1804             (Call
1805                ("RfiqBankSelect",ATy(qTy,PTy(CTy"RName",qTy)),
1806                 TP[Var("mode",FTy 5),LC("RName_11usr",CTy"RName"),
1807                    LC("RName_11fiq",CTy"RName")]),qVar"state")),
1808          (LW(12,4),
1809           Apply
1810             (Call
1811                ("RfiqBankSelect",ATy(qTy,PTy(CTy"RName",qTy)),
1812                 TP[Var("mode",FTy 5),LC("RName_12usr",CTy"RName"),
1813                    LC("RName_12fiq",CTy"RName")]),qVar"state")),
1814          (LW(13,4),
1815           Apply
1816             (Call
1817                ("RBankSelect",ATy(qTy,PTy(CTy"RName",qTy)),
1818                 TP[Var("mode",FTy 5),LC("RName_SPusr",CTy"RName"),
1819                    LC("RName_SPfiq",CTy"RName"),
1820                    LC("RName_SPirq",CTy"RName"),
1821                    LC("RName_SPsvc",CTy"RName"),
1822                    LC("RName_SPabt",CTy"RName"),
1823                    LC("RName_SPund",CTy"RName"),
1824                    LC("RName_SPmon",CTy"RName"),
1825                    LC("RName_SPhyp",CTy"RName")]),qVar"state")),
1826          (LW(14,4),
1827           Apply
1828             (Call
1829                ("RBankSelect",ATy(qTy,PTy(CTy"RName",qTy)),
1830                 TP[Var("mode",FTy 5),LC("RName_LRusr",CTy"RName"),
1831                    LC("RName_LRfiq",CTy"RName"),
1832                    LC("RName_LRirq",CTy"RName"),
1833                    LC("RName_LRsvc",CTy"RName"),
1834                    LC("RName_LRabt",CTy"RName"),
1835                    LC("RName_LRund",CTy"RName"),
1836                    LC("RName_LRmon",CTy"RName"),
1837                    LC("RName_LRusr",CTy"RName")]),qVar"state")),
1838          (LW(15,4),
1839           Apply
1840             (Call
1841                ("raise'exception",ATy(qTy,PTy(CTy"RName",qTy)),
1842                 Call
1843                   ("ASSERT",CTy"exception",
1844                    LS"LookUpRName: n >= 0 and n <= 14")),qVar"state"))])))
1845;
1846val Rmode_def = Def
1847  ("Rmode",TP[Var("n",F4),Var("mode",FTy 5)],
1848   Close
1849     (qVar"state",
1850      Let(bVar"v",
1851          Mop(Not,Apply(Call("IsSecure",ATy(qTy,bTy),LU),qVar"state")),
1852          Let(qVar"s",
1853              ITE(Bop(And,bVar"v",EQ(Var("mode",FTy 5),LW(22,5))),
1854                  Mop(Snd,
1855                      Apply
1856                        (Call
1857                           ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
1858                            Call("UNPREDICTABLE",CTy"exception",LS"Rmode")),
1859                         qVar"state")),qVar"state"),
1860              Let(qVar"s",
1861                  ITE(Bop(And,bVar"v",
1862                          Bop(And,EQ(Var("mode",FTy 5),LW(17,5)),
1863                              Dest
1864                                ("RFR",bTy,
1865                                 Dest
1866                                   ("NSACR",CTy"NSACR",
1867                                    Dest("CP15",CTy"CP15",qVar"s"))))),
1868                      Mop(Snd,
1869                          Apply
1870                            (Call
1871                               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
1872                                Call
1873                                  ("UNPREDICTABLE",CTy"exception",
1874                                   LS"Rmode")),qVar"s")),qVar"s"),
1875                  Let(TP[Var("v0",CTy"RName"),qVar"s0"],
1876                      Apply
1877                        (Call
1878                           ("LookUpRName",ATy(qTy,PTy(CTy"RName",qTy)),
1879                            TP[Var("n",F4),Var("mode",FTy 5)]),qVar"s"),
1880                      TP[Apply
1881                           (Dest("REG",ATy(CTy"RName",F32),qVar"s"),
1882                            Var("v0",CTy"RName")),qVar"s0"]))))))
1883;
1884val write'Rmode_def = Def
1885  ("write'Rmode",TP[Var("value",F32),Var("n",F4),Var("mode",FTy 5)],
1886   Close
1887     (qVar"state",
1888      Let(bVar"v",
1889          Mop(Not,Apply(Call("IsSecure",ATy(qTy,bTy),LU),qVar"state")),
1890          Let(qVar"s",
1891              ITE(Bop(And,bVar"v",EQ(Var("mode",FTy 5),LW(22,5))),
1892                  Mop(Snd,
1893                      Apply
1894                        (Call
1895                           ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
1896                            Call("UNPREDICTABLE",CTy"exception",LS"Rmode")),
1897                         qVar"state")),qVar"state"),
1898              Let(qVar"s",
1899                  ITE(Bop(And,bVar"v",
1900                          Bop(And,EQ(Var("mode",FTy 5),LW(17,5)),
1901                              Dest
1902                                ("RFR",bTy,
1903                                 Dest
1904                                   ("NSACR",CTy"NSACR",
1905                                    Dest("CP15",CTy"CP15",qVar"s"))))),
1906                      Mop(Snd,
1907                          Apply
1908                            (Call
1909                               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
1910                                Call
1911                                  ("UNPREDICTABLE",CTy"exception",
1912                                   LS"Rmode")),qVar"s")),qVar"s"),
1913                  Let(TP[Var("v",CTy"RName"),qVar"s"],
1914                      Apply
1915                        (Call
1916                           ("LookUpRName",ATy(qTy,PTy(CTy"RName",qTy)),
1917                            TP[Var("n",F4),Var("mode",FTy 5)]),
1918                         ITE(Bop(And,EQ(Var("n",F4),LW(13,4)),
1919                                 Bop(And,
1920                                     Mop(Not,
1921                                         EQ(EX(Var("value",F32),LN 1,LN 0,
1922                                               FTy 2),LW(0,2))),
1923                                     Mop(Not,
1924                                         EQ(Apply
1925                                              (Call
1926                                                 ("CurrentInstrSet",
1927                                                  ATy(qTy,CTy"InstrSet"),
1928                                                  LU),qVar"s"),
1929                                            LC("InstrSet_ARM",
1930                                               CTy"InstrSet"))))),
1931                             Mop(Snd,
1932                                 Apply
1933                                   (Call
1934                                      ("raise'exception",
1935                                       ATy(qTy,PTy(uTy,qTy)),
1936                                       Call
1937                                         ("UNPREDICTABLE",CTy"exception",
1938                                          LS"Rmode")),qVar"s")),qVar"s")),
1939                      Rupd
1940                        ("REG",
1941                         TP[qVar"s",
1942                            Fupd
1943                              (Dest("REG",ATy(CTy"RName",F32),qVar"s"),
1944                               Var("v",CTy"RName"),Var("value",F32))])))))))
1945;
1946val R_def = Def
1947  ("R",Var("n",F4),
1948   Close
1949     (qVar"state",
1950      ITE(EQ(Var("n",F4),LW(15,4)),
1951          TP[Bop(Add,
1952                 Apply
1953                   (Dest("REG",ATy(CTy"RName",F32),qVar"state"),
1954                    LC("RName_PC",CTy"RName")),
1955                 ITE(EQ(Apply
1956                          (Call
1957                             ("CurrentInstrSet",ATy(qTy,CTy"InstrSet"),LU),
1958                           qVar"state"),LC("InstrSet_ARM",CTy"InstrSet")),
1959                     LW(8,32),LW(4,32))),qVar"state"],
1960          Apply
1961            (Call
1962               ("Rmode",ATy(qTy,PTy(F32,qTy)),
1963                TP[Var("n",F4),
1964                   Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state"))]),
1965             qVar"state"))))
1966;
1967val write'R_def = Def
1968  ("write'R",TP[Var("value",F32),Var("n",F4)],
1969   Close
1970     (qVar"state",
1971      Apply
1972        (Call
1973           ("write'Rmode",ATy(qTy,qTy),
1974            TP[Var("value",F32),Var("n",F4),
1975               Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"state"))]),
1976         qVar"state")))
1977;
1978val SP_def = Def
1979  ("SP",qVar"state",
1980   Apply(Call("R",ATy(qTy,PTy(F32,qTy)),LW(13,4)),qVar"state"))
1981;
1982val write'SP_def = Def
1983  ("write'SP",Var("value",F32),
1984   Close
1985     (qVar"state",
1986      Apply
1987        (Call("write'R",ATy(qTy,qTy),TP[Var("value",F32),LW(13,4)]),
1988         qVar"state")))
1989;
1990val LR_def = Def
1991  ("LR",qVar"state",
1992   Apply(Call("R",ATy(qTy,PTy(F32,qTy)),LW(14,4)),qVar"state"))
1993;
1994val write'LR_def = Def
1995  ("write'LR",Var("value",F32),
1996   Close
1997     (qVar"state",
1998      Apply
1999        (Call("write'R",ATy(qTy,qTy),TP[Var("value",F32),LW(14,4)]),
2000         qVar"state")))
2001;
2002val PC_def = Def
2003  ("PC",qVar"state",
2004   Apply(Call("R",ATy(qTy,PTy(F32,qTy)),LW(15,4)),qVar"state"))
2005;
2006val BranchTo_def = Def
2007  ("BranchTo",Var("address",F32),
2008   Close
2009     (qVar"state",
2010      Rupd
2011        ("REG",
2012         TP[qVar"state",
2013            Fupd
2014              (Dest("REG",ATy(CTy"RName",F32),qVar"state"),
2015               LC("RName_PC",CTy"RName"),Var("address",F32))])))
2016;
2017val PCStoreValue_def = Def
2018  ("PCStoreValue",AVar uTy,
2019   Close(qVar"state",Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state")))
2020;
2021val BranchWritePC_def = Def
2022  ("BranchWritePC",Var("address",F32),
2023   Close
2024     (qVar"state",
2025      ITE(EQ(Apply
2026               (Call("CurrentInstrSet",ATy(qTy,CTy"InstrSet"),LU),
2027                qVar"state"),LC("InstrSet_ARM",CTy"InstrSet")),
2028          Apply
2029            (Call
2030               ("BranchTo",ATy(qTy,qTy),
2031                CC[EX(Var("address",F32),LN 31,LN 2,FTy 30),LW(0,2)]),
2032             ITE(Bop(And,
2033                     Bop(Lt,
2034                         Apply
2035                           (Call("ArchVersion",ATy(qTy,nTy),LU),
2036                            qVar"state"),LN 6),
2037                     Mop(Not,
2038                         EQ(EX(Var("address",F32),LN 1,LN 0,FTy 2),LW(0,2)))),
2039                 Mop(Snd,
2040                     Apply
2041                       (Call
2042                          ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2043                           Call
2044                             ("UNPREDICTABLE",CTy"exception",
2045                              LS"BranchWritePC")),qVar"state")),
2046                 qVar"state")),
2047          Apply
2048            (Call
2049               ("BranchTo",ATy(qTy,qTy),
2050                CC[EX(Var("address",F32),LN 31,LN 1,FTy 31),LW(0,1)]),
2051             qVar"state"))))
2052;
2053val BXWritePC_def = Def
2054  ("BXWritePC",Var("address",F32),
2055   Close
2056     (qVar"state",
2057      ITB([(EQ(Apply
2058                 (Call("CurrentInstrSet",ATy(qTy,CTy"InstrSet"),LU),
2059                  qVar"state"),LC("InstrSet_ThumbEE",CTy"InstrSet")),
2060            ITE(Bop(Bit,Var("address",F32),LN 0),
2061                Apply
2062                  (Call
2063                     ("BranchTo",ATy(qTy,qTy),
2064                      CC[EX(Var("address",F32),LN 31,LN 1,FTy 31),LW(0,1)]),
2065                   qVar"state"),
2066                Mop(Snd,
2067                    Apply
2068                      (Call
2069                         ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2070                          Call
2071                            ("UNPREDICTABLE",CTy"exception",LS"BXWritePC")),
2072                       qVar"state")))),
2073           (Bop(Bit,Var("address",F32),LN 0),
2074            Apply
2075              (Call
2076                 ("BranchTo",ATy(qTy,qTy),
2077                  CC[EX(Var("address",F32),LN 31,LN 1,FTy 31),LW(0,1)]),
2078               Apply
2079                 (Call
2080                    ("SelectInstrSet",ATy(qTy,qTy),
2081                     LC("InstrSet_Thumb",CTy"InstrSet")),qVar"state"))),
2082           (Mop(Not,Bop(Bit,Var("address",F32),LN 1)),
2083            Apply
2084              (Call("BranchTo",ATy(qTy,qTy),Var("address",F32)),
2085               Apply
2086                 (Call
2087                    ("SelectInstrSet",ATy(qTy,qTy),
2088                     LC("InstrSet_ARM",CTy"InstrSet")),qVar"state")))],
2089          Mop(Snd,
2090              Apply
2091                (Call
2092                   ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2093                    Call("UNPREDICTABLE",CTy"exception",LS"BXWritePC")),
2094                 qVar"state")))))
2095;
2096val LoadWritePC_def = Def
2097  ("LoadWritePC",Var("address",F32),
2098   Close
2099     (qVar"state",
2100      ITE(Bop(Ge,Apply(Call("ArchVersion",ATy(qTy,nTy),LU),qVar"state"),
2101              LN 5),
2102          Apply
2103            (Call("BXWritePC",ATy(qTy,qTy),Var("address",F32)),qVar"state"),
2104          Apply
2105            (Call("BranchWritePC",ATy(qTy,qTy),Var("address",F32)),
2106             qVar"state"))))
2107;
2108val ALUWritePC_def = Def
2109  ("ALUWritePC",Var("address",F32),
2110   Close
2111     (qVar"state",
2112      ITE(Bop(And,
2113              Bop(Ge,
2114                  Apply(Call("ArchVersion",ATy(qTy,nTy),LU),qVar"state"),
2115                  LN 7),
2116              EQ(Apply
2117                   (Call("CurrentInstrSet",ATy(qTy,CTy"InstrSet"),LU),
2118                    qVar"state"),LC("InstrSet_ARM",CTy"InstrSet"))),
2119          Apply
2120            (Call("BXWritePC",ATy(qTy,qTy),Var("address",F32)),qVar"state"),
2121          Apply
2122            (Call("BranchWritePC",ATy(qTy,qTy),Var("address",F32)),
2123             qVar"state"))))
2124;
2125val ThisInstrLength_def = Def
2126  ("ThisInstrLength",AVar uTy,
2127   Close
2128     (qVar"state",
2129      ITE(EQ(Dest("Encoding",CTy"Encoding",qVar"state"),
2130             LC("Encoding_Thumb",CTy"Encoding")),LN 16,LN 32)))
2131;
2132val IncPC_def = Def
2133  ("IncPC",AVar uTy,
2134   Close
2135     (qVar"state",
2136      Apply
2137        (Call
2138           ("BranchTo",ATy(qTy,qTy),
2139            Bop(Add,
2140                Apply
2141                  (Dest("REG",ATy(CTy"RName",F32),qVar"state"),
2142                   LC("RName_PC",CTy"RName")),
2143                ITE(EQ(Apply
2144                         (Call("ThisInstrLength",ATy(qTy,nTy),LU),
2145                          qVar"state"),LN 16),LW(2,32),LW(4,32)))),
2146         qVar"state")))
2147;
2148val mem1_def = Def
2149  ("mem1",Var("address",F32),
2150   Close
2151     (qVar"state",
2152      Mop(Cast vTy,
2153          Apply(Dest("MEM",ATy(F32,F8),qVar"state"),Var("address",F32)))))
2154;
2155val mem_def = Def
2156  ("mem",TP[Var("address",F32),nVar"size"],
2157   Close
2158     (qVar"state",
2159      CS(nVar"size",
2160         [(LN 1,
2161           TP[EX(Apply
2162                   (Call
2163                      ("mem1",ATy(qTy,vTy),
2164                       Bop(Add,Var("address",F32),LW(0,32))),qVar"state"),
2165                 LN 7,LN 0,vTy),qVar"state"]),
2166          (LN 2,
2167           TP[EX(CC[Apply
2168                      (Call
2169                         ("mem1",ATy(qTy,vTy),
2170                          Bop(Add,Var("address",F32),LW(1,32))),
2171                       qVar"state"),
2172                    Apply
2173                      (Call
2174                         ("mem1",ATy(qTy,vTy),
2175                          Bop(Add,Var("address",F32),LW(0,32))),
2176                       qVar"state")],LN 15,LN 0,vTy),qVar"state"]),
2177          (LN 4,
2178           TP[EX(CC[Apply
2179                      (Call
2180                         ("mem1",ATy(qTy,vTy),
2181                          Bop(Add,Var("address",F32),LW(3,32))),
2182                       qVar"state"),
2183                    Apply
2184                      (Call
2185                         ("mem1",ATy(qTy,vTy),
2186                          Bop(Add,Var("address",F32),LW(2,32))),
2187                       qVar"state"),
2188                    Apply
2189                      (Call
2190                         ("mem1",ATy(qTy,vTy),
2191                          Bop(Add,Var("address",F32),LW(1,32))),
2192                       qVar"state"),
2193                    Apply
2194                      (Call
2195                         ("mem1",ATy(qTy,vTy),
2196                          Bop(Add,Var("address",F32),LW(0,32))),
2197                       qVar"state")],LN 31,LN 0,vTy),qVar"state"]),
2198          (LN 8,
2199           TP[EX(CC[Apply
2200                      (Call
2201                         ("mem1",ATy(qTy,vTy),
2202                          Bop(Add,Var("address",F32),LW(7,32))),
2203                       qVar"state"),
2204                    Apply
2205                      (Call
2206                         ("mem1",ATy(qTy,vTy),
2207                          Bop(Add,Var("address",F32),LW(6,32))),
2208                       qVar"state"),
2209                    Apply
2210                      (Call
2211                         ("mem1",ATy(qTy,vTy),
2212                          Bop(Add,Var("address",F32),LW(5,32))),
2213                       qVar"state"),
2214                    Apply
2215                      (Call
2216                         ("mem1",ATy(qTy,vTy),
2217                          Bop(Add,Var("address",F32),LW(4,32))),
2218                       qVar"state"),
2219                    Apply
2220                      (Call
2221                         ("mem1",ATy(qTy,vTy),
2222                          Bop(Add,Var("address",F32),LW(3,32))),
2223                       qVar"state"),
2224                    Apply
2225                      (Call
2226                         ("mem1",ATy(qTy,vTy),
2227                          Bop(Add,Var("address",F32),LW(2,32))),
2228                       qVar"state"),
2229                    Apply
2230                      (Call
2231                         ("mem1",ATy(qTy,vTy),
2232                          Bop(Add,Var("address",F32),LW(1,32))),
2233                       qVar"state"),
2234                    Apply
2235                      (Call
2236                         ("mem1",ATy(qTy,vTy),
2237                          Bop(Add,Var("address",F32),LW(0,32))),
2238                       qVar"state")],LN 63,LN 0,vTy),qVar"state"]),
2239          (AVar nTy,
2240           Apply
2241             (Call
2242                ("raise'exception",ATy(qTy,PTy(vTy,qTy)),
2243                 Call
2244                   ("ASSERT",CTy"exception",LS"mem: size in {1, 2, 4, 8}")),
2245              qVar"state"))])))
2246;
2247val write'mem_def = Def
2248  ("write'mem",TP[vVar"value",Var("address",F32),nVar"size"],
2249   Close
2250     (qVar"state",
2251      CS(nVar"size",
2252         [(LN 1,
2253           Rupd
2254             ("MEM",
2255              TP[qVar"state",
2256                 Fupd
2257                   (Dest("MEM",ATy(F32,F8),qVar"state"),
2258                    Bop(Add,Var("address",F32),LW(0,32)),
2259                    Mop(Cast F8,EX(vVar"value",LN 7,LN 0,vTy)))])),
2260          (LN 2,
2261           Let(qVar"s",
2262               Rupd
2263                 ("MEM",
2264                  TP[qVar"state",
2265                     Fupd
2266                       (Dest("MEM",ATy(F32,F8),qVar"state"),
2267                        Bop(Add,Var("address",F32),LW(0,32)),
2268                        Mop(Cast F8,EX(vVar"value",LN 7,LN 0,vTy)))]),
2269               Rupd
2270                 ("MEM",
2271                  TP[qVar"s",
2272                     Fupd
2273                       (Dest("MEM",ATy(F32,F8),qVar"s"),
2274                        Bop(Add,Var("address",F32),LW(1,32)),
2275                        Mop(Cast F8,EX(vVar"value",LN 15,LN 8,vTy)))]))),
2276          (LN 4,
2277           Let(qVar"s",
2278               Rupd
2279                 ("MEM",
2280                  TP[qVar"state",
2281                     Fupd
2282                       (Dest("MEM",ATy(F32,F8),qVar"state"),
2283                        Bop(Add,Var("address",F32),LW(0,32)),
2284                        Mop(Cast F8,EX(vVar"value",LN 7,LN 0,vTy)))]),
2285               Let(qVar"s",
2286                   Rupd
2287                     ("MEM",
2288                      TP[qVar"s",
2289                         Fupd
2290                           (Dest("MEM",ATy(F32,F8),qVar"s"),
2291                            Bop(Add,Var("address",F32),LW(1,32)),
2292                            Mop(Cast F8,EX(vVar"value",LN 15,LN 8,vTy)))]),
2293                   Let(qVar"s",
2294                       Rupd
2295                         ("MEM",
2296                          TP[qVar"s",
2297                             Fupd
2298                               (Dest("MEM",ATy(F32,F8),qVar"s"),
2299                                Bop(Add,Var("address",F32),LW(2,32)),
2300                                Mop(Cast F8,
2301                                    EX(vVar"value",LN 23,LN 16,vTy)))]),
2302                       Rupd
2303                         ("MEM",
2304                          TP[qVar"s",
2305                             Fupd
2306                               (Dest("MEM",ATy(F32,F8),qVar"s"),
2307                                Bop(Add,Var("address",F32),LW(3,32)),
2308                                Mop(Cast F8,
2309                                    EX(vVar"value",LN 31,LN 24,vTy)))]))))),
2310          (LN 8,
2311           Let(qVar"s",
2312               Rupd
2313                 ("MEM",
2314                  TP[qVar"state",
2315                     Fupd
2316                       (Dest("MEM",ATy(F32,F8),qVar"state"),
2317                        Bop(Add,Var("address",F32),LW(0,32)),
2318                        Mop(Cast F8,EX(vVar"value",LN 7,LN 0,vTy)))]),
2319               Let(qVar"s",
2320                   Rupd
2321                     ("MEM",
2322                      TP[qVar"s",
2323                         Fupd
2324                           (Dest("MEM",ATy(F32,F8),qVar"s"),
2325                            Bop(Add,Var("address",F32),LW(1,32)),
2326                            Mop(Cast F8,EX(vVar"value",LN 15,LN 8,vTy)))]),
2327                   Let(qVar"s",
2328                       Rupd
2329                         ("MEM",
2330                          TP[qVar"s",
2331                             Fupd
2332                               (Dest("MEM",ATy(F32,F8),qVar"s"),
2333                                Bop(Add,Var("address",F32),LW(2,32)),
2334                                Mop(Cast F8,
2335                                    EX(vVar"value",LN 23,LN 16,vTy)))]),
2336                       Let(qVar"s",
2337                           Rupd
2338                             ("MEM",
2339                              TP[qVar"s",
2340                                 Fupd
2341                                   (Dest("MEM",ATy(F32,F8),qVar"s"),
2342                                    Bop(Add,Var("address",F32),LW(3,32)),
2343                                    Mop(Cast F8,
2344                                        EX(vVar"value",LN 31,LN 24,vTy)))]),
2345                           Let(qVar"s",
2346                               Rupd
2347                                 ("MEM",
2348                                  TP[qVar"s",
2349                                     Fupd
2350                                       (Dest("MEM",ATy(F32,F8),qVar"s"),
2351                                        Bop(Add,Var("address",F32),
2352                                            LW(4,32)),
2353                                        Mop(Cast F8,
2354                                            EX(vVar"value",LN 39,LN 32,vTy)))]),
2355                               Let(qVar"s",
2356                                   Rupd
2357                                     ("MEM",
2358                                      TP[qVar"s",
2359                                         Fupd
2360                                           (Dest
2361                                              ("MEM",ATy(F32,F8),qVar"s"),
2362                                            Bop(Add,Var("address",F32),
2363                                                LW(5,32)),
2364                                            Mop(Cast F8,
2365                                                EX(vVar"value",LN 47,
2366                                                   LN 40,vTy)))]),
2367                                   Let(qVar"s",
2368                                       Rupd
2369                                         ("MEM",
2370                                          TP[qVar"s",
2371                                             Fupd
2372                                               (Dest
2373                                                  ("MEM",ATy(F32,F8),
2374                                                   qVar"s"),
2375                                                Bop(Add,
2376                                                    Var("address",F32),
2377                                                    LW(6,32)),
2378                                                Mop(Cast F8,
2379                                                    EX(vVar"value",LN 55,
2380                                                       LN 48,vTy)))]),
2381                                       Rupd
2382                                         ("MEM",
2383                                          TP[qVar"s",
2384                                             Fupd
2385                                               (Dest
2386                                                  ("MEM",ATy(F32,F8),
2387                                                   qVar"s"),
2388                                                Bop(Add,
2389                                                    Var("address",F32),
2390                                                    LW(7,32)),
2391                                                Mop(Cast F8,
2392                                                    EX(vVar"value",LN 63,
2393                                                       LN 56,vTy)))]))))))))),
2394          (AVar nTy,
2395           Mop(Snd,
2396               Apply
2397                 (Call
2398                    ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2399                     Call
2400                       ("ASSERT",CTy"exception",
2401                        LS"mem: size in {1, 2, 4, 8}")),qVar"state")))])))
2402;
2403val BigEndianReverse_def = Def
2404  ("BigEndianReverse",TP[vVar"value",nVar"n"],
2405   Close
2406     (qVar"state",
2407      CS(nVar"n",
2408         [(LN 1,TP[EX(vVar"value",LN 7,LN 0,vTy),qVar"state"]),
2409          (LN 2,
2410           TP[CC[EX(vVar"value",LN 7,LN 0,vTy),
2411                 EX(vVar"value",LN 15,LN 8,vTy)],qVar"state"]),
2412          (LN 4,
2413           TP[CC[EX(vVar"value",LN 7,LN 0,vTy),
2414                 EX(vVar"value",LN 15,LN 8,vTy),
2415                 EX(vVar"value",LN 23,LN 16,vTy),
2416                 EX(vVar"value",LN 31,LN 24,vTy)],qVar"state"]),
2417          (LN 8,
2418           TP[CC[EX(vVar"value",LN 7,LN 0,vTy),
2419                 EX(vVar"value",LN 15,LN 8,vTy),
2420                 EX(vVar"value",LN 23,LN 16,vTy),
2421                 EX(vVar"value",LN 31,LN 24,vTy),
2422                 EX(vVar"value",LN 39,LN 32,vTy),
2423                 EX(vVar"value",LN 47,LN 40,vTy),
2424                 EX(vVar"value",LN 55,LN 48,vTy),
2425                 EX(vVar"value",LN 63,LN 56,vTy)],qVar"state"]),
2426          (AVar nTy,
2427           Apply
2428             (Call
2429                ("raise'exception",ATy(qTy,PTy(vTy,qTy)),
2430                 Call
2431                   ("ASSERT",CTy"exception",
2432                    LS"BigEndianReverse: n in {1, 2, 4, 8}")),qVar"state"))])))
2433;
2434val Align_def = Def
2435  ("Align",TP[Var("w",BTy"N"),nVar"n"],
2436   Mop(Cast(BTy"N"),
2437       Bop(Mul,nVar"n",Bop(Div,Mop(Cast nTy,Var("w",BTy"N")),nVar"n"))))
2438;
2439val Aligned_def = Def
2440  ("Aligned",TP[Var("w",BTy"N"),nVar"n"],
2441   EQ(Var("w",BTy"N"),Call("Align",BTy"N",TP[Var("w",BTy"N"),nVar"n"])))
2442;
2443val MemA_with_priv_def = Def
2444  ("MemA_with_priv",TP[Var("address",F32),nVar"size",bVar"privileged"],
2445   Close
2446     (qVar"state",
2447      Let(TP[Var("r",BTy"N"),Var("s1",PTy(F32,qTy))],
2448          Let(Var("s",PTy(F32,qTy)),
2449              ITB([(Call("Aligned",bTy,TP[Var("address",F32),nVar"size"]),
2450                    TP[Var("address",F32),qVar"state"]),
2451                   (Bop(Or,
2452                        Dest
2453                          ("A",bTy,
2454                           Dest
2455                             ("SCTLR",CTy"SCTLR",
2456                              Dest("CP15",CTy"CP15",qVar"state"))),
2457                        Dest
2458                          ("U",bTy,
2459                           Dest
2460                             ("SCTLR",CTy"SCTLR",
2461                              Dest("CP15",CTy"CP15",qVar"state")))),
2462                    TP[LX F32,
2463                       Mop(Snd,
2464                           Apply
2465                             (Call
2466                                ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2467                                 Call
2468                                   ("AlignmentFault",CTy"exception",
2469                                    Var("address",F32))),qVar"state"))])],
2470                  TP[Call("Align",F32,TP[Var("address",F32),nVar"size"]),
2471                     qVar"state"]),
2472              Let(TP[vVar"v",Var("s",PTy(F32,qTy))],
2473                  Let(TP[vVar"v",qVar"s3"],
2474                      Apply
2475                        (Call
2476                           ("mem",ATy(qTy,PTy(vTy,qTy)),
2477                            TP[Mop(Fst,Var("s",PTy(F32,qTy))),nVar"size"]),
2478                         Mop(Snd,Var("s",PTy(F32,qTy)))),
2479                      TP[vVar"v",Mop(Fst,Var("s",PTy(F32,qTy))),qVar"s3"]),
2480                  Let(TP[Var("r",BTy"N"),Var("s1",PTy(vTy,PTy(F32,qTy)))],
2481                      Let(Var("s0",PTy(vTy,PTy(F32,qTy))),
2482                          TP[vVar"v",Var("s",PTy(F32,qTy))],
2483                          Let(Var("s",PTy(vTy,PTy(F32,qTy))),
2484                              ITE(Dest
2485                                    ("E",bTy,
2486                                     Dest
2487                                       ("CPSR",CTy"PSR",
2488                                        Mop(Snd,Var("s",PTy(F32,qTy))))),
2489                                  Let(TP[vVar"v",
2490                                         Var("s",PTy(vTy,PTy(F32,qTy)))],
2491                                      CS(Let(TP[vVar"v",qVar"s3"],
2492                                             Apply
2493                                               (Call
2494                                                  ("BigEndianReverse",
2495                                                   ATy(qTy,PTy(vTy,qTy)),
2496                                                   TP[Mop(Fst,
2497                                                          Var("s0",
2498                                                              PTy(vTy,
2499                                                                  PTy(F32,
2500                                                                      qTy)))),
2501                                                      nVar"size"]),
2502                                                Mop(Snd,
2503                                                    Mop(Snd,
2504                                                        Var("s0",
2505                                                            PTy(vTy,
2506                                                                PTy(F32,
2507                                                                    qTy)))))),
2508                                             TP[vVar"v",
2509                                                Mop(Fst,
2510                                                    Mop(Snd,
2511                                                        Var("s0",
2512                                                            PTy(vTy,
2513                                                                PTy(F32,
2514                                                                    qTy))))),
2515                                                qVar"s3"]),
2516                                         [(TP[vVar"v",
2517                                              Var("s3",PTy(F32,qTy))],
2518                                           TP[vVar"v",
2519                                              Mop(Fst,
2520                                                  Var("s0",
2521                                                      PTy(vTy,PTy(F32,qTy)))),
2522                                              Var("s3",PTy(F32,qTy))])]),
2523                                      TP[vVar"v",
2524                                         Mop(Snd,
2525                                             Var("s",PTy(vTy,PTy(F32,qTy))))]),
2526                                  Var("s0",PTy(vTy,PTy(F32,qTy)))),
2527                              TP[Mop(Cast(BTy"N"),
2528                                     Mop(Fst,
2529                                         Var("s",PTy(vTy,PTy(F32,qTy))))),
2530                                 Var("s",PTy(vTy,PTy(F32,qTy)))])),
2531                      TP[Var("r",BTy"N"),
2532                         Mop(Snd,Var("s1",PTy(vTy,PTy(F32,qTy))))]))),
2533          TP[Var("r",BTy"N"),Mop(Snd,Var("s1",PTy(F32,qTy)))])))
2534;
2535val write'MemA_with_priv_def = Def
2536  ("write'MemA_with_priv",
2537   TP[Var("value",BTy"N"),Var("address",F32),nVar"size",bVar"privileged"],
2538   Close
2539     (qVar"state",
2540      Let(Var("s",PTy(F32,qTy)),
2541          ITB([(Call("Aligned",bTy,TP[Var("address",F32),nVar"size"]),
2542                TP[Var("address",F32),qVar"state"]),
2543               (Bop(Or,
2544                    Dest
2545                      ("A",bTy,
2546                       Dest
2547                         ("SCTLR",CTy"SCTLR",
2548                          Dest("CP15",CTy"CP15",qVar"state"))),
2549                    Dest
2550                      ("U",bTy,
2551                       Dest
2552                         ("SCTLR",CTy"SCTLR",
2553                          Dest("CP15",CTy"CP15",qVar"state")))),
2554                TP[LX F32,
2555                   Mop(Snd,
2556                       Apply
2557                         (Call
2558                            ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2559                             Call
2560                               ("AlignmentFault",CTy"exception",
2561                                Var("address",F32))),qVar"state"))])],
2562              TP[Call("Align",F32,TP[Var("address",F32),nVar"size"]),
2563                 qVar"state"]),
2564          Let(TP[vVar"v",Var("s",PTy(F32,qTy))],
2565              ITE(Dest
2566                    ("E",bTy,
2567                     Dest("CPSR",CTy"PSR",Mop(Snd,Var("s",PTy(F32,qTy))))),
2568                  Let(TP[vVar"v",qVar"s3"],
2569                      Apply
2570                        (Call
2571                           ("BigEndianReverse",ATy(qTy,PTy(vTy,qTy)),
2572                            TP[Mop(Cast vTy,Var("value",BTy"N")),
2573                               nVar"size"]),Mop(Snd,Var("s",PTy(F32,qTy)))),
2574                      TP[vVar"v",Mop(Fst,Var("s",PTy(F32,qTy))),qVar"s3"]),
2575                  TP[Mop(Cast vTy,Var("value",BTy"N")),
2576                     Var("s",PTy(F32,qTy))]),
2577              Apply
2578                (Call
2579                   ("write'mem",ATy(qTy,qTy),
2580                    TP[vVar"v",Mop(Fst,Var("s",PTy(F32,qTy))),nVar"size"]),
2581                 Mop(Snd,Var("s",PTy(F32,qTy))))))))
2582;
2583val MemA_unpriv_def = Def
2584  ("MemA_unpriv",TP[Var("address",F32),nVar"size"],
2585   Close
2586     (qVar"state",
2587      Apply
2588        (Call
2589           ("MemA_with_priv",ATy(qTy,PTy(BTy"N",qTy)),
2590            TP[Var("address",F32),nVar"size",LF]),qVar"state")))
2591;
2592val write'MemA_unpriv_def = Def
2593  ("write'MemA_unpriv",
2594   TP[Var("value",BTy"N"),Var("address",F32),nVar"size"],
2595   Close
2596     (qVar"state",
2597      Apply
2598        (Call
2599           ("write'MemA_with_priv",ATy(qTy,qTy),
2600            TP[Var("value",BTy"N"),Var("address",F32),nVar"size",LF]),
2601         qVar"state")))
2602;
2603val MemA_def = Def
2604  ("MemA",TP[Var("address",F32),nVar"size"],
2605   Close
2606     (qVar"state",
2607      Let(TP[bVar"v",qVar"s"],
2608          Apply
2609            (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
2610             qVar"state"),
2611          Apply
2612            (Call
2613               ("MemA_with_priv",ATy(qTy,PTy(BTy"N",qTy)),
2614                TP[Var("address",F32),nVar"size",bVar"v"]),qVar"s"))))
2615;
2616val write'MemA_def = Def
2617  ("write'MemA",TP[Var("value",BTy"N"),Var("address",F32),nVar"size"],
2618   Close
2619     (qVar"state",
2620      Let(TP[bVar"v",qVar"s"],
2621          Apply
2622            (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
2623             qVar"state"),
2624          Apply
2625            (Call
2626               ("write'MemA_with_priv",ATy(qTy,qTy),
2627                TP[Var("value",BTy"N"),Var("address",F32),nVar"size",
2628                   bVar"v"]),qVar"s"))))
2629;
2630val MemU_with_priv_def = Def
2631  ("MemU_with_priv",TP[Var("address",F32),nVar"size",bVar"privileged"],
2632   Close
2633     (qVar"state",
2634      Let(TP[Var("r",BTy"N"),Var("s1",PTy(vTy,qTy))],
2635          Let(vVar"s0",Bop(Rep,LV"0",LN 64),
2636              Let(Var("v",F32),
2637                  ITE(Bop(And,
2638                          Mop(Not,
2639                              Dest
2640                                ("A",bTy,
2641                                 Dest
2642                                   ("SCTLR",CTy"SCTLR",
2643                                    Dest("CP15",CTy"CP15",qVar"state")))),
2644                          Mop(Not,
2645                              Dest
2646                                ("U",bTy,
2647                                 Dest
2648                                   ("SCTLR",CTy"SCTLR",
2649                                    Dest("CP15",CTy"CP15",qVar"state"))))),
2650                      Call("Align",F32,TP[Var("address",F32),nVar"size"]),
2651                      Var("address",F32)),
2652                  Let(Var("s",PTy(vTy,qTy)),
2653                      ITB([(Call
2654                              ("Aligned",bTy,TP[Var("v",F32),nVar"size"]),
2655                            Let(TP[Var("v",BTy"N"),Var("s",PTy(vTy,qTy))],
2656                                Let(TP[Var("v",BTy"N"),qVar"s3"],
2657                                    Apply
2658                                      (Call
2659                                         ("MemA_with_priv",
2660                                          ATy(qTy,PTy(BTy"N",qTy)),
2661                                          TP[Var("v",F32),nVar"size",
2662                                             bVar"privileged"]),
2663                                       qVar"state"),
2664                                    TP[Var("v",BTy"N"),vVar"s0",qVar"s3"]),
2665                                TP[Mop(Cast vTy,Var("v",BTy"N")),
2666                                   Mop(Snd,Var("s",PTy(vTy,qTy)))])),
2667                           (Dest
2668                              ("A",bTy,
2669                               Dest
2670                                 ("SCTLR",CTy"SCTLR",
2671                                  Dest("CP15",CTy"CP15",qVar"state"))),
2672                            TP[vVar"s0",
2673                               Mop(Snd,
2674                                   Apply
2675                                     (Call
2676                                        ("raise'exception",
2677                                         ATy(qTy,PTy(uTy,qTy)),
2678                                         Call
2679                                           ("AlignmentFault",
2680                                            CTy"exception",
2681                                            Var("address",F32))),
2682                                      qVar"state"))])],
2683                          Let(Var("s",PTy(vTy,qTy)),
2684                              Mop(Snd,
2685                                  Apply
2686                                    (For(TP[LN 0,Bop(Sub,nVar"size",LN 1),
2687                                            Close
2688                                              (nVar"i",
2689                                               Close
2690                                                 (Var("state",PTy(vTy,qTy)),
2691                                                  Let(TP[vVar"v",
2692                                                         Var("s",
2693                                                             PTy(vTy,qTy))],
2694                                                      Let(TP[Var("v0",F8),
2695                                                             Var("s",
2696                                                                 PTy(vTy,
2697                                                                     qTy))],
2698                                                          Let(TP[Var("v",
2699                                                                     F8),
2700                                                                 qVar"s3"],
2701                                                              Apply
2702                                                                (Call
2703                                                                   ("MemA_with_priv",
2704                                                                    ATy(qTy,
2705                                                                        PTy(F8,
2706                                                                            qTy)),
2707                                                                    TP[Bop(Add,
2708                                                                           Var("v",
2709                                                                               F32),
2710                                                                           Mop(Cast
2711                                                                                 F32,
2712                                                                               nVar"i")),
2713                                                                       LN
2714                                                                        1,
2715                                                                       bVar"privileged"]),
2716                                                                 Mop(Snd,
2717                                                                     Var("state",
2718                                                                         PTy(vTy,
2719                                                                             qTy)))),
2720                                                              TP[Var("v",
2721                                                                     F8),
2722                                                                 Mop(Fst,
2723                                                                     Var("state",
2724                                                                         PTy(vTy,
2725                                                                             qTy))),
2726                                                                 qVar"s3"]),
2727                                                          TP[BFI(Bop(Add,
2728                                                                     Bop(Mul,
2729                                                                         LN
2730                                                                          8,
2731                                                                         nVar"i"),
2732                                                                     LN 7),
2733                                                                 Bop(Mul,
2734                                                                     LN 8,
2735                                                                     nVar"i"),
2736                                                                 Mop(Cast
2737                                                                       vTy,
2738                                                                     Var("v0",
2739                                                                         F8)),
2740                                                                 Mop(Fst,
2741                                                                     Var("state",
2742                                                                         PTy(vTy,
2743                                                                             qTy)))),
2744                                                             Var("s",
2745                                                                 PTy(vTy,
2746                                                                     qTy))]),
2747                                                      TP[LU,vVar"v",
2748                                                         Mop(Snd,
2749                                                             Var("s",
2750                                                                 PTy(vTy,
2751                                                                     qTy)))])))]),
2752                                     TP[vVar"s0",qVar"state"])),
2753                              ITE(Dest
2754                                    ("E",bTy,
2755                                     Dest
2756                                       ("CPSR",CTy"PSR",
2757                                        Mop(Snd,Var("s",PTy(vTy,qTy))))),
2758                                  Let(TP[vVar"v",Var("s",PTy(vTy,qTy))],
2759                                      CS(Apply
2760                                           (Call
2761                                              ("BigEndianReverse",
2762                                               ATy(qTy,PTy(vTy,qTy)),
2763                                               TP[Mop(Fst,
2764                                                      Var("s",PTy(vTy,qTy))),
2765                                                  nVar"size"]),
2766                                            Mop(Snd,Var("s",PTy(vTy,qTy)))),
2767                                         [(TP[vVar"v",qVar"s3"],
2768                                           TP[vVar"v",
2769                                              Mop(Fst,
2770                                                  Var("s",PTy(vTy,qTy))),
2771                                              qVar"s3"])]),
2772                                      TP[vVar"v",
2773                                         Mop(Snd,Var("s",PTy(vTy,qTy)))]),
2774                                  Var("s",PTy(vTy,qTy))))),
2775                      TP[Mop(Cast(BTy"N"),Mop(Fst,Var("s",PTy(vTy,qTy)))),
2776                         Var("s",PTy(vTy,qTy))]))),
2777          TP[Var("r",BTy"N"),Mop(Snd,Var("s1",PTy(vTy,qTy)))])))
2778;
2779val write'MemU_with_priv_def = Def
2780  ("write'MemU_with_priv",
2781   TP[Var("value",BTy"N"),Var("address",F32),nVar"size",bVar"privileged"],
2782   Close
2783     (qVar"state",
2784      Let(Var("v",F32),
2785          ITE(Bop(And,
2786                  Mop(Not,
2787                      Dest
2788                        ("A",bTy,
2789                         Dest
2790                           ("SCTLR",CTy"SCTLR",
2791                            Dest("CP15",CTy"CP15",qVar"state")))),
2792                  Mop(Not,
2793                      Dest
2794                        ("U",bTy,
2795                         Dest
2796                           ("SCTLR",CTy"SCTLR",
2797                            Dest("CP15",CTy"CP15",qVar"state"))))),
2798              Call("Align",F32,TP[Var("address",F32),nVar"size"]),
2799              Var("address",F32)),
2800          ITB([(Call("Aligned",bTy,TP[Var("v",F32),nVar"size"]),
2801                Apply
2802                  (Call
2803                     ("write'MemA_with_priv",ATy(qTy,qTy),
2804                      TP[Var("value",BTy"N"),Var("v",F32),nVar"size",
2805                         bVar"privileged"]),qVar"state")),
2806               (Dest
2807                  ("A",bTy,
2808                   Dest
2809                     ("SCTLR",CTy"SCTLR",
2810                      Dest("CP15",CTy"CP15",qVar"state"))),
2811                Mop(Snd,
2812                    Apply
2813                      (Call
2814                         ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
2815                          Call
2816                            ("AlignmentFault",CTy"exception",
2817                             Var("address",F32))),qVar"state")))],
2818              Let(TP[vVar"v0",qVar"s"],
2819                  ITE(Dest("E",bTy,Dest("CPSR",CTy"PSR",qVar"state")),
2820                      Apply
2821                        (Call
2822                           ("BigEndianReverse",ATy(qTy,PTy(vTy,qTy)),
2823                            TP[Mop(Cast vTy,Var("value",BTy"N")),
2824                               nVar"size"]),qVar"state"),
2825                      TP[Mop(Cast vTy,Var("value",BTy"N")),qVar"state"]),
2826                  Mop(Snd,
2827                      Apply
2828                        (For(TP[LN 0,Bop(Sub,nVar"size",LN 1),
2829                                Close
2830                                  (nVar"i",
2831                                   Close
2832                                     (qVar"state",
2833                                      TP[LU,
2834                                         Apply
2835                                           (Call
2836                                              ("write'MemA_with_priv",
2837                                               ATy(qTy,qTy),
2838                                               TP[Mop(Cast F8,
2839                                                      EX(vVar"v0",
2840                                                         Bop(Add,
2841                                                             Bop(Mul,LN 8,
2842                                                                 nVar"i"),
2843                                                             LN 7),
2844                                                         Bop(Mul,LN 8,
2845                                                             nVar"i"),vTy)),
2846                                                  Bop(Add,Var("v",F32),
2847                                                      Mop(Cast F32,nVar"i")),
2848                                                  LN 1,bVar"privileged"]),
2849                                            qVar"state")]))]),qVar"s")))))))
2850;
2851val MemU_unpriv_def = Def
2852  ("MemU_unpriv",TP[Var("address",F32),nVar"size"],
2853   Close
2854     (qVar"state",
2855      Apply
2856        (Call
2857           ("MemU_with_priv",ATy(qTy,PTy(BTy"N",qTy)),
2858            TP[Var("address",F32),nVar"size",LF]),qVar"state")))
2859;
2860val write'MemU_unpriv_def = Def
2861  ("write'MemU_unpriv",
2862   TP[Var("value",BTy"N"),Var("address",F32),nVar"size"],
2863   Close
2864     (qVar"state",
2865      Apply
2866        (Call
2867           ("write'MemU_with_priv",ATy(qTy,qTy),
2868            TP[Var("value",BTy"N"),Var("address",F32),nVar"size",LF]),
2869         qVar"state")))
2870;
2871val MemU_def = Def
2872  ("MemU",TP[Var("address",F32),nVar"size"],
2873   Close
2874     (qVar"state",
2875      Let(TP[bVar"v",qVar"s"],
2876          Apply
2877            (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
2878             qVar"state"),
2879          Apply
2880            (Call
2881               ("MemU_with_priv",ATy(qTy,PTy(BTy"N",qTy)),
2882                TP[Var("address",F32),nVar"size",bVar"v"]),qVar"s"))))
2883;
2884val write'MemU_def = Def
2885  ("write'MemU",TP[Var("value",BTy"N"),Var("address",F32),nVar"size"],
2886   Close
2887     (qVar"state",
2888      Let(TP[bVar"v",qVar"s"],
2889          Apply
2890            (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
2891             qVar"state"),
2892          Apply
2893            (Call
2894               ("write'MemU_with_priv",ATy(qTy,qTy),
2895                TP[Var("value",BTy"N"),Var("address",F32),nVar"size",
2896                   bVar"v"]),qVar"s"))))
2897;
2898val NullCheckIfThumbEE_def = Def
2899  ("NullCheckIfThumbEE",Var("n",F4),
2900   Close
2901     (qVar"state",
2902      Let(TP[bVar"r",Var("s1",PTy(bTy,qTy))],
2903          Let(Var("s",PTy(bTy,qTy)),
2904              ITE(EQ(Apply
2905                       (Call("CurrentInstrSet",ATy(qTy,CTy"InstrSet"),LU),
2906                        qVar"state"),LC("InstrSet_ThumbEE",CTy"InstrSet")),
2907                  ITB([(EQ(Var("n",F4),LW(15,4)),
2908                        Let(TP[Var("v",F32),Var("s",PTy(bTy,qTy))],
2909                            Let(TP[Var("v",F32),qVar"s3"],
2910                                Apply
2911                                  (Const("PC",ATy(qTy,PTy(F32,qTy))),
2912                                   qVar"state"),
2913                                TP[Var("v",F32),LF,qVar"s3"]),
2914                            ITE(EQ(Call("Align",F32,TP[Var("v",F32),LN 4]),
2915                                   LW(0,32)),
2916                                TP[Mop(Fst,Var("s",PTy(bTy,qTy))),
2917                                   Mop(Snd,
2918                                       Apply
2919                                         (Call
2920                                            ("raise'exception",
2921                                             ATy(qTy,PTy(uTy,qTy)),
2922                                             Call
2923                                               ("UNPREDICTABLE",
2924                                                CTy"exception",
2925                                                LS"NullCheckIfThumbEE")),
2926                                          Mop(Snd,Var("s",PTy(bTy,qTy)))))],
2927                                Var("s",PTy(bTy,qTy))))),
2928                       (EQ(Var("n",F4),LW(13,4)),
2929                        Let(TP[Var("v",F32),Var("s",PTy(bTy,qTy))],
2930                            Let(TP[Var("v",F32),qVar"s3"],
2931                                Apply
2932                                  (Const("SP",ATy(qTy,PTy(F32,qTy))),
2933                                   qVar"state"),
2934                                TP[Var("v",F32),LF,qVar"s3"]),
2935                            ITE(EQ(Var("v",F32),LW(0,32)),
2936                                TP[Mop(Fst,Var("s",PTy(bTy,qTy))),
2937                                   Mop(Snd,
2938                                       Apply
2939                                         (Call
2940                                            ("raise'exception",
2941                                             ATy(qTy,PTy(uTy,qTy)),
2942                                             Call
2943                                               ("UNPREDICTABLE",
2944                                                CTy"exception",
2945                                                LS"NullCheckIfThumbEE")),
2946                                          Mop(Snd,Var("s",PTy(bTy,qTy)))))],
2947                                Var("s",PTy(bTy,qTy)))))],
2948                      Let(TP[Var("v",F32),Var("s",PTy(bTy,qTy))],
2949                          Let(TP[Var("v",F32),qVar"s3"],
2950                              Apply
2951                                (Call
2952                                   ("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
2953                                 qVar"state"),TP[Var("v",F32),LF,qVar"s3"]),
2954                          ITE(EQ(Var("v",F32),LW(0,32)),
2955                              Let(TP[Var("v",F32),Var("s",PTy(bTy,qTy))],
2956                                  Let(TP[Var("v",F32),qVar"s3"],
2957                                      Apply
2958                                        (Const("PC",ATy(qTy,PTy(F32,qTy))),
2959                                         Mop(Snd,Var("s",PTy(bTy,qTy)))),
2960                                      TP[Var("v",F32),
2961                                         Mop(Fst,Var("s",PTy(bTy,qTy))),
2962                                         qVar"s3"]),
2963                                  Let(qVar"s1",
2964                                      Apply
2965                                        (Call
2966                                           ("write'ITSTATE",ATy(qTy,qTy),
2967                                            LW(0,8)),
2968                                         Apply
2969                                           (Call
2970                                              ("write'LR",ATy(qTy,qTy),
2971                                               CC[EX(Var("v",F32),LN 31,
2972                                                     LN 1,FTy 31),LW(1,1)]),
2973                                            Mop(Snd,Var("s",PTy(bTy,qTy))))),
2974                                      TP[LT,
2975                                         Apply
2976                                           (Call
2977                                              ("BranchWritePC",
2978                                               ATy(qTy,qTy),
2979                                               Bop(Sub,
2980                                                   Dest
2981                                                     ("TEEHBR",F32,
2982                                                      Dest
2983                                                        ("CP14",CTy"CP14",
2984                                                         qVar"s1")),
2985                                                   LW(4,32))),qVar"s1")])),
2986                              Var("s",PTy(bTy,qTy))))),TP[LF,qVar"state"]),
2987              TP[Mop(Not,Mop(Fst,Var("s",PTy(bTy,qTy)))),
2988                 Var("s",PTy(bTy,qTy))]),
2989          TP[bVar"r",Mop(Snd,Var("s1",PTy(bTy,qTy)))])))
2990;
2991val HighestSetBit_def = Def
2992  ("HighestSetBit",Var("w",BTy"N"),
2993   ITE(EQ(Var("w",BTy"N"),LY(0,"N")),Mop(Neg,LI 1),
2994       Mop(Cast iTy,Mop(Log,Var("w",BTy"N")))))
2995;
2996val CountLeadingZeroBits_def = Def
2997  ("CountLeadingZeroBits",Var("w",BTy"N"),
2998   Mop(Cast nTy,
2999       Bop(Sub,Bop(Sub,Mop(Cast iTy,Mop(Size,LY(0,"N"))),LI 1),
3000           Call("HighestSetBit",iTy,Var("w",BTy"N")))))
3001;
3002val LowestSetBit_def = Def
3003  ("LowestSetBit",Var("w",BTy"N"),
3004   Call("CountLeadingZeroBits",nTy,Mop(Rev,Var("w",BTy"N"))))
3005;
3006val BitCount_def = Def
3007  ("BitCount",Var("w",BTy"N"),
3008   Mop(Fst,
3009       Mop(Snd,
3010           Apply
3011             (For(TP[LN 0,Bop(Sub,Mop(Size,LY(0,"N")),LN 1),
3012                     Close
3013                       (nVar"i",
3014                        Close
3015                          (Var("state",PTy(nTy,uTy)),
3016                           TP[LU,
3017                              ITE(Bop(Bit,Var("w",BTy"N"),nVar"i"),
3018                                  TP[Bop(Add,
3019                                         Mop(Fst,Var("state",PTy(nTy,uTy))),
3020                                         LN 1),LU],
3021                                  Var("state",PTy(nTy,uTy)))]))]),
3022              TP[LN 0,LU]))))
3023;
3024val SignExtendFrom_def = Def
3025  ("SignExtendFrom",TP[Var("w",BTy"N"),nVar"p"],
3026   Let(nVar"s",Bop(Sub,Bop(Sub,Mop(Size,LY(0,"N")),LN 1),nVar"p"),
3027       Bop(Asr,Bop(Lsl,Var("w",BTy"N"),nVar"s"),nVar"s")))
3028;
3029val Extend_def = Def
3030  ("Extend",TP[bVar"unsigned",Var("w",BTy"M")],
3031   ITE(bVar"unsigned",Mop(Cast(BTy"N"),Var("w",BTy"M")),
3032       Mop(SE(BTy"N"),Var("w",BTy"M"))))
3033;
3034val UInt_def = Def
3035  ("UInt",Var("w",BTy"N"),Mop(Cast iTy,Mop(Cast nTy,Var("w",BTy"N"))))
3036;
3037val SignedSatQ_def = Def
3038  ("SignedSatQ",TP[iVar"i",nVar"N"],
3039   Close
3040     (qVar"state",
3041      TP[Let(iVar"max",Mop(Cast iTy,Bop(Exp,LN 2,Bop(Sub,nVar"N",LN 1))),
3042             ITB([(Bop(Gt,iVar"i",Bop(Sub,iVar"max",LI 1)),
3043                   TP[Mop(Cast(BTy"M"),Bop(Sub,iVar"max",LI 1)),LT]),
3044                  (Bop(Lt,iVar"i",Mop(Neg,iVar"max")),
3045                   TP[Mop(Cast(BTy"M"),Mop(Neg,iVar"max")),LT])],
3046                 TP[Mop(Cast(BTy"M"),iVar"i"),LF])),
3047         ITE(Bop(Lt,Mop(Size,LY(0,"M")),nVar"N"),
3048             Mop(Snd,
3049                 Apply
3050                   (Call
3051                      ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
3052                       Call("ASSERT",CTy"exception",LS"SignedSatQ: M < N")),
3053                    qVar"state")),qVar"state")]))
3054;
3055val UnsignedSatQ_def = Def
3056  ("UnsignedSatQ",TP[iVar"i",nVar"N"],
3057   Close
3058     (qVar"state",
3059      TP[Let(iVar"max",Mop(Cast iTy,Bop(Sub,Bop(Exp,LN 2,nVar"N"),LN 1)),
3060             ITB([(Bop(Gt,iVar"i",iVar"max"),
3061                   TP[Mop(Cast(BTy"M"),iVar"max"),LT]),
3062                  (Bop(Lt,iVar"i",LI 0),TP[LY(0,"M"),LT])],
3063                 TP[Mop(Cast(BTy"M"),iVar"i"),LF])),
3064         ITE(Bop(Lt,Mop(Size,LY(0,"M")),nVar"N"),
3065             Mop(Snd,
3066                 Apply
3067                   (Call
3068                      ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
3069                       Call
3070                         ("ASSERT",CTy"exception",LS"UnsignedSatQ: M < N")),
3071                    qVar"state")),qVar"state")]))
3072;
3073val SatQ_def = Def
3074  ("SatQ",TP[iVar"i",nVar"N",bVar"unsigned"],
3075   Close
3076     (qVar"state",
3077      ITE(bVar"unsigned",
3078          Apply
3079            (Call
3080               ("UnsignedSatQ",ATy(qTy,PTy(PTy(BTy"M",bTy),qTy)),
3081                TP[iVar"i",nVar"N"]),qVar"state"),
3082          Apply
3083            (Call
3084               ("SignedSatQ",ATy(qTy,PTy(PTy(BTy"M",bTy),qTy)),
3085                TP[iVar"i",nVar"N"]),qVar"state"))))
3086;
3087val SignedSat_def = Def
3088  ("SignedSat",TP[iVar"i",nVar"N"],
3089   Close
3090     (qVar"state",
3091      Let(TP[Var("v",PTy(BTy"M",bTy)),qVar"s"],
3092          Apply
3093            (Call
3094               ("SignedSatQ",ATy(qTy,PTy(PTy(BTy"M",bTy),qTy)),
3095                TP[iVar"i",nVar"N"]),qVar"state"),
3096          TP[Mop(Fst,Var("v",PTy(BTy"M",bTy))),qVar"s"])))
3097;
3098val UnsignedSat_def = Def
3099  ("UnsignedSat",TP[iVar"i",nVar"N"],
3100   Close
3101     (qVar"state",
3102      Let(TP[Var("v",PTy(BTy"M",bTy)),qVar"s"],
3103          Apply
3104            (Call
3105               ("UnsignedSatQ",ATy(qTy,PTy(PTy(BTy"M",bTy),qTy)),
3106                TP[iVar"i",nVar"N"]),qVar"state"),
3107          TP[Mop(Fst,Var("v",PTy(BTy"M",bTy))),qVar"s"])))
3108;
3109val LSL_C_def = Def
3110  ("LSL_C",TP[Var("x",BTy"N"),nVar"shift"],
3111   Close
3112     (qVar"state",
3113      TP[TP[Bop(Lsl,Var("x",BTy"N"),nVar"shift"),
3114            Bop(Bit,
3115                CC[Mop(Cast vTy,Var("x",BTy"N")),
3116                   Bop(Rep,LV"0",nVar"shift")],Mop(Size,LY(0,"N")))],
3117         ITE(EQ(nVar"shift",LN 0),
3118             Mop(Snd,
3119                 Apply
3120                   (Call
3121                      ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
3122                       Call("ASSERT",CTy"exception",LS"LSL_C")),
3123                    qVar"state")),qVar"state")]))
3124;
3125val LSL_def = Def
3126  ("LSL",TP[Var("x",BTy"N"),nVar"shift"],
3127   Close
3128     (qVar"state",
3129      ITE(EQ(nVar"shift",LN 0),TP[Var("x",BTy"N"),qVar"state"],
3130          Let(TP[Var("v",PTy(BTy"N",bTy)),qVar"s"],
3131              Apply
3132                (Call
3133                   ("LSL_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)),
3134                    TP[Var("x",BTy"N"),nVar"shift"]),qVar"state"),
3135              TP[Mop(Fst,Var("v",PTy(BTy"N",bTy))),qVar"s"]))))
3136;
3137val LSR_C_def = Def
3138  ("LSR_C",TP[Var("x",BTy"N"),nVar"shift"],
3139   Close
3140     (qVar"state",
3141      TP[TP[Bop(Lsr,Var("x",BTy"N"),nVar"shift"),
3142            Bop(And,Bop(Le,nVar"shift",Mop(Size,LY(0,"N"))),
3143                Bop(Bit,Var("x",BTy"N"),Bop(Sub,nVar"shift",LN 1)))],
3144         ITE(EQ(nVar"shift",LN 0),
3145             Mop(Snd,
3146                 Apply
3147                   (Call
3148                      ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
3149                       Call("ASSERT",CTy"exception",LS"LSR_C")),
3150                    qVar"state")),qVar"state")]))
3151;
3152val LSR_def = Def
3153  ("LSR",TP[Var("x",BTy"N"),nVar"shift"],
3154   Close
3155     (qVar"state",
3156      ITE(EQ(nVar"shift",LN 0),TP[Var("x",BTy"N"),qVar"state"],
3157          Let(TP[Var("v",PTy(BTy"N",bTy)),qVar"s"],
3158              Apply
3159                (Call
3160                   ("LSR_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)),
3161                    TP[Var("x",BTy"N"),nVar"shift"]),qVar"state"),
3162              TP[Mop(Fst,Var("v",PTy(BTy"N",bTy))),qVar"s"]))))
3163;
3164val ASR_C_def = Def
3165  ("ASR_C",TP[Var("x",BTy"N"),nVar"shift"],
3166   Close
3167     (qVar"state",
3168      TP[TP[Bop(Asr,Var("x",BTy"N"),nVar"shift"),
3169            Bop(Bit,Var("x",BTy"N"),
3170                Bop(Sub,Mop(Min,TP[Mop(Size,LY(0,"N")),nVar"shift"]),LN 1))],
3171         ITE(EQ(nVar"shift",LN 0),
3172             Mop(Snd,
3173                 Apply
3174                   (Call
3175                      ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
3176                       Call("ASSERT",CTy"exception",LS"ASR_C")),
3177                    qVar"state")),qVar"state")]))
3178;
3179val ASR_def = Def
3180  ("ASR",TP[Var("x",BTy"N"),nVar"shift"],
3181   Close
3182     (qVar"state",
3183      ITE(EQ(nVar"shift",LN 0),TP[Var("x",BTy"N"),qVar"state"],
3184          Let(TP[Var("v",PTy(BTy"N",bTy)),qVar"s"],
3185              Apply
3186                (Call
3187                   ("ASR_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)),
3188                    TP[Var("x",BTy"N"),nVar"shift"]),qVar"state"),
3189              TP[Mop(Fst,Var("v",PTy(BTy"N",bTy))),qVar"s"]))))
3190;
3191val ROR_C_def = Def
3192  ("ROR_C",TP[Var("x",BTy"N"),nVar"shift"],
3193   Close
3194     (qVar"state",
3195      TP[Let(Var("result",BTy"N"),Bop(Ror,Var("x",BTy"N"),nVar"shift"),
3196             TP[Var("result",BTy"N"),Mop(Msb,Var("result",BTy"N"))]),
3197         ITE(EQ(nVar"shift",LN 0),
3198             Mop(Snd,
3199                 Apply
3200                   (Call
3201                      ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
3202                       Call("ASSERT",CTy"exception",LS"ROR_C")),
3203                    qVar"state")),qVar"state")]))
3204;
3205val ROR_def = Def
3206  ("ROR",TP[Var("x",BTy"N"),nVar"shift"],
3207   Close
3208     (qVar"state",
3209      ITE(EQ(nVar"shift",LN 0),TP[Var("x",BTy"N"),qVar"state"],
3210          Let(TP[Var("v",PTy(BTy"N",bTy)),qVar"s"],
3211              Apply
3212                (Call
3213                   ("ROR_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)),
3214                    TP[Var("x",BTy"N"),nVar"shift"]),qVar"state"),
3215              TP[Mop(Fst,Var("v",PTy(BTy"N",bTy))),qVar"s"]))))
3216;
3217val RRX_C_def = Def
3218  ("RRX_C",TP[Var("x",BTy"N"),bVar"carry_in"],
3219   TP[Mop(Cast(BTy"N"),
3220          CC[Mop(Cast vTy,bVar"carry_in"),
3221             EX(Mop(Cast vTy,Var("x",BTy"N")),
3222                Bop(Sub,Mop(Size,LY(0,"N")),LN 1),LN 1,vTy)]),
3223      Bop(Bit,Var("x",BTy"N"),LN 0)])
3224;
3225val RRX_def = Def
3226  ("RRX",TP[Var("x",BTy"N"),bVar"carry_in"],
3227   Mop(Fst,
3228       Call("RRX_C",PTy(BTy"N",bTy),TP[Var("x",BTy"N"),bVar"carry_in"])))
3229;
3230val DecodeImmShift_def = Def
3231  ("DecodeImmShift",TP[Var("typ",FTy 2),Var("imm5",FTy 5)],
3232   CS(Var("typ",FTy 2),
3233      [(LW(0,2),
3234        TP[LC("SRType_LSL",CTy"SRType"),Mop(Cast nTy,Var("imm5",FTy 5))]),
3235       (LW(1,2),
3236        TP[LC("SRType_LSR",CTy"SRType"),
3237           ITE(EQ(Var("imm5",FTy 5),LW(0,5)),LN 32,
3238               Mop(Cast nTy,Var("imm5",FTy 5)))]),
3239       (LW(2,2),
3240        TP[LC("SRType_ASR",CTy"SRType"),
3241           ITE(EQ(Var("imm5",FTy 5),LW(0,5)),LN 32,
3242               Mop(Cast nTy,Var("imm5",FTy 5)))]),
3243       (LW(3,2),
3244        ITE(EQ(Var("imm5",FTy 5),LW(0,5)),
3245            TP[LC("SRType_RRX",CTy"SRType"),LN 1],
3246            TP[LC("SRType_ROR",CTy"SRType"),
3247               Mop(Cast nTy,Var("imm5",FTy 5))]))]))
3248;
3249val DecodeRegShift_def = Def
3250  ("DecodeRegShift",Var("typ",FTy 2),
3251   CS(Var("typ",FTy 2),
3252      [(LW(0,2),LC("SRType_LSL",CTy"SRType")),
3253       (LW(1,2),LC("SRType_LSR",CTy"SRType")),
3254       (LW(2,2),LC("SRType_ASR",CTy"SRType")),
3255       (LW(3,2),LC("SRType_ROR",CTy"SRType"))]))
3256;
3257val Shift_C_def = Def
3258  ("Shift_C",
3259   TP[Var("value",BTy"N"),Var("typ",CTy"SRType"),nVar"amount",
3260      bVar"carry_in"],
3261   Close
3262     (qVar"state",
3263      ITE(EQ(nVar"amount",LN 0),
3264          TP[TP[Var("value",BTy"N"),bVar"carry_in"],qVar"state"],
3265          CS(Var("typ",CTy"SRType"),
3266             [(LC("SRType_LSL",CTy"SRType"),
3267               Apply
3268                 (Call
3269                    ("LSL_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)),
3270                     TP[Var("value",BTy"N"),nVar"amount"]),qVar"state")),
3271              (LC("SRType_LSR",CTy"SRType"),
3272               Apply
3273                 (Call
3274                    ("LSR_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)),
3275                     TP[Var("value",BTy"N"),nVar"amount"]),qVar"state")),
3276              (LC("SRType_ASR",CTy"SRType"),
3277               Apply
3278                 (Call
3279                    ("ASR_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)),
3280                     TP[Var("value",BTy"N"),nVar"amount"]),qVar"state")),
3281              (LC("SRType_ROR",CTy"SRType"),
3282               Apply
3283                 (Call
3284                    ("ROR_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)),
3285                     TP[Var("value",BTy"N"),nVar"amount"]),qVar"state")),
3286              (LC("SRType_RRX",CTy"SRType"),
3287               TP[Call
3288                    ("RRX_C",PTy(BTy"N",bTy),
3289                     TP[Var("value",BTy"N"),bVar"carry_in"]),qVar"state"])]))))
3290;
3291val Shift_def = Def
3292  ("Shift",
3293   TP[Var("value",BTy"N"),Var("typ",CTy"SRType"),nVar"amount",
3294      bVar"carry_in"],
3295   Close
3296     (qVar"state",
3297      Let(TP[Var("v",PTy(BTy"N",bTy)),qVar"s"],
3298          Apply
3299            (Call
3300               ("Shift_C",ATy(qTy,PTy(PTy(BTy"N",bTy),qTy)),
3301                TP[Var("value",BTy"N"),Var("typ",CTy"SRType"),
3302                   nVar"amount",bVar"carry_in"]),qVar"state"),
3303          TP[Mop(Fst,Var("v",PTy(BTy"N",bTy))),qVar"s"])))
3304;
3305val ARMExpandImm_C_def = Def
3306  ("ARMExpandImm_C",TP[Var("imm12",FTy 12),bVar"carry_in"],
3307   Close
3308     (qVar"state",
3309      Apply
3310        (Call
3311           ("Shift_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
3312            TP[Mop(Cast F32,EX(Var("imm12",FTy 12),LN 7,LN 0,F8)),
3313               LC("SRType_ROR",CTy"SRType"),
3314               Bop(Mul,LN 2,
3315                   Mop(Cast nTy,EX(Var("imm12",FTy 12),LN 11,LN 8,F4))),
3316               bVar"carry_in"]),qVar"state")))
3317;
3318val ARMExpandImm_def = Def
3319  ("ARMExpandImm",Var("imm12",FTy 12),
3320   Close
3321     (qVar"state",
3322      Let(TP[Var("v",PTy(F32,bTy)),qVar"s"],
3323          Apply
3324            (Call
3325               ("ARMExpandImm_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
3326                TP[Var("imm12",FTy 12),
3327                   Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"state"))]),
3328             qVar"state"),TP[Mop(Fst,Var("v",PTy(F32,bTy))),qVar"s"])))
3329;
3330val ThumbExpandImm_C_def = Def
3331  ("ThumbExpandImm_C",TP[Var("imm12",FTy 12),bVar"carry_in"],
3332   Close
3333     (qVar"state",
3334      ITE(EQ(EX(Var("imm12",FTy 12),LN 11,LN 10,FTy 2),LW(0,2)),
3335          Let(TP[Var("v",F32),qVar"s"],
3336              CS(EX(Var("imm12",FTy 12),LN 9,LN 8,FTy 2),
3337                 [(LW(0,2),
3338                   TP[Mop(Cast F32,EX(Var("imm12",FTy 12),LN 7,LN 0,F8)),
3339                      qVar"state"]),
3340                  (LW(1,2),
3341                   ITE(EQ(EX(Var("imm12",FTy 12),LN 7,LN 0,F8),LW(0,8)),
3342                       Apply
3343                         (Call
3344                            ("raise'exception",ATy(qTy,PTy(F32,qTy)),
3345                             Call
3346                               ("UNPREDICTABLE",CTy"exception",
3347                                LS"ThumbExpandImm_C")),qVar"state"),
3348                       TP[CC[LW(0,8),EX(Var("imm12",FTy 12),LN 7,LN 0,F8),
3349                             LW(0,8),EX(Var("imm12",FTy 12),LN 7,LN 0,F8)],
3350                          qVar"state"])),
3351                  (LW(2,2),
3352                   ITE(EQ(EX(Var("imm12",FTy 12),LN 7,LN 0,F8),LW(0,8)),
3353                       Apply
3354                         (Call
3355                            ("raise'exception",ATy(qTy,PTy(F32,qTy)),
3356                             Call
3357                               ("UNPREDICTABLE",CTy"exception",
3358                                LS"ThumbExpandImm_C")),qVar"state"),
3359                       TP[CC[EX(Var("imm12",FTy 12),LN 7,LN 0,F8),LW(0,8),
3360                             EX(Var("imm12",FTy 12),LN 7,LN 0,F8),LW(0,8)],
3361                          qVar"state"])),
3362                  (LW(3,2),
3363                   ITE(EQ(EX(Var("imm12",FTy 12),LN 7,LN 0,F8),LW(0,8)),
3364                       Apply
3365                         (Call
3366                            ("raise'exception",ATy(qTy,PTy(F32,qTy)),
3367                             Call
3368                               ("UNPREDICTABLE",CTy"exception",
3369                                LS"ThumbExpandImm_C")),qVar"state"),
3370                       TP[CC[EX(Var("imm12",FTy 12),LN 7,LN 0,F8),
3371                             EX(Var("imm12",FTy 12),LN 7,LN 0,F8),
3372                             EX(Var("imm12",FTy 12),LN 7,LN 0,F8),
3373                             EX(Var("imm12",FTy 12),LN 7,LN 0,F8)],
3374                          qVar"state"]))]),
3375              TP[TP[Var("v",F32),bVar"carry_in"],qVar"s"]),
3376          Apply
3377            (Call
3378               ("ROR_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
3379                TP[Mop(Cast F32,
3380                       CC[LW(1,1),EX(Var("imm12",FTy 12),LN 6,LN 0,FTy 7)]),
3381                   Mop(Cast nTy,EX(Var("imm12",FTy 12),LN 11,LN 7,FTy 5))]),
3382             qVar"state"))))
3383;
3384val ExpandImm_C_def = Def
3385  ("ExpandImm_C",TP[Var("imm12",FTy 12),bVar"carry_in"],
3386   Close
3387     (qVar"state",
3388      ITE(EQ(Dest("Encoding",CTy"Encoding",qVar"state"),
3389             LC("Encoding_Thumb2",CTy"Encoding")),
3390          Apply
3391            (Call
3392               ("ThumbExpandImm_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
3393                TP[Var("imm12",FTy 12),bVar"carry_in"]),qVar"state"),
3394          Apply
3395            (Call
3396               ("ARMExpandImm_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
3397                TP[Var("imm12",FTy 12),bVar"carry_in"]),qVar"state"))))
3398;
3399val AddWithCarry_def = Def
3400  ("AddWithCarry",TP[Var("x",BTy"N"),Var("y",BTy"N"),bVar"carry_in"],
3401   Let(nVar"unsigned_sum",
3402       Bop(Add,
3403           Bop(Add,Mop(Cast nTy,Var("x",BTy"N")),
3404               Mop(Cast nTy,Var("y",BTy"N"))),Mop(Cast nTy,bVar"carry_in")),
3405       Let(Var("result",BTy"N"),Mop(Cast(BTy"N"),nVar"unsigned_sum"),
3406           TP[Var("result",BTy"N"),
3407              Mop(Not,
3408                  EQ(Mop(Cast nTy,Var("result",BTy"N")),nVar"unsigned_sum")),
3409              Mop(Not,
3410                  EQ(Mop(Cast iTy,Var("result",BTy"N")),
3411                     Bop(Add,
3412                         Bop(Add,Mop(Cast iTy,Var("x",BTy"N")),
3413                             Mop(Cast iTy,Var("y",BTy"N"))),
3414                         Mop(Cast iTy,bVar"carry_in"))))])))
3415;
3416val DataProcessingALU_def = Def
3417  ("DataProcessingALU",
3418   TP[Var("opc",F4),Var("a",F32),Var("b",F32),bVar"c"],
3419   CS(Var("opc",F4),
3420      [(LW(0,4),TP[Bop(BAnd,Var("a",F32),Var("b",F32)),bVar"c",LX bTy]),
3421       (LW(8,4),TP[Bop(BAnd,Var("a",F32),Var("b",F32)),bVar"c",LX bTy]),
3422       (LW(1,4),TP[Bop(BXor,Var("a",F32),Var("b",F32)),bVar"c",LX bTy]),
3423       (LW(9,4),TP[Bop(BXor,Var("a",F32),Var("b",F32)),bVar"c",LX bTy]),
3424       (LW(2,4),
3425        Call
3426          ("AddWithCarry",PTy(F32,PTy(bTy,bTy)),
3427           TP[Var("a",F32),Mop(BNot,Var("b",F32)),LT])),
3428       (LW(10,4),
3429        Call
3430          ("AddWithCarry",PTy(F32,PTy(bTy,bTy)),
3431           TP[Var("a",F32),Mop(BNot,Var("b",F32)),LT])),
3432       (LW(3,4),
3433        Call
3434          ("AddWithCarry",PTy(F32,PTy(bTy,bTy)),
3435           TP[Mop(BNot,Var("a",F32)),Var("b",F32),LT])),
3436       (LW(4,4),
3437        Call
3438          ("AddWithCarry",PTy(F32,PTy(bTy,bTy)),
3439           TP[Var("a",F32),Var("b",F32),LF])),
3440       (LW(11,4),
3441        Call
3442          ("AddWithCarry",PTy(F32,PTy(bTy,bTy)),
3443           TP[Var("a",F32),Var("b",F32),LF])),
3444       (LW(5,4),
3445        Call
3446          ("AddWithCarry",PTy(F32,PTy(bTy,bTy)),
3447           TP[Var("a",F32),Var("b",F32),bVar"c"])),
3448       (LW(6,4),
3449        Call
3450          ("AddWithCarry",PTy(F32,PTy(bTy,bTy)),
3451           TP[Var("a",F32),Mop(BNot,Var("b",F32)),bVar"c"])),
3452       (LW(7,4),
3453        Call
3454          ("AddWithCarry",PTy(F32,PTy(bTy,bTy)),
3455           TP[Mop(BNot,Var("a",F32)),Var("b",F32),bVar"c"])),
3456       (LW(12,4),TP[Bop(BOr,Var("a",F32),Var("b",F32)),bVar"c",LX bTy]),
3457       (LW(13,4),TP[Var("b",F32),bVar"c",LX bTy]),
3458       (LW(14,4),
3459        TP[Bop(BAnd,Var("a",F32),Mop(BNot,Var("b",F32))),bVar"c",LX bTy]),
3460       (LW(15,4),
3461        TP[Bop(BOr,Var("a",F32),Mop(BNot,Var("b",F32))),bVar"c",LX bTy])]))
3462;
3463val ArithmeticOpcode_def = Def
3464  ("ArithmeticOpcode",Var("opc",F4),
3465   Bop(And,
3466       Bop(Or,Bop(Bit,Var("opc",F4),LN 2),Bop(Bit,Var("opc",F4),LN 1)),
3467       Mop(Not,
3468           Bop(And,Bop(Bit,Var("opc",F4),LN 3),Bop(Bit,Var("opc",F4),LN 2)))))
3469;
3470val ExcVectorBase_def = Def
3471  ("ExcVectorBase",AVar uTy,
3472   Close
3473     (qVar"state",
3474      ITB([(Dest
3475              ("V",bTy,
3476               Dest("SCTLR",CTy"SCTLR",Dest("CP15",CTy"CP15",qVar"state"))),
3477            LW(268431360,32)),
3478           (Apply(Call("HaveSecurityExt",ATy(qTy,bTy),LU),qVar"state"),
3479            Dest("VBAR",F32,Dest("CP15",CTy"CP15",qVar"state")))],LW(0,32))))
3480;
3481val EnterMonitorMode_def = Def
3482  ("EnterMonitorMode",
3483   TP[Var("new_spsr_value",CTy"PSR"),Var("new_lr_value",F32),
3484      Var("vect_offset",F32)],
3485   Close
3486     (qVar"state",
3487      Let(qVar"s",
3488          Apply
3489            (Call
3490               ("write'R",ATy(qTy,qTy),
3491                TP[Var("new_lr_value",F32),LW(14,4)]),
3492             Apply
3493               (Call
3494                  ("write'SPSR",ATy(qTy,qTy),
3495                   Var("new_spsr_value",CTy"PSR")),
3496                Rupd
3497                  ("CPSR",
3498                   TP[qVar"state",
3499                      Rupd
3500                        ("M",
3501                         TP[Dest("CPSR",CTy"PSR",qVar"state"),LW(22,5)])]))),
3502          Let(qVar"s",
3503              Rupd
3504                ("CPSR",
3505                 TP[qVar"s",Rupd("J",TP[Dest("CPSR",CTy"PSR",qVar"s"),LF])]),
3506              Let(qVar"s",
3507                  Rupd
3508                    ("CPSR",
3509                     TP[qVar"s",
3510                        Rupd
3511                          ("T",
3512                           TP[Dest("CPSR",CTy"PSR",qVar"s"),
3513                              Dest
3514                                ("TE",bTy,
3515                                 Dest
3516                                   ("SCTLR",CTy"SCTLR",
3517                                    Dest("CP15",CTy"CP15",qVar"s")))])]),
3518                  Let(qVar"s",
3519                      Rupd
3520                        ("CPSR",
3521                         TP[qVar"s",
3522                            Rupd
3523                              ("E",
3524                               TP[Dest("CPSR",CTy"PSR",qVar"s"),
3525                                  Dest
3526                                    ("EE",bTy,
3527                                     Dest
3528                                       ("SCTLR",CTy"SCTLR",
3529                                        Dest("CP15",CTy"CP15",qVar"s")))])]),
3530                      Let(qVar"s",
3531                          Rupd
3532                            ("CPSR",
3533                             TP[qVar"s",
3534                                Rupd
3535                                  ("A",
3536                                   TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]),
3537                          Let(qVar"s",
3538                              Rupd
3539                                ("CPSR",
3540                                 TP[qVar"s",
3541                                    Rupd
3542                                      ("F",
3543                                       TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]),
3544                              Let(qVar"s",
3545                                  Rupd
3546                                    ("CPSR",
3547                                     TP[qVar"s",
3548                                        Rupd
3549                                          ("I",
3550                                           TP[Dest
3551                                                ("CPSR",CTy"PSR",qVar"s"),
3552                                              LT])]),
3553                                  Let(qVar"s",
3554                                      Rupd
3555                                        ("CPSR",
3556                                         TP[qVar"s",
3557                                            Rupd
3558                                              ("IT",
3559                                               TP[Dest
3560                                                    ("CPSR",CTy"PSR",
3561                                                     qVar"s"),LW(0,8)])]),
3562                                      Apply
3563                                        (Call
3564                                           ("BranchTo",ATy(qTy,qTy),
3565                                            Bop(Add,
3566                                                Dest
3567                                                  ("MVBAR",F32,
3568                                                   Dest
3569                                                     ("CP15",CTy"CP15",
3570                                                      qVar"s")),
3571                                                Var("vect_offset",F32))),
3572                                         qVar"s")))))))))))
3573;
3574val EnterHypMode_def = Def
3575  ("EnterHypMode",
3576   TP[Var("new_spsr_value",CTy"PSR"),Var("new_lr_value",F32),
3577      Var("vect_offset",F32)],
3578   Close
3579     (qVar"state",
3580      Let(qVar"s",
3581          Apply
3582            (Call
3583               ("write'R",ATy(qTy,qTy),
3584                TP[Var("new_lr_value",F32),LW(14,4)]),
3585             Apply
3586               (Call
3587                  ("write'SPSR",ATy(qTy,qTy),
3588                   Var("new_spsr_value",CTy"PSR")),
3589                Rupd
3590                  ("CPSR",
3591                   TP[qVar"state",
3592                      Rupd
3593                        ("M",
3594                         TP[Dest("CPSR",CTy"PSR",qVar"state"),LW(26,5)])]))),
3595          Let(qVar"s",
3596              Rupd
3597                ("CPSR",
3598                 TP[qVar"s",Rupd("J",TP[Dest("CPSR",CTy"PSR",qVar"s"),LF])]),
3599              Let(qVar"s",
3600                  Rupd
3601                    ("CPSR",
3602                     TP[qVar"s",
3603                        Rupd
3604                          ("T",
3605                           TP[Dest("CPSR",CTy"PSR",qVar"s"),
3606                              Dest
3607                                ("TE",bTy,
3608                                 Dest
3609                                   ("SCTLR",CTy"SCTLR",
3610                                    Dest("CP15",CTy"CP15",qVar"s")))])]),
3611                  Let(qVar"s",
3612                      Rupd
3613                        ("CPSR",
3614                         TP[qVar"s",
3615                            Rupd
3616                              ("E",
3617                               TP[Dest("CPSR",CTy"PSR",qVar"s"),
3618                                  Dest
3619                                    ("EE",bTy,
3620                                     Dest
3621                                       ("SCTLR",CTy"SCTLR",
3622                                        Dest("CP15",CTy"CP15",qVar"s")))])]),
3623                      Let(qVar"s",
3624                          Rupd
3625                            ("CPSR",
3626                             TP[qVar"s",
3627                                Rupd
3628                                  ("A",
3629                                   TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]),
3630                          Let(qVar"s",
3631                              Rupd
3632                                ("CPSR",
3633                                 TP[qVar"s",
3634                                    Rupd
3635                                      ("F",
3636                                       TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]),
3637                              Let(qVar"s",
3638                                  Rupd
3639                                    ("CPSR",
3640                                     TP[qVar"s",
3641                                        Rupd
3642                                          ("I",
3643                                           TP[Dest
3644                                                ("CPSR",CTy"PSR",qVar"s"),
3645                                              LT])]),
3646                                  Let(qVar"s",
3647                                      Rupd
3648                                        ("CPSR",
3649                                         TP[qVar"s",
3650                                            Rupd
3651                                              ("IT",
3652                                               TP[Dest
3653                                                    ("CPSR",CTy"PSR",
3654                                                     qVar"s"),LW(0,8)])]),
3655                                      Apply
3656                                        (Call
3657                                           ("BranchTo",ATy(qTy,qTy),
3658                                            Bop(Add,
3659                                                Dest
3660                                                  ("MVBAR",F32,
3661                                                   Dest
3662                                                     ("CP15",CTy"CP15",
3663                                                      qVar"s")),
3664                                                Var("vect_offset",F32))),
3665                                         qVar"s")))))))))))
3666;
3667val TakeReset_def = Def
3668  ("TakeReset",AVar uTy,
3669   Close
3670     (qVar"state",
3671      Let(TP[bVar"v",qVar"s"],
3672          Let(qVar"s",
3673              Rupd
3674                ("CPSR",
3675                 TP[qVar"state",
3676                    Rupd
3677                      ("M",TP[Dest("CPSR",CTy"PSR",qVar"state"),LW(19,5)])]),
3678              TP[Apply(Call("HaveSecurityExt",ATy(qTy,bTy),LU),qVar"s"),
3679                 qVar"s"]),
3680          Let(qVar"s",
3681              ITE(bVar"v",
3682                  Rupd
3683                    ("CP15",
3684                     TP[qVar"s",
3685                        Rupd
3686                          ("SCR",
3687                           TP[Dest("CP15",CTy"CP15",qVar"s"),
3688                              Rupd
3689                                ("NS",
3690                                 TP[Dest
3691                                      ("SCR",CTy"SCR",
3692                                       Dest("CP15",CTy"CP15",qVar"s")),LF])])]),
3693                  qVar"s"),
3694              Let(qVar"s",
3695                  Rupd
3696                    ("CPSR",
3697                     TP[qVar"s",
3698                        Rupd("I",TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]),
3699                  Let(qVar"s",
3700                      Rupd
3701                        ("CPSR",
3702                         TP[qVar"s",
3703                            Rupd("F",TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]),
3704                      Let(qVar"s",
3705                          Rupd
3706                            ("CPSR",
3707                             TP[qVar"s",
3708                                Rupd
3709                                  ("A",
3710                                   TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]),
3711                          Let(qVar"s",
3712                              Rupd
3713                                ("CPSR",
3714                                 TP[qVar"s",
3715                                    Rupd
3716                                      ("IT",
3717                                       TP[Dest("CPSR",CTy"PSR",qVar"s"),
3718                                          LW(0,8)])]),
3719                              Let(qVar"s",
3720                                  Rupd
3721                                    ("CPSR",
3722                                     TP[qVar"s",
3723                                        Rupd
3724                                          ("J",
3725                                           TP[Dest
3726                                                ("CPSR",CTy"PSR",qVar"s"),
3727                                              LF])]),
3728                                  Let(qVar"s",
3729                                      Rupd
3730                                        ("CPSR",
3731                                         TP[qVar"s",
3732                                            Rupd
3733                                              ("T",
3734                                               TP[Dest
3735                                                    ("CPSR",CTy"PSR",
3736                                                     qVar"s"),
3737                                                  Dest
3738                                                    ("TE",bTy,
3739                                                     Dest
3740                                                       ("SCTLR",
3741                                                        CTy"SCTLR",
3742                                                        Dest
3743                                                          ("CP15",
3744                                                           CTy"CP15",
3745                                                           qVar"s")))])]),
3746                                      Let(TP[Var("v",F32),qVar"s"],
3747                                          Let(qVar"s0",
3748                                              Rupd
3749                                                ("CPSR",
3750                                                 TP[qVar"s",
3751                                                    Rupd
3752                                                      ("E",
3753                                                       TP[Dest
3754                                                            ("CPSR",
3755                                                             CTy"PSR",
3756                                                             qVar"s"),
3757                                                          Dest
3758                                                            ("EE",bTy,
3759                                                             Dest
3760                                                               ("SCTLR",
3761                                                                CTy"SCTLR",
3762                                                                Dest
3763                                                                  ("CP15",
3764                                                                   CTy"CP15",
3765                                                                   qVar"s")))])]),
3766                                              TP[Apply
3767                                                   (Call
3768                                                      ("ExcVectorBase",
3769                                                       ATy(qTy,F32),LU),
3770                                                    qVar"s0"),qVar"s0"]),
3771                                          Apply
3772                                            (Call
3773                                               ("BranchTo",ATy(qTy,qTy),
3774                                                Bop(Add,Var("v",F32),
3775                                                    LW(0,32))),qVar"s"))))))))))))
3776;
3777val TakeUndefInstrException_def = Def
3778  ("TakeUndefInstrException",AVar uTy,
3779   Close
3780     (qVar"state",
3781      Let(TP[Var("v",F32),qVar"s"],
3782          ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"state")),
3783              Let(TP[Var("v",F32),qVar"s"],
3784                  Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
3785                  TP[Bop(Sub,Var("v",F32),LW(2,32)),qVar"s"]),
3786              Let(TP[Var("v",F32),qVar"s"],
3787                  Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
3788                  TP[Bop(Sub,Var("v",F32),LW(4,32)),qVar"s"])),
3789          Let(Var("v0",CTy"PSR"),Dest("CPSR",CTy"PSR",qVar"s"),
3790              Let(Var("vect_offset",F32),LW(4,32),
3791                  Let(Var("preferred_exceptn_return",F32),
3792                      Bop(Sub,Var("v",F32),
3793                          ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"s")),
3794                              LW(2,32),LW(4,32))),
3795                      ITB([(Bop(And,
3796                                Apply
3797                                  (Call("HaveVirtExt",ATy(qTy,bTy),LU),
3798                                   qVar"s"),
3799                                Bop(And,
3800                                    Apply
3801                                      (Call
3802                                         ("HaveSecurityExt",ATy(qTy,bTy),
3803                                          LU),qVar"s"),
3804                                    Bop(And,
3805                                        Dest
3806                                          ("NS",bTy,
3807                                           Dest
3808                                             ("SCR",CTy"SCR",
3809                                              Dest
3810                                                ("CP15",CTy"CP15",qVar"s"))),
3811                                        EQ(Dest
3812                                             ("M",FTy 5,
3813                                              Dest
3814                                                ("CPSR",CTy"PSR",qVar"s")),
3815                                           LW(26,5))))),
3816                            Apply
3817                              (Call
3818                                 ("EnterHypMode",ATy(qTy,qTy),
3819                                  TP[Var("v0",CTy"PSR"),
3820                                     Var("preferred_exceptn_return",F32),
3821                                     Var("vect_offset",F32)]),qVar"s")),
3822                           (Bop(And,
3823                                Apply
3824                                  (Call("HaveVirtExt",ATy(qTy,bTy),LU),
3825                                   qVar"s"),
3826                                Bop(And,
3827                                    Apply
3828                                      (Call
3829                                         ("HaveSecurityExt",ATy(qTy,bTy),
3830                                          LU),qVar"s"),
3831                                    Bop(And,
3832                                        Mop(Not,
3833                                            Apply
3834                                              (Call
3835                                                 ("IsSecure",ATy(qTy,bTy),
3836                                                  LU),qVar"s")),
3837                                        Bop(And,
3838                                            Dest
3839                                              ("TGE",bTy,
3840                                               Dest
3841                                                 ("HCR",CTy"HCR",
3842                                                  Dest
3843                                                    ("CP15",CTy"CP15",
3844                                                     qVar"s"))),
3845                                            EQ(Dest
3846                                                 ("M",FTy 5,
3847                                                  Dest
3848                                                    ("CPSR",CTy"PSR",
3849                                                     qVar"s")),LW(16,5)))))),
3850                            Apply
3851                              (Call
3852                                 ("EnterHypMode",ATy(qTy,qTy),
3853                                  TP[Var("v0",CTy"PSR"),
3854                                     Var("preferred_exceptn_return",F32),
3855                                     LW(20,32)]),qVar"s"))],
3856                          Let(qVar"s",
3857                              ITE(EQ(Dest
3858                                       ("M",FTy 5,
3859                                        Dest("CPSR",CTy"PSR",qVar"s")),
3860                                     LW(22,5)),
3861                                  Rupd
3862                                    ("CP15",
3863                                     TP[qVar"s",
3864                                        Rupd
3865                                          ("SCR",
3866                                           TP[Dest
3867                                                ("CP15",CTy"CP15",qVar"s"),
3868                                              Rupd
3869                                                ("NS",
3870                                                 TP[Dest
3871                                                      ("SCR",CTy"SCR",
3872                                                       Dest
3873                                                         ("CP15",
3874                                                          CTy"CP15",
3875                                                          qVar"s")),LF])])]),
3876                                  qVar"s"),
3877                              Let(qVar"s",
3878                                  Apply
3879                                    (Call
3880                                       ("write'R",ATy(qTy,qTy),
3881                                        TP[Var("v",F32),LW(14,4)]),
3882                                     Apply
3883                                       (Call
3884                                          ("write'SPSR",ATy(qTy,qTy),
3885                                           Var("v0",CTy"PSR")),
3886                                        Rupd
3887                                          ("CPSR",
3888                                           TP[qVar"s",
3889                                              Rupd
3890                                                ("M",
3891                                                 TP[Dest
3892                                                      ("CPSR",CTy"PSR",
3893                                                       qVar"s"),LW(27,5)])]))),
3894                                  Let(qVar"s",
3895                                      Rupd
3896                                        ("CPSR",
3897                                         TP[qVar"s",
3898                                            Rupd
3899                                              ("I",
3900                                               TP[Dest
3901                                                    ("CPSR",CTy"PSR",
3902                                                     qVar"s"),LT])]),
3903                                      Let(qVar"s",
3904                                          Rupd
3905                                            ("CPSR",
3906                                             TP[qVar"s",
3907                                                Rupd
3908                                                  ("IT",
3909                                                   TP[Dest
3910                                                        ("CPSR",CTy"PSR",
3911                                                         qVar"s"),LW(0,8)])]),
3912                                          Let(qVar"s",
3913                                              Rupd
3914                                                ("CPSR",
3915                                                 TP[qVar"s",
3916                                                    Rupd
3917                                                      ("J",
3918                                                       TP[Dest
3919                                                            ("CPSR",
3920                                                             CTy"PSR",
3921                                                             qVar"s"),LF])]),
3922                                              Let(qVar"s",
3923                                                  Rupd
3924                                                    ("CPSR",
3925                                                     TP[qVar"s",
3926                                                        Rupd
3927                                                          ("T",
3928                                                           TP[Dest
3929                                                                ("CPSR",
3930                                                                 CTy"PSR",
3931                                                                 qVar"s"),
3932                                                              Dest
3933                                                                ("TE",bTy,
3934                                                                 Dest
3935                                                                   ("SCTLR",
3936                                                                    CTy"SCTLR",
3937                                                                    Dest
3938                                                                      ("CP15",
3939                                                                       CTy"CP15",
3940                                                                       qVar"s")))])]),
3941                                                  Let(TP[Var("v",F32),
3942                                                         qVar"s"],
3943                                                      Let(qVar"s0",
3944                                                          Rupd
3945                                                            ("CPSR",
3946                                                             TP[qVar"s",
3947                                                                Rupd
3948                                                                  ("E",
3949                                                                   TP[Dest
3950                                                                        ("CPSR",
3951                                                                         CTy"PSR",
3952                                                                         qVar"s"),
3953                                                                      Dest
3954                                                                        ("EE",
3955                                                                         bTy,
3956                                                                         Dest
3957                                                                           ("SCTLR",
3958                                                                            CTy"SCTLR",
3959                                                                            Dest
3960                                                                              ("CP15",
3961                                                                               CTy"CP15",
3962                                                                               qVar"s")))])]),
3963                                                          TP[Apply
3964                                                               (Call
3965                                                                  ("ExcVectorBase",
3966                                                                   ATy(qTy,
3967                                                                       F32),
3968                                                                   LU),
3969                                                                qVar"s0"),
3970                                                             qVar"s0"]),
3971                                                      Apply
3972                                                        (Call
3973                                                           ("BranchTo",
3974                                                            ATy(qTy,qTy),
3975                                                            Bop(Add,
3976                                                                Var("v",
3977                                                                    F32),
3978                                                                Var("vect_offset",
3979                                                                    F32))),
3980                                                         qVar"s")))))))))))))))
3981;
3982val TakeSVCException_def = Def
3983  ("TakeSVCException",AVar uTy,
3984   Close
3985     (qVar"state",
3986      Let(qVar"s",Apply(Call("ITAdvance",ATy(qTy,qTy),LU),qVar"state"),
3987          Let(TP[Var("v",F32),qVar"s"],
3988              ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"s")),
3989                  Let(TP[Var("v",F32),qVar"s"],
3990                      Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"),
3991                      TP[Bop(Sub,Var("v",F32),LW(2,32)),qVar"s"]),
3992                  Let(TP[Var("v",F32),qVar"s"],
3993                      Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"),
3994                      TP[Bop(Sub,Var("v",F32),LW(4,32)),qVar"s"])),
3995              Let(Var("v0",CTy"PSR"),Dest("CPSR",CTy"PSR",qVar"s"),
3996                  Let(Var("vect_offset",F32),LW(8,32),
3997                      ITB([(Bop(And,
3998                                Apply
3999                                  (Call("HaveVirtExt",ATy(qTy,bTy),LU),
4000                                   qVar"s"),
4001                                Bop(And,
4002                                    Apply
4003                                      (Call
4004                                         ("HaveSecurityExt",ATy(qTy,bTy),
4005                                          LU),qVar"s"),
4006                                    Bop(And,
4007                                        Dest
4008                                          ("NS",bTy,
4009                                           Dest
4010                                             ("SCR",CTy"SCR",
4011                                              Dest
4012                                                ("CP15",CTy"CP15",qVar"s"))),
4013                                        EQ(Dest
4014                                             ("M",FTy 5,
4015                                              Dest
4016                                                ("CPSR",CTy"PSR",qVar"s")),
4017                                           LW(26,5))))),
4018                            Apply
4019                              (Call
4020                                 ("EnterHypMode",ATy(qTy,qTy),
4021                                  TP[Var("v0",CTy"PSR"),Var("v",F32),
4022                                     Var("vect_offset",F32)]),qVar"s")),
4023                           (Bop(And,
4024                                Apply
4025                                  (Call("HaveVirtExt",ATy(qTy,bTy),LU),
4026                                   qVar"s"),
4027                                Bop(And,
4028                                    Apply
4029                                      (Call
4030                                         ("HaveSecurityExt",ATy(qTy,bTy),
4031                                          LU),qVar"s"),
4032                                    Bop(And,
4033                                        Mop(Not,
4034                                            Apply
4035                                              (Call
4036                                                 ("IsSecure",ATy(qTy,bTy),
4037                                                  LU),qVar"s")),
4038                                        Bop(And,
4039                                            Dest
4040                                              ("TGE",bTy,
4041                                               Dest
4042                                                 ("HCR",CTy"HCR",
4043                                                  Dest
4044                                                    ("CP15",CTy"CP15",
4045                                                     qVar"s"))),
4046                                            EQ(Dest
4047                                                 ("M",FTy 5,
4048                                                  Dest
4049                                                    ("CPSR",CTy"PSR",
4050                                                     qVar"s")),LW(16,5)))))),
4051                            Apply
4052                              (Call
4053                                 ("EnterHypMode",ATy(qTy,qTy),
4054                                  TP[Var("v0",CTy"PSR"),Var("v",F32),
4055                                     LW(20,32)]),qVar"s"))],
4056                          Let(qVar"s",
4057                              ITE(EQ(Dest
4058                                       ("M",FTy 5,
4059                                        Dest("CPSR",CTy"PSR",qVar"s")),
4060                                     LW(22,5)),
4061                                  Rupd
4062                                    ("CP15",
4063                                     TP[qVar"s",
4064                                        Rupd
4065                                          ("SCR",
4066                                           TP[Dest
4067                                                ("CP15",CTy"CP15",qVar"s"),
4068                                              Rupd
4069                                                ("NS",
4070                                                 TP[Dest
4071                                                      ("SCR",CTy"SCR",
4072                                                       Dest
4073                                                         ("CP15",
4074                                                          CTy"CP15",
4075                                                          qVar"s")),LF])])]),
4076                                  qVar"s"),
4077                              Let(qVar"s",
4078                                  Apply
4079                                    (Call
4080                                       ("write'R",ATy(qTy,qTy),
4081                                        TP[Var("v",F32),LW(14,4)]),
4082                                     Apply
4083                                       (Call
4084                                          ("write'SPSR",ATy(qTy,qTy),
4085                                           Var("v0",CTy"PSR")),
4086                                        Rupd
4087                                          ("CPSR",
4088                                           TP[qVar"s",
4089                                              Rupd
4090                                                ("M",
4091                                                 TP[Dest
4092                                                      ("CPSR",CTy"PSR",
4093                                                       qVar"s"),LW(19,5)])]))),
4094                                  Let(qVar"s",
4095                                      Rupd
4096                                        ("CPSR",
4097                                         TP[qVar"s",
4098                                            Rupd
4099                                              ("I",
4100                                               TP[Dest
4101                                                    ("CPSR",CTy"PSR",
4102                                                     qVar"s"),LT])]),
4103                                      Let(qVar"s",
4104                                          Rupd
4105                                            ("CPSR",
4106                                             TP[qVar"s",
4107                                                Rupd
4108                                                  ("IT",
4109                                                   TP[Dest
4110                                                        ("CPSR",CTy"PSR",
4111                                                         qVar"s"),LW(0,8)])]),
4112                                          Let(qVar"s",
4113                                              Rupd
4114                                                ("CPSR",
4115                                                 TP[qVar"s",
4116                                                    Rupd
4117                                                      ("J",
4118                                                       TP[Dest
4119                                                            ("CPSR",
4120                                                             CTy"PSR",
4121                                                             qVar"s"),LF])]),
4122                                              Let(qVar"s",
4123                                                  Rupd
4124                                                    ("CPSR",
4125                                                     TP[qVar"s",
4126                                                        Rupd
4127                                                          ("T",
4128                                                           TP[Dest
4129                                                                ("CPSR",
4130                                                                 CTy"PSR",
4131                                                                 qVar"s"),
4132                                                              Dest
4133                                                                ("TE",bTy,
4134                                                                 Dest
4135                                                                   ("SCTLR",
4136                                                                    CTy"SCTLR",
4137                                                                    Dest
4138                                                                      ("CP15",
4139                                                                       CTy"CP15",
4140                                                                       qVar"s")))])]),
4141                                                  Let(TP[Var("v",F32),
4142                                                         qVar"s"],
4143                                                      Let(qVar"s0",
4144                                                          Rupd
4145                                                            ("CPSR",
4146                                                             TP[qVar"s",
4147                                                                Rupd
4148                                                                  ("E",
4149                                                                   TP[Dest
4150                                                                        ("CPSR",
4151                                                                         CTy"PSR",
4152                                                                         qVar"s"),
4153                                                                      Dest
4154                                                                        ("EE",
4155                                                                         bTy,
4156                                                                         Dest
4157                                                                           ("SCTLR",
4158                                                                            CTy"SCTLR",
4159                                                                            Dest
4160                                                                              ("CP15",
4161                                                                               CTy"CP15",
4162                                                                               qVar"s")))])]),
4163                                                          TP[Apply
4164                                                               (Call
4165                                                                  ("ExcVectorBase",
4166                                                                   ATy(qTy,
4167                                                                       F32),
4168                                                                   LU),
4169                                                                qVar"s0"),
4170                                                             qVar"s0"]),
4171                                                      Apply
4172                                                        (Call
4173                                                           ("BranchTo",
4174                                                            ATy(qTy,qTy),
4175                                                            Bop(Add,
4176                                                                Var("v",
4177                                                                    F32),
4178                                                                Var("vect_offset",
4179                                                                    F32))),
4180                                                         qVar"s")))))))))))))))
4181;
4182val TakeSMCException_def = Def
4183  ("TakeSMCException",AVar uTy,
4184   Close
4185     (qVar"state",
4186      Let(qVar"s",Apply(Call("ITAdvance",ATy(qTy,qTy),LU),qVar"state"),
4187          Let(TP[Var("v",F32),qVar"s"],
4188              ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"s")),
4189                  Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"),
4190                  Let(TP[Var("v",F32),qVar"s"],
4191                      Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"),
4192                      TP[Bop(Sub,Var("v",F32),LW(4,32)),qVar"s"])),
4193              Let(qVar"s0",
4194                  ITE(EQ(Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")),
4195                         LW(22,5)),
4196                      Rupd
4197                        ("CP15",
4198                         TP[qVar"s",
4199                            Rupd
4200                              ("SCR",
4201                               TP[Dest("CP15",CTy"CP15",qVar"s"),
4202                                  Rupd
4203                                    ("NS",
4204                                     TP[Dest
4205                                          ("SCR",CTy"SCR",
4206                                           Dest("CP15",CTy"CP15",qVar"s")),
4207                                        LF])])]),qVar"s"),
4208                  Apply
4209                    (Call
4210                       ("EnterMonitorMode",ATy(qTy,qTy),
4211                        TP[Dest("CPSR",CTy"PSR",qVar"s"),Var("v",F32),
4212                           LW(8,32)]),
4213                     Rupd
4214                       ("CPSR",
4215                        TP[qVar"s0",
4216                           Rupd
4217                             ("M",
4218                              TP[Dest("CPSR",CTy"PSR",qVar"s0"),LW(22,5)])])))))))
4219;
4220val TakeHVCException_def = Def
4221  ("TakeHVCException",AVar uTy,
4222   Close
4223     (qVar"state",
4224      Let(qVar"s",Apply(Call("ITAdvance",ATy(qTy,qTy),LU),qVar"state"),
4225          Let(TP[Var("v",F32),qVar"s"],
4226              ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"s")),
4227                  Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"),
4228                  Let(TP[Var("v",F32),qVar"s"],
4229                      Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"),
4230                      TP[Bop(Sub,Var("v",F32),LW(4,32)),qVar"s"])),
4231              Let(Var("v0",CTy"PSR"),Dest("CPSR",CTy"PSR",qVar"s"),
4232                  ITE(EQ(Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")),
4233                         LW(26,5)),
4234                      Apply
4235                        (Call
4236                           ("EnterHypMode",ATy(qTy,qTy),
4237                            TP[Var("v0",CTy"PSR"),Var("v",F32),LW(8,32)]),
4238                         qVar"s"),
4239                      Apply
4240                        (Call
4241                           ("EnterHypMode",ATy(qTy,qTy),
4242                            TP[Var("v0",CTy"PSR"),Var("v",F32),LW(20,32)]),
4243                         qVar"s")))))))
4244;
4245val TakeDataAbortException_def = Def
4246  ("TakeDataAbortException",AVar uTy,
4247   Close
4248     (qVar"state",
4249      Let(TP[Var("v",F32),qVar"s"],
4250          ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"state")),
4251              Let(TP[Var("v",F32),qVar"s"],
4252                  Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
4253                  TP[Bop(Add,Var("v",F32),LW(4,32)),qVar"s"]),
4254              Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state")),
4255          Let(Var("v0",CTy"PSR"),Dest("CPSR",CTy"PSR",qVar"s"),
4256              Let(Var("vect_offset",F32),LW(16,32),
4257                  ITB([(Bop(And,
4258                            Apply
4259                              (Call("HaveSecurityExt",ATy(qTy,bTy),LU),
4260                               qVar"s"),
4261                            Bop(And,
4262                                Dest
4263                                  ("EA",bTy,
4264                                   Dest
4265                                     ("SCR",CTy"SCR",
4266                                      Dest("CP15",CTy"CP15",qVar"s"))),
4267                                Call("IsExternalAbort",bTy,LU))),
4268                        Apply
4269                          (Call
4270                             ("EnterMonitorMode",ATy(qTy,qTy),
4271                              TP[Var("v0",CTy"PSR"),Var("v",F32),
4272                                 Var("vect_offset",F32)]),
4273                           ITE(EQ(Dest
4274                                    ("M",FTy 5,
4275                                     Dest("CPSR",CTy"PSR",qVar"s")),
4276                                  LW(22,5)),
4277                               Rupd
4278                                 ("CP15",
4279                                  TP[qVar"s",
4280                                     Rupd
4281                                       ("SCR",
4282                                        TP[Dest("CP15",CTy"CP15",qVar"s"),
4283                                           Rupd
4284                                             ("NS",
4285                                              TP[Dest
4286                                                   ("SCR",CTy"SCR",
4287                                                    Dest
4288                                                      ("CP15",CTy"CP15",
4289                                                       qVar"s")),LF])])]),
4290                               qVar"s"))),
4291                       (Bop(And,
4292                            Apply
4293                              (Call("HaveVirtExt",ATy(qTy,bTy),LU),qVar"s"),
4294                            Bop(And,
4295                                Apply
4296                                  (Call("HaveSecurityExt",ATy(qTy,bTy),LU),
4297                                   qVar"s"),
4298                                Bop(And,
4299                                    Dest
4300                                      ("NS",bTy,
4301                                       Dest
4302                                         ("SCR",CTy"SCR",
4303                                          Dest("CP15",CTy"CP15",qVar"s"))),
4304                                    EQ(Dest
4305                                         ("M",FTy 5,
4306                                          Dest("CPSR",CTy"PSR",qVar"s")),
4307                                       LW(26,5))))),
4308                        Apply
4309                          (Call
4310                             ("EnterHypMode",ATy(qTy,qTy),
4311                              TP[Var("v0",CTy"PSR"),
4312                                 Bop(Sub,Var("v",F32),LW(8,32)),
4313                                 Var("vect_offset",F32)]),qVar"s"))],
4314                      Let(qVar"s",
4315                          ITE(Bop(And,
4316                                  Apply
4317                                    (Call
4318                                       ("HaveSecurityExt",ATy(qTy,bTy),LU),
4319                                     qVar"s"),
4320                                  EQ(Dest
4321                                       ("M",FTy 5,
4322                                        Dest("CPSR",CTy"PSR",qVar"s")),
4323                                     LW(22,5))),
4324                              Rupd
4325                                ("CP15",
4326                                 TP[qVar"s",
4327                                    Rupd
4328                                      ("SCR",
4329                                       TP[Dest("CP15",CTy"CP15",qVar"s"),
4330                                          Rupd
4331                                            ("NS",
4332                                             TP[Dest
4333                                                  ("SCR",CTy"SCR",
4334                                                   Dest
4335                                                     ("CP15",CTy"CP15",
4336                                                      qVar"s")),LF])])]),
4337                              qVar"s"),
4338                          Let(qVar"s",
4339                              Apply
4340                                (Call
4341                                   ("write'R",ATy(qTy,qTy),
4342                                    TP[Var("v",F32),LW(14,4)]),
4343                                 Apply
4344                                   (Call
4345                                      ("write'SPSR",ATy(qTy,qTy),
4346                                       Var("v0",CTy"PSR")),
4347                                    Rupd
4348                                      ("CPSR",
4349                                       TP[qVar"s",
4350                                          Rupd
4351                                            ("M",
4352                                             TP[Dest
4353                                                  ("CPSR",CTy"PSR",qVar"s"),
4354                                                LW(23,5)])]))),
4355                              Let(TP[bVar"v",qVar"s"],
4356                                  Let(qVar"s0",
4357                                      Rupd
4358                                        ("CPSR",
4359                                         TP[qVar"s",
4360                                            Rupd
4361                                              ("I",
4362                                               TP[Dest
4363                                                    ("CPSR",CTy"PSR",
4364                                                     qVar"s"),LT])]),
4365                                      TP[Apply
4366                                           (Call
4367                                              ("HaveSecurityExt",
4368                                               ATy(qTy,bTy),LU),qVar"s0"),
4369                                         qVar"s0"]),
4370                                  Let(qVar"s",
4371                                      ITE(Bop(Or,Mop(Not,bVar"v"),
4372                                              Bop(Or,
4373                                                  Apply
4374                                                    (Call
4375                                                       ("HaveVirtExt",
4376                                                        ATy(qTy,bTy),LU),
4377                                                     qVar"s"),
4378                                                  Bop(Or,
4379                                                      Mop(Not,
4380                                                          Dest
4381                                                            ("NS",bTy,
4382                                                             Dest
4383                                                               ("SCR",
4384                                                                CTy"SCR",
4385                                                                Dest
4386                                                                  ("CP15",
4387                                                                   CTy"CP15",
4388                                                                   qVar"s")))),
4389                                                      Dest
4390                                                        ("AW",bTy,
4391                                                         Dest
4392                                                           ("SCR",
4393                                                            CTy"SCR",
4394                                                            Dest
4395                                                              ("CP15",
4396                                                               CTy"CP15",
4397                                                               qVar"s")))))),
4398                                          Rupd
4399                                            ("CPSR",
4400                                             TP[qVar"s",
4401                                                Rupd
4402                                                  ("A",
4403                                                   TP[Dest
4404                                                        ("CPSR",CTy"PSR",
4405                                                         qVar"s"),LT])]),
4406                                          qVar"s"),
4407                                      Let(qVar"s",
4408                                          Rupd
4409                                            ("CPSR",
4410                                             TP[qVar"s",
4411                                                Rupd
4412                                                  ("IT",
4413                                                   TP[Dest
4414                                                        ("CPSR",CTy"PSR",
4415                                                         qVar"s"),LW(0,8)])]),
4416                                          Let(qVar"s",
4417                                              Rupd
4418                                                ("CPSR",
4419                                                 TP[qVar"s",
4420                                                    Rupd
4421                                                      ("J",
4422                                                       TP[Dest
4423                                                            ("CPSR",
4424                                                             CTy"PSR",
4425                                                             qVar"s"),LF])]),
4426                                              Let(qVar"s",
4427                                                  Rupd
4428                                                    ("CPSR",
4429                                                     TP[qVar"s",
4430                                                        Rupd
4431                                                          ("T",
4432                                                           TP[Dest
4433                                                                ("CPSR",
4434                                                                 CTy"PSR",
4435                                                                 qVar"s"),
4436                                                              Dest
4437                                                                ("TE",bTy,
4438                                                                 Dest
4439                                                                   ("SCTLR",
4440                                                                    CTy"SCTLR",
4441                                                                    Dest
4442                                                                      ("CP15",
4443                                                                       CTy"CP15",
4444                                                                       qVar"s")))])]),
4445                                                  Let(TP[Var("v",F32),
4446                                                         qVar"s"],
4447                                                      Let(qVar"s0",
4448                                                          Rupd
4449                                                            ("CPSR",
4450                                                             TP[qVar"s",
4451                                                                Rupd
4452                                                                  ("E",
4453                                                                   TP[Dest
4454                                                                        ("CPSR",
4455                                                                         CTy"PSR",
4456                                                                         qVar"s"),
4457                                                                      Dest
4458                                                                        ("EE",
4459                                                                         bTy,
4460                                                                         Dest
4461                                                                           ("SCTLR",
4462                                                                            CTy"SCTLR",
4463                                                                            Dest
4464                                                                              ("CP15",
4465                                                                               CTy"CP15",
4466                                                                               qVar"s")))])]),
4467                                                          TP[Apply
4468                                                               (Call
4469                                                                  ("ExcVectorBase",
4470                                                                   ATy(qTy,
4471                                                                       F32),
4472                                                                   LU),
4473                                                                qVar"s0"),
4474                                                             qVar"s0"]),
4475                                                      Apply
4476                                                        (Call
4477                                                           ("BranchTo",
4478                                                            ATy(qTy,qTy),
4479                                                            Bop(Add,
4480                                                                Var("v",
4481                                                                    F32),
4482                                                                Var("vect_offset",
4483                                                                    F32))),
4484                                                         qVar"s")))))))))))))))
4485;
4486val TakePrefetchAbortException_def = Def
4487  ("TakePrefetchAbortException",AVar uTy,
4488   Close
4489     (qVar"state",
4490      Let(TP[Var("v",F32),qVar"s"],
4491          ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"state")),
4492              Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
4493              Let(TP[Var("v",F32),qVar"s"],
4494                  Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
4495                  TP[Bop(Sub,Var("v",F32),LW(4,32)),qVar"s"])),
4496          Let(Var("v0",CTy"PSR"),Dest("CPSR",CTy"PSR",qVar"s"),
4497              Let(Var("vect_offset",F32),LW(12,32),
4498                  ITB([(Bop(And,
4499                            Apply
4500                              (Call("HaveSecurityExt",ATy(qTy,bTy),LU),
4501                               qVar"s"),
4502                            Bop(And,
4503                                Dest
4504                                  ("EA",bTy,
4505                                   Dest
4506                                     ("SCR",CTy"SCR",
4507                                      Dest("CP15",CTy"CP15",qVar"s"))),
4508                                Call("IsExternalAbort",bTy,LU))),
4509                        Apply
4510                          (Call
4511                             ("EnterMonitorMode",ATy(qTy,qTy),
4512                              TP[Var("v0",CTy"PSR"),Var("v",F32),
4513                                 Var("vect_offset",F32)]),
4514                           ITE(EQ(Dest
4515                                    ("M",FTy 5,
4516                                     Dest("CPSR",CTy"PSR",qVar"s")),
4517                                  LW(22,5)),
4518                               Rupd
4519                                 ("CP15",
4520                                  TP[qVar"s",
4521                                     Rupd
4522                                       ("SCR",
4523                                        TP[Dest("CP15",CTy"CP15",qVar"s"),
4524                                           Rupd
4525                                             ("NS",
4526                                              TP[Dest
4527                                                   ("SCR",CTy"SCR",
4528                                                    Dest
4529                                                      ("CP15",CTy"CP15",
4530                                                       qVar"s")),LF])])]),
4531                               qVar"s"))),
4532                       (Bop(And,
4533                            Apply
4534                              (Call("HaveVirtExt",ATy(qTy,bTy),LU),qVar"s"),
4535                            Bop(And,
4536                                Apply
4537                                  (Call("HaveSecurityExt",ATy(qTy,bTy),LU),
4538                                   qVar"s"),
4539                                Bop(And,
4540                                    Dest
4541                                      ("NS",bTy,
4542                                       Dest
4543                                         ("SCR",CTy"SCR",
4544                                          Dest("CP15",CTy"CP15",qVar"s"))),
4545                                    EQ(Dest
4546                                         ("M",FTy 5,
4547                                          Dest("CPSR",CTy"PSR",qVar"s")),
4548                                       LW(26,5))))),
4549                        Apply
4550                          (Call
4551                             ("EnterHypMode",ATy(qTy,qTy),
4552                              TP[Var("v0",CTy"PSR"),
4553                                 Bop(Sub,Var("v",F32),LW(4,32)),
4554                                 Var("vect_offset",F32)]),qVar"s"))],
4555                      Let(qVar"s",
4556                          ITE(Bop(And,
4557                                  Apply
4558                                    (Call
4559                                       ("HaveSecurityExt",ATy(qTy,bTy),LU),
4560                                     qVar"s"),
4561                                  EQ(Dest
4562                                       ("M",FTy 5,
4563                                        Dest("CPSR",CTy"PSR",qVar"s")),
4564                                     LW(22,5))),
4565                              Rupd
4566                                ("CP15",
4567                                 TP[qVar"s",
4568                                    Rupd
4569                                      ("SCR",
4570                                       TP[Dest("CP15",CTy"CP15",qVar"s"),
4571                                          Rupd
4572                                            ("NS",
4573                                             TP[Dest
4574                                                  ("SCR",CTy"SCR",
4575                                                   Dest
4576                                                     ("CP15",CTy"CP15",
4577                                                      qVar"s")),LF])])]),
4578                              qVar"s"),
4579                          Let(qVar"s",
4580                              Apply
4581                                (Call
4582                                   ("write'R",ATy(qTy,qTy),
4583                                    TP[Var("v",F32),LW(14,4)]),
4584                                 Apply
4585                                   (Call
4586                                      ("write'SPSR",ATy(qTy,qTy),
4587                                       Var("v0",CTy"PSR")),
4588                                    Rupd
4589                                      ("CPSR",
4590                                       TP[qVar"s",
4591                                          Rupd
4592                                            ("M",
4593                                             TP[Dest
4594                                                  ("CPSR",CTy"PSR",qVar"s"),
4595                                                LW(23,5)])]))),
4596                              Let(TP[bVar"v",qVar"s"],
4597                                  Let(qVar"s0",
4598                                      Rupd
4599                                        ("CPSR",
4600                                         TP[qVar"s",
4601                                            Rupd
4602                                              ("I",
4603                                               TP[Dest
4604                                                    ("CPSR",CTy"PSR",
4605                                                     qVar"s"),LT])]),
4606                                      TP[Apply
4607                                           (Call
4608                                              ("HaveSecurityExt",
4609                                               ATy(qTy,bTy),LU),qVar"s0"),
4610                                         qVar"s0"]),
4611                                  Let(qVar"s",
4612                                      ITE(Bop(Or,Mop(Not,bVar"v"),
4613                                              Bop(Or,
4614                                                  Apply
4615                                                    (Call
4616                                                       ("HaveVirtExt",
4617                                                        ATy(qTy,bTy),LU),
4618                                                     qVar"s"),
4619                                                  Bop(Or,
4620                                                      Mop(Not,
4621                                                          Dest
4622                                                            ("NS",bTy,
4623                                                             Dest
4624                                                               ("SCR",
4625                                                                CTy"SCR",
4626                                                                Dest
4627                                                                  ("CP15",
4628                                                                   CTy"CP15",
4629                                                                   qVar"s")))),
4630                                                      Dest
4631                                                        ("AW",bTy,
4632                                                         Dest
4633                                                           ("SCR",
4634                                                            CTy"SCR",
4635                                                            Dest
4636                                                              ("CP15",
4637                                                               CTy"CP15",
4638                                                               qVar"s")))))),
4639                                          Rupd
4640                                            ("CPSR",
4641                                             TP[qVar"s",
4642                                                Rupd
4643                                                  ("A",
4644                                                   TP[Dest
4645                                                        ("CPSR",CTy"PSR",
4646                                                         qVar"s"),LT])]),
4647                                          qVar"s"),
4648                                      Let(qVar"s",
4649                                          Rupd
4650                                            ("CPSR",
4651                                             TP[qVar"s",
4652                                                Rupd
4653                                                  ("IT",
4654                                                   TP[Dest
4655                                                        ("CPSR",CTy"PSR",
4656                                                         qVar"s"),LW(0,8)])]),
4657                                          Let(qVar"s",
4658                                              Rupd
4659                                                ("CPSR",
4660                                                 TP[qVar"s",
4661                                                    Rupd
4662                                                      ("J",
4663                                                       TP[Dest
4664                                                            ("CPSR",
4665                                                             CTy"PSR",
4666                                                             qVar"s"),LF])]),
4667                                              Let(qVar"s",
4668                                                  Rupd
4669                                                    ("CPSR",
4670                                                     TP[qVar"s",
4671                                                        Rupd
4672                                                          ("T",
4673                                                           TP[Dest
4674                                                                ("CPSR",
4675                                                                 CTy"PSR",
4676                                                                 qVar"s"),
4677                                                              Dest
4678                                                                ("TE",bTy,
4679                                                                 Dest
4680                                                                   ("SCTLR",
4681                                                                    CTy"SCTLR",
4682                                                                    Dest
4683                                                                      ("CP15",
4684                                                                       CTy"CP15",
4685                                                                       qVar"s")))])]),
4686                                                  Let(TP[Var("v",F32),
4687                                                         qVar"s"],
4688                                                      Let(qVar"s0",
4689                                                          Rupd
4690                                                            ("CPSR",
4691                                                             TP[qVar"s",
4692                                                                Rupd
4693                                                                  ("E",
4694                                                                   TP[Dest
4695                                                                        ("CPSR",
4696                                                                         CTy"PSR",
4697                                                                         qVar"s"),
4698                                                                      Dest
4699                                                                        ("EE",
4700                                                                         bTy,
4701                                                                         Dest
4702                                                                           ("SCTLR",
4703                                                                            CTy"SCTLR",
4704                                                                            Dest
4705                                                                              ("CP15",
4706                                                                               CTy"CP15",
4707                                                                               qVar"s")))])]),
4708                                                          TP[Apply
4709                                                               (Call
4710                                                                  ("ExcVectorBase",
4711                                                                   ATy(qTy,
4712                                                                       F32),
4713                                                                   LU),
4714                                                                qVar"s0"),
4715                                                             qVar"s0"]),
4716                                                      Apply
4717                                                        (Call
4718                                                           ("BranchTo",
4719                                                            ATy(qTy,qTy),
4720                                                            Bop(Add,
4721                                                                Var("v",
4722                                                                    F32),
4723                                                                Var("vect_offset",
4724                                                                    F32))),
4725                                                         qVar"s")))))))))))))))
4726;
4727val TakePhysicalIRQException_def = Def
4728  ("TakePhysicalIRQException",AVar uTy,
4729   Close
4730     (qVar"state",
4731      Let(TP[Var("v",F32),qVar"s"],
4732          ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"state")),
4733              Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
4734              Let(TP[Var("v",F32),qVar"s"],
4735                  Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
4736                  TP[Bop(Sub,Var("v",F32),LW(4,32)),qVar"s"])),
4737          Let(Var("v0",CTy"PSR"),Dest("CPSR",CTy"PSR",qVar"s"),
4738              Let(Var("vect_offset",F32),LW(24,32),
4739                  ITB([(Bop(And,
4740                            Apply
4741                              (Call("HaveSecurityExt",ATy(qTy,bTy),LU),
4742                               qVar"s"),
4743                            Dest
4744                              ("IRQ",bTy,
4745                               Dest
4746                                 ("SCR",CTy"SCR",
4747                                  Dest("CP15",CTy"CP15",qVar"s")))),
4748                        Apply
4749                          (Call
4750                             ("EnterMonitorMode",ATy(qTy,qTy),
4751                              TP[Var("v0",CTy"PSR"),Var("v",F32),
4752                                 Var("vect_offset",F32)]),
4753                           ITE(EQ(Dest
4754                                    ("M",FTy 5,
4755                                     Dest("CPSR",CTy"PSR",qVar"s")),
4756                                  LW(22,5)),
4757                               Rupd
4758                                 ("CP15",
4759                                  TP[qVar"s",
4760                                     Rupd
4761                                       ("SCR",
4762                                        TP[Dest("CP15",CTy"CP15",qVar"s"),
4763                                           Rupd
4764                                             ("NS",
4765                                              TP[Dest
4766                                                   ("SCR",CTy"SCR",
4767                                                    Dest
4768                                                      ("CP15",CTy"CP15",
4769                                                       qVar"s")),LF])])]),
4770                               qVar"s"))),
4771                       (Bop(Or,
4772                            Bop(And,
4773                                Apply
4774                                  (Call("HaveVirtExt",ATy(qTy,bTy),LU),
4775                                   qVar"s"),
4776                                Bop(And,
4777                                    Apply
4778                                      (Call
4779                                         ("HaveSecurityExt",ATy(qTy,bTy),
4780                                          LU),qVar"s"),
4781                                    Bop(And,
4782                                        Mop(Not,
4783                                            Dest
4784                                              ("IRQ",bTy,
4785                                               Dest
4786                                                 ("SCR",CTy"SCR",
4787                                                  Dest
4788                                                    ("CP15",CTy"CP15",
4789                                                     qVar"s")))),
4790                                        Bop(And,
4791                                            Dest
4792                                              ("IMO",bTy,
4793                                               Dest
4794                                                 ("HCR",CTy"HCR",
4795                                                  Dest
4796                                                    ("CP15",CTy"CP15",
4797                                                     qVar"s"))),
4798                                            Mop(Not,
4799                                                Apply
4800                                                  (Call
4801                                                     ("IsSecure",
4802                                                      ATy(qTy,bTy),LU),
4803                                                   qVar"s")))))),
4804                            EQ(Dest
4805                                 ("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")),
4806                               LW(26,5))),
4807                        Apply
4808                          (Call
4809                             ("EnterHypMode",ATy(qTy,qTy),
4810                              TP[Var("v0",CTy"PSR"),
4811                                 Bop(Sub,Var("v",F32),LW(4,32)),
4812                                 Var("vect_offset",F32)]),
4813                           Rupd
4814                             ("CP15",
4815                              TP[qVar"s",
4816                                 Rupd
4817                                   ("HSR",
4818                                    TP[Dest("CP15",CTy"CP15",qVar"s"),
4819                                       LX(CTy"HSR")])])))],
4820                      Let(qVar"s",
4821                          ITE(EQ(Dest
4822                                   ("M",FTy 5,
4823                                    Dest("CPSR",CTy"PSR",qVar"s")),
4824                                 LW(22,5)),
4825                              Rupd
4826                                ("CP15",
4827                                 TP[qVar"s",
4828                                    Rupd
4829                                      ("SCR",
4830                                       TP[Dest("CP15",CTy"CP15",qVar"s"),
4831                                          Rupd
4832                                            ("NS",
4833                                             TP[Dest
4834                                                  ("SCR",CTy"SCR",
4835                                                   Dest
4836                                                     ("CP15",CTy"CP15",
4837                                                      qVar"s")),LF])])]),
4838                              qVar"s"),
4839                          Let(qVar"s",
4840                              Apply
4841                                (Call
4842                                   ("write'R",ATy(qTy,qTy),
4843                                    TP[Var("v",F32),LW(14,4)]),
4844                                 Apply
4845                                   (Call
4846                                      ("write'SPSR",ATy(qTy,qTy),
4847                                       Var("v0",CTy"PSR")),
4848                                    Rupd
4849                                      ("CPSR",
4850                                       TP[qVar"s",
4851                                          Rupd
4852                                            ("M",
4853                                             TP[Dest
4854                                                  ("CPSR",CTy"PSR",qVar"s"),
4855                                                LW(18,5)])]))),
4856                              Let(TP[bVar"v",qVar"s"],
4857                                  Let(qVar"s0",
4858                                      Rupd
4859                                        ("CPSR",
4860                                         TP[qVar"s",
4861                                            Rupd
4862                                              ("I",
4863                                               TP[Dest
4864                                                    ("CPSR",CTy"PSR",
4865                                                     qVar"s"),LT])]),
4866                                      TP[Apply
4867                                           (Call
4868                                              ("HaveSecurityExt",
4869                                               ATy(qTy,bTy),LU),qVar"s0"),
4870                                         qVar"s0"]),
4871                                  Let(qVar"s",
4872                                      ITE(Bop(Or,Mop(Not,bVar"v"),
4873                                              Bop(Or,
4874                                                  Apply
4875                                                    (Call
4876                                                       ("HaveVirtExt",
4877                                                        ATy(qTy,bTy),LU),
4878                                                     qVar"s"),
4879                                                  Bop(Or,
4880                                                      Mop(Not,
4881                                                          Dest
4882                                                            ("NS",bTy,
4883                                                             Dest
4884                                                               ("SCR",
4885                                                                CTy"SCR",
4886                                                                Dest
4887                                                                  ("CP15",
4888                                                                   CTy"CP15",
4889                                                                   qVar"s")))),
4890                                                      Dest
4891                                                        ("AW",bTy,
4892                                                         Dest
4893                                                           ("SCR",
4894                                                            CTy"SCR",
4895                                                            Dest
4896                                                              ("CP15",
4897                                                               CTy"CP15",
4898                                                               qVar"s")))))),
4899                                          Rupd
4900                                            ("CPSR",
4901                                             TP[qVar"s",
4902                                                Rupd
4903                                                  ("A",
4904                                                   TP[Dest
4905                                                        ("CPSR",CTy"PSR",
4906                                                         qVar"s"),LT])]),
4907                                          qVar"s"),
4908                                      Let(qVar"s",
4909                                          Rupd
4910                                            ("CPSR",
4911                                             TP[qVar"s",
4912                                                Rupd
4913                                                  ("IT",
4914                                                   TP[Dest
4915                                                        ("CPSR",CTy"PSR",
4916                                                         qVar"s"),LW(0,8)])]),
4917                                          Let(qVar"s",
4918                                              Rupd
4919                                                ("CPSR",
4920                                                 TP[qVar"s",
4921                                                    Rupd
4922                                                      ("J",
4923                                                       TP[Dest
4924                                                            ("CPSR",
4925                                                             CTy"PSR",
4926                                                             qVar"s"),LF])]),
4927                                              Let(qVar"s",
4928                                                  Rupd
4929                                                    ("CPSR",
4930                                                     TP[qVar"s",
4931                                                        Rupd
4932                                                          ("T",
4933                                                           TP[Dest
4934                                                                ("CPSR",
4935                                                                 CTy"PSR",
4936                                                                 qVar"s"),
4937                                                              Dest
4938                                                                ("TE",bTy,
4939                                                                 Dest
4940                                                                   ("SCTLR",
4941                                                                    CTy"SCTLR",
4942                                                                    Dest
4943                                                                      ("CP15",
4944                                                                       CTy"CP15",
4945                                                                       qVar"s")))])]),
4946                                                  Let(qVar"s",
4947                                                      Rupd
4948                                                        ("CPSR",
4949                                                         TP[qVar"s",
4950                                                            Rupd
4951                                                              ("E",
4952                                                               TP[Dest
4953                                                                    ("CPSR",
4954                                                                     CTy"PSR",
4955                                                                     qVar"s"),
4956                                                                  Dest
4957                                                                    ("EE",
4958                                                                     bTy,
4959                                                                     Dest
4960                                                                       ("SCTLR",
4961                                                                        CTy"SCTLR",
4962                                                                        Dest
4963                                                                          ("CP15",
4964                                                                           CTy"CP15",
4965                                                                           qVar"s")))])]),
4966                                                      ITE(Dest
4967                                                            ("VE",bTy,
4968                                                             Dest
4969                                                               ("SCTLR",
4970                                                                CTy"SCTLR",
4971                                                                Dest
4972                                                                  ("CP15",
4973                                                                   CTy"CP15",
4974                                                                   qVar"s"))),
4975                                                          Mop(Snd,
4976                                                              Apply
4977                                                                (Call
4978                                                                   ("raise'exception",
4979                                                                    ATy(qTy,
4980                                                                        PTy(uTy,
4981                                                                            qTy)),
4982                                                                    Call
4983                                                                      ("IMPLEMENTATION_DEFINED",
4984                                                                       CTy"exception",
4985                                                                       LS
4986                                                                        "branch to an IRQ vector")),
4987                                                                 qVar"s")),
4988                                                          Apply
4989                                                            (Call
4990                                                               ("BranchTo",
4991                                                                ATy(qTy,
4992                                                                    qTy),
4993                                                                Bop(Add,
4994                                                                    Apply
4995                                                                      (Call
4996                                                                         ("ExcVectorBase",
4997                                                                          ATy(qTy,
4998                                                                              F32),
4999                                                                          LU),
5000                                                                       qVar"s"),
5001                                                                    Var("vect_offset",
5002                                                                        F32))),
5003                                                             qVar"s"))))))))))))))))
5004;
5005val TakeVirtualIRQException_def = Def
5006  ("TakeVirtualIRQException",AVar uTy,
5007   Close
5008     (qVar"state",
5009      Let(TP[Var("v",F32),qVar"s"],
5010          ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"state")),
5011              Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
5012              Let(TP[Var("v",F32),qVar"s"],
5013                  Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
5014                  TP[Bop(Sub,Var("v",F32),LW(4,32)),qVar"s"])),
5015          Let(qVar"s",
5016              Apply
5017                (Call("write'R",ATy(qTy,qTy),TP[Var("v",F32),LW(14,4)]),
5018                 Apply
5019                   (Call
5020                      ("write'SPSR",ATy(qTy,qTy),
5021                       Dest("CPSR",CTy"PSR",qVar"s")),
5022                    Rupd
5023                      ("CPSR",
5024                       TP[qVar"s",
5025                          Rupd
5026                            ("M",
5027                             TP[Dest("CPSR",CTy"PSR",qVar"s"),LW(18,5)])]))),
5028              Let(qVar"s",
5029                  Rupd
5030                    ("CPSR",
5031                     TP[qVar"s",
5032                        Rupd("I",TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]),
5033                  Let(qVar"s",
5034                      Rupd
5035                        ("CPSR",
5036                         TP[qVar"s",
5037                            Rupd("A",TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]),
5038                      Let(qVar"s",
5039                          Rupd
5040                            ("CPSR",
5041                             TP[qVar"s",
5042                                Rupd
5043                                  ("IT",
5044                                   TP[Dest("CPSR",CTy"PSR",qVar"s"),
5045                                      LW(0,8)])]),
5046                          Let(qVar"s",
5047                              Rupd
5048                                ("CPSR",
5049                                 TP[qVar"s",
5050                                    Rupd
5051                                      ("J",
5052                                       TP[Dest("CPSR",CTy"PSR",qVar"s"),LF])]),
5053                              Let(qVar"s",
5054                                  Rupd
5055                                    ("CPSR",
5056                                     TP[qVar"s",
5057                                        Rupd
5058                                          ("T",
5059                                           TP[Dest
5060                                                ("CPSR",CTy"PSR",qVar"s"),
5061                                              Dest
5062                                                ("TE",bTy,
5063                                                 Dest
5064                                                   ("SCTLR",CTy"SCTLR",
5065                                                    Dest
5066                                                      ("CP15",CTy"CP15",
5067                                                       qVar"s")))])]),
5068                                  Let(qVar"s",
5069                                      Rupd
5070                                        ("CPSR",
5071                                         TP[qVar"s",
5072                                            Rupd
5073                                              ("E",
5074                                               TP[Dest
5075                                                    ("CPSR",CTy"PSR",
5076                                                     qVar"s"),
5077                                                  Dest
5078                                                    ("EE",bTy,
5079                                                     Dest
5080                                                       ("SCTLR",
5081                                                        CTy"SCTLR",
5082                                                        Dest
5083                                                          ("CP15",
5084                                                           CTy"CP15",
5085                                                           qVar"s")))])]),
5086                                      ITE(Dest
5087                                            ("VE",bTy,
5088                                             Dest
5089                                               ("SCTLR",CTy"SCTLR",
5090                                                Dest
5091                                                  ("CP15",CTy"CP15",
5092                                                   qVar"s"))),
5093                                          Mop(Snd,
5094                                              Apply
5095                                                (Call
5096                                                   ("raise'exception",
5097                                                    ATy(qTy,PTy(uTy,qTy)),
5098                                                    Call
5099                                                      ("IMPLEMENTATION_DEFINED",
5100                                                       CTy"exception",
5101                                                       LS
5102                                                        "branch to an IRQ vector")),
5103                                                 qVar"s")),
5104                                          Apply
5105                                            (Call
5106                                               ("BranchTo",ATy(qTy,qTy),
5107                                                Bop(Add,
5108                                                    Apply
5109                                                      (Call
5110                                                         ("ExcVectorBase",
5111                                                          ATy(qTy,F32),LU),
5112                                                       qVar"s"),LW(24,32))),
5113                                             qVar"s"))))))))))))
5114;
5115val TakePhysicalFIQException_def = Def
5116  ("TakePhysicalFIQException",AVar uTy,
5117   Close
5118     (qVar"state",
5119      Let(TP[Var("v",F32),qVar"s"],
5120          ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"state")),
5121              Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
5122              Let(TP[Var("v",F32),qVar"s"],
5123                  Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
5124                  TP[Bop(Sub,Var("v",F32),LW(4,32)),qVar"s"])),
5125          Let(Var("v0",CTy"PSR"),Dest("CPSR",CTy"PSR",qVar"s"),
5126              Let(Var("vect_offset",F32),LW(28,32),
5127                  ITB([(Bop(And,
5128                            Apply
5129                              (Call("HaveSecurityExt",ATy(qTy,bTy),LU),
5130                               qVar"s"),
5131                            Dest
5132                              ("FIQ",bTy,
5133                               Dest
5134                                 ("SCR",CTy"SCR",
5135                                  Dest("CP15",CTy"CP15",qVar"s")))),
5136                        Apply
5137                          (Call
5138                             ("EnterMonitorMode",ATy(qTy,qTy),
5139                              TP[Var("v0",CTy"PSR"),Var("v",F32),
5140                                 Var("vect_offset",F32)]),
5141                           ITE(EQ(Dest
5142                                    ("M",FTy 5,
5143                                     Dest("CPSR",CTy"PSR",qVar"s")),
5144                                  LW(22,5)),
5145                               Rupd
5146                                 ("CP15",
5147                                  TP[qVar"s",
5148                                     Rupd
5149                                       ("SCR",
5150                                        TP[Dest("CP15",CTy"CP15",qVar"s"),
5151                                           Rupd
5152                                             ("NS",
5153                                              TP[Dest
5154                                                   ("SCR",CTy"SCR",
5155                                                    Dest
5156                                                      ("CP15",CTy"CP15",
5157                                                       qVar"s")),LF])])]),
5158                               qVar"s"))),
5159                       (Bop(Or,
5160                            Bop(And,
5161                                Apply
5162                                  (Call("HaveVirtExt",ATy(qTy,bTy),LU),
5163                                   qVar"s"),
5164                                Bop(And,
5165                                    Apply
5166                                      (Call
5167                                         ("HaveSecurityExt",ATy(qTy,bTy),
5168                                          LU),qVar"s"),
5169                                    Bop(And,
5170                                        Mop(Not,
5171                                            Dest
5172                                              ("FIQ",bTy,
5173                                               Dest
5174                                                 ("SCR",CTy"SCR",
5175                                                  Dest
5176                                                    ("CP15",CTy"CP15",
5177                                                     qVar"s")))),
5178                                        Bop(And,
5179                                            Dest
5180                                              ("FMO",bTy,
5181                                               Dest
5182                                                 ("HCR",CTy"HCR",
5183                                                  Dest
5184                                                    ("CP15",CTy"CP15",
5185                                                     qVar"s"))),
5186                                            Mop(Not,
5187                                                Apply
5188                                                  (Call
5189                                                     ("IsSecure",
5190                                                      ATy(qTy,bTy),LU),
5191                                                   qVar"s")))))),
5192                            EQ(Dest
5193                                 ("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")),
5194                               LW(26,5))),
5195                        Apply
5196                          (Call
5197                             ("EnterHypMode",ATy(qTy,qTy),
5198                              TP[Var("v0",CTy"PSR"),
5199                                 Bop(Sub,Var("v",F32),LW(4,32)),
5200                                 Var("vect_offset",F32)]),
5201                           Rupd
5202                             ("CP15",
5203                              TP[qVar"s",
5204                                 Rupd
5205                                   ("HSR",
5206                                    TP[Dest("CP15",CTy"CP15",qVar"s"),
5207                                       LX(CTy"HSR")])])))],
5208                      Let(qVar"s",
5209                          ITE(EQ(Dest
5210                                   ("M",FTy 5,
5211                                    Dest("CPSR",CTy"PSR",qVar"s")),
5212                                 LW(22,5)),
5213                              Rupd
5214                                ("CP15",
5215                                 TP[qVar"s",
5216                                    Rupd
5217                                      ("SCR",
5218                                       TP[Dest("CP15",CTy"CP15",qVar"s"),
5219                                          Rupd
5220                                            ("NS",
5221                                             TP[Dest
5222                                                  ("SCR",CTy"SCR",
5223                                                   Dest
5224                                                     ("CP15",CTy"CP15",
5225                                                      qVar"s")),LF])])]),
5226                              qVar"s"),
5227                          Let(qVar"s",
5228                              Apply
5229                                (Call
5230                                   ("write'R",ATy(qTy,qTy),
5231                                    TP[Var("v",F32),LW(14,4)]),
5232                                 Apply
5233                                   (Call
5234                                      ("write'SPSR",ATy(qTy,qTy),
5235                                       Var("v0",CTy"PSR")),
5236                                    Rupd
5237                                      ("CPSR",
5238                                       TP[qVar"s",
5239                                          Rupd
5240                                            ("M",
5241                                             TP[Dest
5242                                                  ("CPSR",CTy"PSR",qVar"s"),
5243                                                LW(17,5)])]))),
5244                              Let(TP[bVar"v",qVar"s"],
5245                                  Let(qVar"s0",
5246                                      Rupd
5247                                        ("CPSR",
5248                                         TP[qVar"s",
5249                                            Rupd
5250                                              ("I",
5251                                               TP[Dest
5252                                                    ("CPSR",CTy"PSR",
5253                                                     qVar"s"),LT])]),
5254                                      TP[Apply
5255                                           (Call
5256                                              ("HaveSecurityExt",
5257                                               ATy(qTy,bTy),LU),qVar"s0"),
5258                                         qVar"s0"]),
5259                                  Let(TP[bVar"v",qVar"s"],
5260                                      Let(qVar"s0",
5261                                          ITE(Bop(Or,Mop(Not,bVar"v"),
5262                                                  Bop(Or,
5263                                                      Apply
5264                                                        (Call
5265                                                           ("HaveVirtExt",
5266                                                            ATy(qTy,bTy),
5267                                                            LU),qVar"s"),
5268                                                      Bop(Or,
5269                                                          Mop(Not,
5270                                                              Dest
5271                                                                ("NS",bTy,
5272                                                                 Dest
5273                                                                   ("SCR",
5274                                                                    CTy"SCR",
5275                                                                    Dest
5276                                                                      ("CP15",
5277                                                                       CTy"CP15",
5278                                                                       qVar"s")))),
5279                                                          Dest
5280                                                            ("FW",bTy,
5281                                                             Dest
5282                                                               ("SCR",
5283                                                                CTy"SCR",
5284                                                                Dest
5285                                                                  ("CP15",
5286                                                                   CTy"CP15",
5287                                                                   qVar"s")))))),
5288                                              Rupd
5289                                                ("CPSR",
5290                                                 TP[qVar"s",
5291                                                    Rupd
5292                                                      ("F",
5293                                                       TP[Dest
5294                                                            ("CPSR",
5295                                                             CTy"PSR",
5296                                                             qVar"s"),LT])]),
5297                                              qVar"s"),
5298                                          TP[Apply
5299                                               (Call
5300                                                  ("HaveSecurityExt",
5301                                                   ATy(qTy,bTy),LU),
5302                                                qVar"s0"),qVar"s0"]),
5303                                      Let(qVar"s",
5304                                          ITE(Bop(Or,Mop(Not,bVar"v"),
5305                                                  Bop(Or,
5306                                                      Apply
5307                                                        (Call
5308                                                           ("HaveVirtExt",
5309                                                            ATy(qTy,bTy),
5310                                                            LU),qVar"s"),
5311                                                      Bop(Or,
5312                                                          Mop(Not,
5313                                                              Dest
5314                                                                ("NS",bTy,
5315                                                                 Dest
5316                                                                   ("SCR",
5317                                                                    CTy"SCR",
5318                                                                    Dest
5319                                                                      ("CP15",
5320                                                                       CTy"CP15",
5321                                                                       qVar"s")))),
5322                                                          Dest
5323                                                            ("AW",bTy,
5324                                                             Dest
5325                                                               ("SCR",
5326                                                                CTy"SCR",
5327                                                                Dest
5328                                                                  ("CP15",
5329                                                                   CTy"CP15",
5330                                                                   qVar"s")))))),
5331                                              Rupd
5332                                                ("CPSR",
5333                                                 TP[qVar"s",
5334                                                    Rupd
5335                                                      ("A",
5336                                                       TP[Dest
5337                                                            ("CPSR",
5338                                                             CTy"PSR",
5339                                                             qVar"s"),LT])]),
5340                                              qVar"s"),
5341                                          Let(qVar"s",
5342                                              Rupd
5343                                                ("CPSR",
5344                                                 TP[qVar"s",
5345                                                    Rupd
5346                                                      ("IT",
5347                                                       TP[Dest
5348                                                            ("CPSR",
5349                                                             CTy"PSR",
5350                                                             qVar"s"),
5351                                                          LW(0,8)])]),
5352                                              Let(qVar"s",
5353                                                  Rupd
5354                                                    ("CPSR",
5355                                                     TP[qVar"s",
5356                                                        Rupd
5357                                                          ("J",
5358                                                           TP[Dest
5359                                                                ("CPSR",
5360                                                                 CTy"PSR",
5361                                                                 qVar"s"),
5362                                                              LF])]),
5363                                                  Let(qVar"s",
5364                                                      Rupd
5365                                                        ("CPSR",
5366                                                         TP[qVar"s",
5367                                                            Rupd
5368                                                              ("T",
5369                                                               TP[Dest
5370                                                                    ("CPSR",
5371                                                                     CTy"PSR",
5372                                                                     qVar"s"),
5373                                                                  Dest
5374                                                                    ("TE",
5375                                                                     bTy,
5376                                                                     Dest
5377                                                                       ("SCTLR",
5378                                                                        CTy"SCTLR",
5379                                                                        Dest
5380                                                                          ("CP15",
5381                                                                           CTy"CP15",
5382                                                                           qVar"s")))])]),
5383                                                      Let(qVar"s",
5384                                                          Rupd
5385                                                            ("CPSR",
5386                                                             TP[qVar"s",
5387                                                                Rupd
5388                                                                  ("E",
5389                                                                   TP[Dest
5390                                                                        ("CPSR",
5391                                                                         CTy"PSR",
5392                                                                         qVar"s"),
5393                                                                      Dest
5394                                                                        ("EE",
5395                                                                         bTy,
5396                                                                         Dest
5397                                                                           ("SCTLR",
5398                                                                            CTy"SCTLR",
5399                                                                            Dest
5400                                                                              ("CP15",
5401                                                                               CTy"CP15",
5402                                                                               qVar"s")))])]),
5403                                                          ITE(Dest
5404                                                                ("VE",bTy,
5405                                                                 Dest
5406                                                                   ("SCTLR",
5407                                                                    CTy"SCTLR",
5408                                                                    Dest
5409                                                                      ("CP15",
5410                                                                       CTy"CP15",
5411                                                                       qVar"s"))),
5412                                                              Mop(Snd,
5413                                                                  Apply
5414                                                                    (Call
5415                                                                       ("raise'exception",
5416                                                                        ATy(qTy,
5417                                                                            PTy(uTy,
5418                                                                                qTy)),
5419                                                                        Call
5420                                                                          ("IMPLEMENTATION_DEFINED",
5421                                                                           CTy"exception",
5422                                                                           LS
5423                                                                            "branch to an FIQ vector")),
5424                                                                     qVar"s")),
5425                                                              Apply
5426                                                                (Call
5427                                                                   ("BranchTo",
5428                                                                    ATy(qTy,
5429                                                                        qTy),
5430                                                                    Bop(Add,
5431                                                                        Apply
5432                                                                          (Call
5433                                                                             ("ExcVectorBase",
5434                                                                              ATy(qTy,
5435                                                                                  F32),
5436                                                                              LU),
5437                                                                           qVar"s"),
5438                                                                        Var("vect_offset",
5439                                                                            F32))),
5440                                                                 qVar"s")))))))))))))))))
5441;
5442val TakeVirtualFIQException_def = Def
5443  ("TakeVirtualFIQException",AVar uTy,
5444   Close
5445     (qVar"state",
5446      Let(TP[Var("v",F32),qVar"s"],
5447          ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"state")),
5448              Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
5449              Let(TP[Var("v",F32),qVar"s"],
5450                  Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
5451                  TP[Bop(Sub,Var("v",F32),LW(4,32)),qVar"s"])),
5452          Let(qVar"s",
5453              Apply
5454                (Call("write'R",ATy(qTy,qTy),TP[Var("v",F32),LW(14,4)]),
5455                 Apply
5456                   (Call
5457                      ("write'SPSR",ATy(qTy,qTy),
5458                       Dest("CPSR",CTy"PSR",qVar"s")),
5459                    Rupd
5460                      ("CPSR",
5461                       TP[qVar"s",
5462                          Rupd
5463                            ("M",
5464                             TP[Dest("CPSR",CTy"PSR",qVar"s"),LW(17,5)])]))),
5465              Let(qVar"s",
5466                  Rupd
5467                    ("CPSR",
5468                     TP[qVar"s",
5469                        Rupd("I",TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]),
5470                  Let(qVar"s",
5471                      Rupd
5472                        ("CPSR",
5473                         TP[qVar"s",
5474                            Rupd("F",TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]),
5475                      Let(qVar"s",
5476                          Rupd
5477                            ("CPSR",
5478                             TP[qVar"s",
5479                                Rupd
5480                                  ("A",
5481                                   TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]),
5482                          Let(qVar"s",
5483                              Rupd
5484                                ("CPSR",
5485                                 TP[qVar"s",
5486                                    Rupd
5487                                      ("IT",
5488                                       TP[Dest("CPSR",CTy"PSR",qVar"s"),
5489                                          LW(0,8)])]),
5490                              Let(qVar"s",
5491                                  Rupd
5492                                    ("CPSR",
5493                                     TP[qVar"s",
5494                                        Rupd
5495                                          ("J",
5496                                           TP[Dest
5497                                                ("CPSR",CTy"PSR",qVar"s"),
5498                                              LF])]),
5499                                  Let(qVar"s",
5500                                      Rupd
5501                                        ("CPSR",
5502                                         TP[qVar"s",
5503                                            Rupd
5504                                              ("T",
5505                                               TP[Dest
5506                                                    ("CPSR",CTy"PSR",
5507                                                     qVar"s"),
5508                                                  Dest
5509                                                    ("TE",bTy,
5510                                                     Dest
5511                                                       ("SCTLR",
5512                                                        CTy"SCTLR",
5513                                                        Dest
5514                                                          ("CP15",
5515                                                           CTy"CP15",
5516                                                           qVar"s")))])]),
5517                                      Let(qVar"s",
5518                                          Rupd
5519                                            ("CPSR",
5520                                             TP[qVar"s",
5521                                                Rupd
5522                                                  ("E",
5523                                                   TP[Dest
5524                                                        ("CPSR",CTy"PSR",
5525                                                         qVar"s"),
5526                                                      Dest
5527                                                        ("EE",bTy,
5528                                                         Dest
5529                                                           ("SCTLR",
5530                                                            CTy"SCTLR",
5531                                                            Dest
5532                                                              ("CP15",
5533                                                               CTy"CP15",
5534                                                               qVar"s")))])]),
5535                                          ITE(Dest
5536                                                ("VE",bTy,
5537                                                 Dest
5538                                                   ("SCTLR",CTy"SCTLR",
5539                                                    Dest
5540                                                      ("CP15",CTy"CP15",
5541                                                       qVar"s"))),
5542                                              Mop(Snd,
5543                                                  Apply
5544                                                    (Call
5545                                                       ("raise'exception",
5546                                                        ATy(qTy,
5547                                                            PTy(uTy,qTy)),
5548                                                        Call
5549                                                          ("IMPLEMENTATION_DEFINED",
5550                                                           CTy"exception",
5551                                                           LS
5552                                                            "branch to an FIQ vector")),
5553                                                     qVar"s")),
5554                                              Apply
5555                                                (Call
5556                                                   ("BranchTo",
5557                                                    ATy(qTy,qTy),
5558                                                    Bop(Add,
5559                                                        Apply
5560                                                          (Call
5561                                                             ("ExcVectorBase",
5562                                                              ATy(qTy,F32),
5563                                                              LU),qVar"s"),
5564                                                        LW(28,32))),
5565                                                 qVar"s")))))))))))))
5566;
5567val TakeHypTrapException_def = Def
5568  ("TakeHypTrapException",AVar uTy,
5569   Close
5570     (qVar"state",
5571      Let(TP[Var("v",F32),qVar"s"],
5572          ITE(Dest("T",bTy,Dest("CPSR",CTy"PSR",qVar"state")),
5573              Let(TP[Var("v",F32),qVar"s"],
5574                  Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
5575                  TP[Bop(Sub,Var("v",F32),LW(4,32)),qVar"s"]),
5576              Let(TP[Var("v",F32),qVar"s"],
5577                  Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
5578                  TP[Bop(Sub,Var("v",F32),LW(8,32)),qVar"s"])),
5579          Apply
5580            (Call
5581               ("EnterHypMode",ATy(qTy,qTy),
5582                TP[Dest("CPSR",CTy"PSR",qVar"s"),Var("v",F32),LW(20,32)]),
5583             qVar"s"))))
5584;
5585val WriteHSR_def = Def
5586  ("WriteHSR",TP[Var("ec",FTy 6),Var("HSRString",FTy 25)],
5587   Close
5588     (qVar"state",
5589      Let(Var("s0",F32),BFI(LN 31,LN 26,Var("ec",FTy 6),LW(0,32)),
5590          Let(Var("s0",F32),
5591              ITE(Bop(Or,
5592                      Mop(Not,
5593                          EQ(EX(Var("ec",FTy 6),LN 5,LN 3,FTy 3),LW(4,3))),
5594                      Bop(And,Bop(Bit,Var("ec",FTy 6),LN 2),
5595                          Bop(Bit,Var("HSRString",FTy 25),LN 24))),
5596                  BFI(LN 25,LN 25,
5597                      Mop(Cast F1,
5598                          EQ(Apply
5599                               (Call("ThisInstrLength",ATy(qTy,nTy),LU),
5600                                qVar"state"),LN 32)),Var("s0",F32)),
5601                  Var("s0",F32)),
5602              Let(Var("s",PTy(F32,qTy)),
5603                  ITE(Bop(And,
5604                          EQ(EX(Var("ec",FTy 6),LN 5,LN 4,FTy 2),LW(0,2)),
5605                          Mop(Not,
5606                              EQ(EX(Var("ec",FTy 6),LN 3,LN 0,F4),LW(0,4)))),
5607                      ITE(EQ(Apply
5608                               (Call
5609                                  ("CurrentInstrSet",
5610                                   ATy(qTy,CTy"InstrSet"),LU),qVar"state"),
5611                             LC("InstrSet_ARM",CTy"InstrSet")),
5612                          TP[BFI(LN 23,LN 20,
5613                                 Apply
5614                                   (Call("CurrentCond",ATy(qTy,F4),LU),
5615                                    qVar"state"),
5616                                 BFI(LN 24,LN 24,Mop(Cast F1,LT),
5617                                     Var("s0",F32))),qVar"state"],
5618                          Let(Var("s0",F32),
5619                              BFI(LN 24,LN 24,Mop(Cast F1,LX bTy),
5620                                  Var("s0",F32)),
5621                              TP[BFI(LN 19,LN 0,
5622                                     EX(Var("HSRString",FTy 25),LN 19,
5623                                        LN 0,FTy 20),
5624                                     ITE(Bop(Bit,Var("s0",F32),LN 24),
5625                                         ITE(Apply
5626                                               (Call
5627                                                  ("ConditionPassed",
5628                                                   ATy(qTy,bTy),LU),
5629                                                qVar"state"),
5630                                             BFI(LN 23,LN 20,
5631                                                 ITE(LX bTy,
5632                                                     Apply
5633                                                       (Call
5634                                                          ("CurrentCond",
5635                                                           ATy(qTy,F4),LU),
5636                                                        qVar"state"),
5637                                                     LW(14,4)),
5638                                                 Var("s0",F32)),
5639                                             BFI(LN 23,LN 20,
5640                                                 Apply
5641                                                   (Call
5642                                                      ("CurrentCond",
5643                                                       ATy(qTy,F4),LU),
5644                                                    qVar"state"),
5645                                                 Var("s0",F32))),
5646                                         Var("s0",F32))),qVar"state"])),
5647                      TP[BFI(LN 24,LN 0,Var("HSRString",FTy 25),
5648                             Var("s0",F32)),qVar"state"]),
5649                  Rupd
5650                    ("CP15",
5651                     TP[Mop(Snd,Var("s",PTy(F32,qTy))),
5652                        Rupd
5653                          ("HSR",
5654                           TP[Dest
5655                                ("CP15",CTy"CP15",
5656                                 Mop(Snd,Var("s",PTy(F32,qTy)))),
5657                              Call
5658                                ("write'reg'HSR",CTy"HSR",
5659                                 TP[Dest
5660                                      ("HSR",CTy"HSR",
5661                                       Dest
5662                                         ("CP15",CTy"CP15",
5663                                          Mop(Snd,Var("s",PTy(F32,qTy))))),
5664                                    Mop(Fst,Var("s",PTy(F32,qTy)))])])]))))))
5665;
5666val CallSupervisor_def = Def
5667  ("CallSupervisor",Var("immediate",F16),
5668   Close
5669     (qVar"state",
5670      Let(TP[bVar"v",qVar"s"],
5671          Apply
5672            (Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
5673          Apply
5674            (Call("TakeSVCException",ATy(qTy,qTy),LU),
5675             Let(TP[bVar"v",qVar"s"],
5676                 ITB([(bVar"v",TP[LT,qVar"s"]),
5677                      (Apply(Call("HaveVirtExt",ATy(qTy,bTy),LU),qVar"s"),
5678                       ITE(Mop(Not,
5679                               Apply
5680                                 (Call("IsSecure",ATy(qTy,bTy),LU),qVar"s")),
5681                           Let(TP[bVar"v",qVar"s"],
5682                               Apply
5683                                 (Call
5684                                    ("CurrentModeIsNotUser",
5685                                     ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"),
5686                               TP[Bop(And,Mop(Not,bVar"v"),
5687                                      Dest
5688                                        ("TGE",bTy,
5689                                         Dest
5690                                           ("HCR",CTy"HCR",
5691                                            Dest("CP15",CTy"CP15",qVar"s")))),
5692                                  qVar"s"]),TP[LF,qVar"s"]))],
5693                     TP[LF,qVar"s"]),
5694                 ITE(bVar"v",
5695                     Apply
5696                       (Call
5697                          ("WriteHSR",ATy(qTy,qTy),
5698                           TP[LW(18,6),
5699                              BFI(LN 15,LN 0,
5700                                  ITE(EQ(Apply
5701                                           (Call
5702                                              ("CurrentCond",ATy(qTy,F4),
5703                                               LU),qVar"s"),LW(14,4)),
5704                                      Var("immediate",F16),LX F16),
5705                                  LW(0,25))]),qVar"s"),qVar"s"))))))
5706;
5707val CallHypervisor_def = Def
5708  ("CallHypervisor",Var("immediate",F16),
5709   Close
5710     (qVar"state",
5711      Apply
5712        (Call("TakeHVCException",ATy(qTy,qTy),LU),
5713         Apply
5714           (Call
5715              ("WriteHSR",ATy(qTy,qTy),
5716               TP[LW(18,6),CC[Var("immediate",F16),LW(0,9)]]),qVar"state"))))
5717;
5718val BankedRegisterAccessValid_def = Def
5719  ("BankedRegisterAccessValid",TP[Var("SYSm",FTy 5),Var("mode",FTy 5)],
5720   Close
5721     (qVar"state",
5722      ITB([(EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2),LW(0,2)),
5723            ITB([(EQ(EX(Var("SYSm",FTy 5),LN 2,LN 0,FTy 3),LW(7,3)),
5724                  Mop(Snd,
5725                      Apply
5726                        (Call
5727                           ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5728                            Call
5729                              ("UNPREDICTABLE",CTy"exception",
5730                               LS"BankedRegisterAccessValid")),qVar"state"))),
5731                 (EQ(EX(Var("SYSm",FTy 5),LN 2,LN 0,FTy 3),LW(6,3)),
5732                  ITE(Bop(In,Var("mode",FTy 5),SL[LW(26,5),LW(31,5)]),
5733                      Mop(Snd,
5734                          Apply
5735                            (Call
5736                               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5737                                Call
5738                                  ("UNPREDICTABLE",CTy"exception",
5739                                   LS"BankedRegisterAccessValid")),
5740                             qVar"state")),qVar"state")),
5741                 (EQ(EX(Var("SYSm",FTy 5),LN 2,LN 0,FTy 3),LW(5,3)),
5742                  ITE(EQ(Var("mode",FTy 5),LW(31,5)),
5743                      Mop(Snd,
5744                          Apply
5745                            (Call
5746                               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5747                                Call
5748                                  ("UNPREDICTABLE",CTy"exception",
5749                                   LS"BankedRegisterAccessValid")),
5750                             qVar"state")),qVar"state")),
5751                 (Mop(Not,EQ(Var("mode",FTy 5),LW(17,5))),
5752                  Mop(Snd,
5753                      Apply
5754                        (Call
5755                           ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5756                            Call
5757                              ("UNPREDICTABLE",CTy"exception",
5758                               LS"BankedRegisterAccessValid")),qVar"state")))],
5759                qVar"state")),
5760           (EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2),LW(1,2)),
5761            ITE(Bop(Or,EQ(EX(Var("SYSm",FTy 5),LN 2,LN 0,FTy 3),LW(7,3)),
5762                    Bop(Or,EQ(Var("mode",FTy 5),LW(17,5)),
5763                        Bop(And,
5764                            Dest
5765                              ("RFR",bTy,
5766                               Dest
5767                                 ("NSACR",CTy"NSACR",
5768                                  Dest("CP15",CTy"CP15",qVar"state"))),
5769                            Mop(Not,
5770                                Apply
5771                                  (Call("IsSecure",ATy(qTy,bTy),LU),
5772                                   qVar"state"))))),
5773                Mop(Snd,
5774                    Apply
5775                      (Call
5776                         ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5777                          Call
5778                            ("UNPREDICTABLE",CTy"exception",
5779                             LS"BankedRegisterAccessValid")),qVar"state")),
5780                qVar"state")),
5781           (EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2),LW(3,2)),
5782            ITB([(Mop(Not,Bop(Bit,Var("SYSm",FTy 5),LN 2)),
5783                  Mop(Snd,
5784                      Apply
5785                        (Call
5786                           ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5787                            Call
5788                              ("UNPREDICTABLE",CTy"exception",
5789                               LS"BankedRegisterAccessValid")),qVar"state"))),
5790                 (Mop(Not,Bop(Bit,Var("SYSm",FTy 5),LN 1)),
5791                  ITE(Bop(Or,
5792                          Mop(Not,
5793                              Apply
5794                                (Call("IsSecure",ATy(qTy,bTy),LU),
5795                                 qVar"state")),
5796                          EQ(Var("mode",FTy 5),LW(22,5))),
5797                      Mop(Snd,
5798                          Apply
5799                            (Call
5800                               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5801                                Call
5802                                  ("UNPREDICTABLE",CTy"exception",
5803                                   LS"BankedRegisterAccessValid")),
5804                             qVar"state")),qVar"state")),
5805                 (Mop(Not,EQ(Var("mode",FTy 5),LW(22,5))),
5806                  Mop(Snd,
5807                      Apply
5808                        (Call
5809                           ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5810                            Call
5811                              ("UNPREDICTABLE",CTy"exception",
5812                               LS"BankedRegisterAccessValid")),qVar"state")))],
5813                qVar"state"))],qVar"state")))
5814;
5815val SPSRAccessValid_def = Def
5816  ("SPSRAccessValid",TP[Var("SYSm",FTy 5),Var("mode",FTy 5)],
5817   Close
5818     (qVar"state",
5819      CS(Var("SYSm",FTy 5),
5820         [(LW(14,5),
5821           ITE(Bop(Or,
5822                   Bop(And,
5823                       Mop(Not,
5824                           Apply
5825                             (Call("IsSecure",ATy(qTy,bTy),LU),qVar"state")),
5826                       Dest
5827                         ("RFR",bTy,
5828                          Dest
5829                            ("NSACR",CTy"NSACR",
5830                             Dest("CP15",CTy"CP15",qVar"state")))),
5831                   EQ(Var("mode",FTy 5),LW(17,5))),
5832               Mop(Snd,
5833                   Apply
5834                     (Call
5835                        ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5836                         Call
5837                           ("UNPREDICTABLE",CTy"exception",
5838                            LS"SPSRAccessValid")),qVar"state")),
5839               qVar"state")),
5840          (LW(16,5),
5841           ITE(EQ(Var("mode",FTy 5),LW(18,5)),
5842               Mop(Snd,
5843                   Apply
5844                     (Call
5845                        ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5846                         Call
5847                           ("UNPREDICTABLE",CTy"exception",
5848                            LS"SPSRAccessValid")),qVar"state")),
5849               qVar"state")),
5850          (LW(18,5),
5851           ITE(EQ(Var("mode",FTy 5),LW(19,5)),
5852               Mop(Snd,
5853                   Apply
5854                     (Call
5855                        ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5856                         Call
5857                           ("UNPREDICTABLE",CTy"exception",
5858                            LS"SPSRAccessValid")),qVar"state")),
5859               qVar"state")),
5860          (LW(20,5),
5861           ITE(EQ(Var("mode",FTy 5),LW(23,5)),
5862               Mop(Snd,
5863                   Apply
5864                     (Call
5865                        ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5866                         Call
5867                           ("UNPREDICTABLE",CTy"exception",
5868                            LS"SPSRAccessValid")),qVar"state")),
5869               qVar"state")),
5870          (LW(22,5),
5871           ITE(EQ(Var("mode",FTy 5),LW(27,5)),
5872               Mop(Snd,
5873                   Apply
5874                     (Call
5875                        ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5876                         Call
5877                           ("UNPREDICTABLE",CTy"exception",
5878                            LS"SPSRAccessValid")),qVar"state")),
5879               qVar"state")),
5880          (LW(28,5),
5881           ITE(Bop(Or,EQ(Var("mode",FTy 5),LW(22,5)),
5882                   Mop(Not,
5883                       Apply(Call("IsSecure",ATy(qTy,bTy),LU),qVar"state"))),
5884               Mop(Snd,
5885                   Apply
5886                     (Call
5887                        ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5888                         Call
5889                           ("UNPREDICTABLE",CTy"exception",
5890                            LS"SPSRAccessValid")),qVar"state")),
5891               qVar"state")),
5892          (LW(30,5),
5893           ITE(Mop(Not,EQ(Var("mode",FTy 5),LW(22,5))),
5894               Mop(Snd,
5895                   Apply
5896                     (Call
5897                        ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5898                         Call
5899                           ("UNPREDICTABLE",CTy"exception",
5900                            LS"SPSRAccessValid")),qVar"state")),
5901               qVar"state")),
5902          (AVar(FTy 5),
5903           Mop(Snd,
5904               Apply
5905                 (Call
5906                    ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
5907                     Call
5908                       ("UNPREDICTABLE",CTy"exception",LS"SPSRAccessValid")),
5909                  qVar"state")))])))
5910;
5911val rec'FPSCR_def = Def
5912  ("rec'FPSCR",Var("x",F32),
5913   Rec(CTy"FPSCR",
5914       [Bop(Bit,Var("x",F32),LN 26),Bop(Bit,Var("x",F32),LN 29),
5915        Bop(Bit,Var("x",F32),LN 25),Bop(Bit,Var("x",F32),LN 1),
5916        Bop(Bit,Var("x",F32),LN 9),Bop(Bit,Var("x",F32),LN 24),
5917        Bop(Bit,Var("x",F32),LN 7),Bop(Bit,Var("x",F32),LN 15),
5918        Bop(Bit,Var("x",F32),LN 0),Bop(Bit,Var("x",F32),LN 8),
5919        Bop(Bit,Var("x",F32),LN 4),Bop(Bit,Var("x",F32),LN 12),
5920        Bop(Bit,Var("x",F32),LN 31),Bop(Bit,Var("x",F32),LN 2),
5921        Bop(Bit,Var("x",F32),LN 10),Bop(Bit,Var("x",F32),LN 27),
5922        EX(Var("x",F32),LN 23,LN 22,FTy 2),Bop(Bit,Var("x",F32),LN 3),
5923        Bop(Bit,Var("x",F32),LN 11),Bop(Bit,Var("x",F32),LN 28),
5924        Bop(Bit,Var("x",F32),LN 30),
5925        CC[EX(Var("x",F32),LN 6,LN 5,FTy 2),
5926           EX(Var("x",F32),LN 14,LN 13,FTy 2),
5927           EX(Var("x",F32),LN 21,LN 16,FTy 6)]]))
5928;
5929val reg'FPSCR_def = Def
5930  ("reg'FPSCR",Var("x",CTy"FPSCR"),
5931   CS(Var("x",CTy"FPSCR"),
5932      [(Rec(CTy"FPSCR",
5933            [bVar"AHP",bVar"C",bVar"DN",bVar"DZC",bVar"DZE",bVar"FZ",
5934             bVar"IDC",bVar"IDE",bVar"IOC",bVar"IOE",bVar"IXC",bVar"IXE",
5935             bVar"N",bVar"OFC",bVar"OFE",bVar"QC",Var("RMode",FTy 2),
5936             bVar"UFC",bVar"UFE",bVar"V",bVar"Z",Var("fpscr'rst",FTy 10)]),
5937        CC[Mop(Cast F1,bVar"N"),Mop(Cast F1,bVar"Z"),Mop(Cast F1,bVar"C"),
5938           Mop(Cast F1,bVar"V"),Mop(Cast F1,bVar"QC"),
5939           Mop(Cast F1,bVar"AHP"),Mop(Cast F1,bVar"DN"),
5940           Mop(Cast F1,bVar"FZ"),Var("RMode",FTy 2),
5941           EX(Var("fpscr'rst",FTy 10),LN 5,LN 0,FTy 6),
5942           Mop(Cast F1,bVar"IDE"),
5943           EX(Var("fpscr'rst",FTy 10),LN 7,LN 6,FTy 2),
5944           Mop(Cast F1,bVar"IXE"),Mop(Cast F1,bVar"UFE"),
5945           Mop(Cast F1,bVar"OFE"),Mop(Cast F1,bVar"DZE"),
5946           Mop(Cast F1,bVar"IOE"),Mop(Cast F1,bVar"IDC"),
5947           EX(Var("fpscr'rst",FTy 10),LN 9,LN 8,FTy 2),
5948           Mop(Cast F1,bVar"IXC"),Mop(Cast F1,bVar"UFC"),
5949           Mop(Cast F1,bVar"OFC"),Mop(Cast F1,bVar"DZC"),
5950           Mop(Cast F1,bVar"IOC")])]))
5951;
5952val write'rec'FPSCR_def = Def
5953  ("write'rec'FPSCR",TP[AVar F32,Var("x",CTy"FPSCR")],
5954   Call("reg'FPSCR",F32,Var("x",CTy"FPSCR")))
5955;
5956val write'reg'FPSCR_def = Def
5957  ("write'reg'FPSCR",TP[AVar(CTy"FPSCR"),Var("x",F32)],
5958   Call("rec'FPSCR",CTy"FPSCR",Var("x",F32)))
5959;
5960val RoundingMode_def = Def
5961  ("RoundingMode",qVar"state",
5962   CS(Dest
5963        ("RMode",FTy 2,
5964         Dest("FPSCR",CTy"FPSCR",Dest("FP",CTy"FP",qVar"state"))),
5965      [(LW(0,2),binary_ieeeSyntax.roundTiesToEven_tm),
5966       (LW(1,2),binary_ieeeSyntax.roundTowardPositive_tm),
5967       (LW(2,2),binary_ieeeSyntax.roundTowardNegative_tm),
5968       (LW(3,2),binary_ieeeSyntax.roundTowardZero_tm)]))
5969;
5970val FPAdd32_def = Def
5971  ("FPAdd32",TP[Var("op1",F32),Var("op2",F32)],
5972   Close
5973     (qVar"state",
5974      Mop(FPAdd 32,
5975          TP[Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state"),
5976             Var("op1",F32),Var("op2",F32)])))
5977;
5978val FPSub32_def = Def
5979  ("FPSub32",TP[Var("op1",F32),Var("op2",F32)],
5980   Close
5981     (qVar"state",
5982      Mop(FPSub 32,
5983          TP[Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state"),
5984             Var("op1",F32),Var("op2",F32)])))
5985;
5986val FPMul32_def = Def
5987  ("FPMul32",TP[Var("op1",F32),Var("op2",F32)],
5988   Close
5989     (qVar"state",
5990      Mop(FPMul 32,
5991          TP[Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state"),
5992             Var("op1",F32),Var("op2",F32)])))
5993;
5994val FPAdd64_def = Def
5995  ("FPAdd64",TP[Var("op1",F64),Var("op2",F64)],
5996   Close
5997     (qVar"state",
5998      Mop(FPAdd 64,
5999          TP[Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state"),
6000             Var("op1",F64),Var("op2",F64)])))
6001;
6002val FPSub64_def = Def
6003  ("FPSub64",TP[Var("op1",F64),Var("op2",F64)],
6004   Close
6005     (qVar"state",
6006      Mop(FPSub 64,
6007          TP[Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state"),
6008             Var("op1",F64),Var("op2",F64)])))
6009;
6010val FPMul64_def = Def
6011  ("FPMul64",TP[Var("op1",F64),Var("op2",F64)],
6012   Close
6013     (qVar"state",
6014      Mop(FPMul 64,
6015          TP[Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state"),
6016             Var("op1",F64),Var("op2",F64)])))
6017;
6018val FPToFixed32_def = Def
6019  ("FPToFixed32",
6020   TP[Var("operand",F32),bVar"unsigned",bVar"round_towards_zero"],
6021   Close
6022     (qVar"state",
6023      CS(Mop(FPToInt 32,
6024             TP[ITE(bVar"round_towards_zero",
6025                    binary_ieeeSyntax.roundTowardZero_tm,
6026                    Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state")),
6027                Var("operand",F32)]),
6028         [(Mop(Some,iVar"i"),
6029           Let(TP[Var("v",PTy(F32,bTy)),qVar"s"],
6030               Apply
6031                 (Call
6032                    ("SatQ",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
6033                     TP[iVar"i",LN 32,bVar"unsigned"]),qVar"state"),
6034               Let(TP[Var("result",F32),bVar"overflow"],
6035                   Var("v",PTy(F32,bTy)),
6036                   ITE(bVar"overflow",
6037                       Apply
6038                         (Call
6039                            ("raise'exception",ATy(qTy,PTy(F32,qTy)),
6040                             Call
6041                               ("VFP_EXCEPTION",CTy"exception",
6042                                LS"FPToFixed32: overflow exception")),
6043                          qVar"s"),TP[Var("result",F32),qVar"s"])))),
6044          (LO iTy,
6045           Apply
6046             (Call
6047                ("raise'exception",ATy(qTy,PTy(F32,qTy)),
6048                 Call
6049                   ("VFP_EXCEPTION",CTy"exception",
6050                    LS"FPToFixed32: NaN or infinity")),qVar"state"))])))
6051;
6052val FPToFixed64_def = Def
6053  ("FPToFixed64",
6054   TP[Var("operand",F64),bVar"unsigned",bVar"round_towards_zero"],
6055   Close
6056     (qVar"state",
6057      CS(Mop(FPToInt 64,
6058             TP[ITE(bVar"round_towards_zero",
6059                    binary_ieeeSyntax.roundTowardZero_tm,
6060                    Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state")),
6061                Var("operand",F64)]),
6062         [(Mop(Some,iVar"i"),
6063           Let(TP[Var("v",PTy(F32,bTy)),qVar"s"],
6064               Apply
6065                 (Call
6066                    ("SatQ",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
6067                     TP[iVar"i",LN 32,bVar"unsigned"]),qVar"state"),
6068               Let(TP[Var("result",F32),bVar"overflow"],
6069                   Var("v",PTy(F32,bTy)),
6070                   ITE(bVar"overflow",
6071                       Apply
6072                         (Call
6073                            ("raise'exception",ATy(qTy,PTy(F32,qTy)),
6074                             Call
6075                               ("VFP_EXCEPTION",CTy"exception",
6076                                LS"FPToFixed64: overflow exception")),
6077                          qVar"s"),TP[Var("result",F32),qVar"s"])))),
6078          (LO iTy,
6079           Apply
6080             (Call
6081                ("raise'exception",ATy(qTy,PTy(F32,qTy)),
6082                 Call
6083                   ("VFP_EXCEPTION",CTy"exception",
6084                    LS"FPToFixed64: NaN or infinity")),qVar"state"))])))
6085;
6086val FixedToFP32_def = Def
6087  ("FixedToFP32",
6088   TP[Var("operand",F32),bVar"unsigned",bVar"round_to_nearest"],
6089   Close
6090     (qVar"state",
6091      Mop(FPFromInt 32,
6092          TP[ITE(bVar"round_to_nearest",
6093                 binary_ieeeSyntax.roundTiesToEven_tm,
6094                 Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state")),
6095             ITE(bVar"unsigned",
6096                 Mop(Cast iTy,Mop(Cast nTy,Var("operand",F32))),
6097                 Mop(Cast iTy,Var("operand",F32)))])))
6098;
6099val FixedToFP64_def = Def
6100  ("FixedToFP64",
6101   TP[Var("operand",F32),bVar"unsigned",bVar"round_to_nearest"],
6102   Close
6103     (qVar"state",
6104      Mop(FPFromInt 64,
6105          TP[ITE(bVar"round_to_nearest",
6106                 binary_ieeeSyntax.roundTiesToEven_tm,
6107                 Apply(Const("RoundingMode",ATy(qTy,rTy)),qVar"state")),
6108             ITE(bVar"unsigned",
6109                 Mop(Cast iTy,Mop(Cast nTy,Var("operand",F32))),
6110                 Mop(Cast iTy,Var("operand",F32)))])))
6111;
6112val D_def = Def
6113  ("D",Var("n",FTy 5),
6114   Close
6115     (qVar"state",
6116      Apply
6117        (Dest("REG",ATy(FTy 5,F64),Dest("FP",CTy"FP",qVar"state")),
6118         Var("n",FTy 5))))
6119;
6120val write'D_def = Def
6121  ("write'D",TP[Var("value",F64),Var("n",FTy 5)],
6122   Close
6123     (qVar"state",
6124      Rupd
6125        ("FP",
6126         TP[qVar"state",
6127            Rupd
6128              ("REG",
6129               TP[Dest("FP",CTy"FP",qVar"state"),
6130                  Fupd
6131                    (Dest
6132                       ("REG",ATy(FTy 5,F64),
6133                        Dest("FP",CTy"FP",qVar"state")),Var("n",FTy 5),
6134                     Var("value",F64))])])))
6135;
6136val S_def = Def
6137  ("S",Var("n",FTy 5),
6138   Close
6139     (qVar"state",
6140      ITE(Bop(Bit,Var("n",FTy 5),LN 0),
6141          EX(Apply
6142               (Call("D",ATy(qTy,F64),Bop(Div,Var("n",FTy 5),LW(2,5))),
6143                qVar"state"),LN 63,LN 32,F32),
6144          EX(Apply
6145               (Call("D",ATy(qTy,F64),Bop(Div,Var("n",FTy 5),LW(2,5))),
6146                qVar"state"),LN 31,LN 0,F32))))
6147;
6148val write'S_def = Def
6149  ("write'S",TP[Var("value",F32),Var("n",FTy 5)],
6150   Close
6151     (qVar"state",
6152      ITE(Bop(Bit,Var("n",FTy 5),LN 0),
6153          Let(Var("x",FTy 5),Bop(Div,Var("n",FTy 5),LW(2,5)),
6154              Apply
6155                (Call
6156                   ("write'D",ATy(qTy,qTy),
6157                    TP[BFI(LN 63,LN 32,Var("value",F32),
6158                           Apply
6159                             (Call("D",ATy(qTy,F64),Var("x",FTy 5)),
6160                              qVar"state")),Var("x",FTy 5)]),qVar"state")),
6161          Let(Var("x",FTy 5),Bop(Div,Var("n",FTy 5),LW(2,5)),
6162              Apply
6163                (Call
6164                   ("write'D",ATy(qTy,qTy),
6165                    TP[BFI(LN 31,LN 0,Var("value",F32),
6166                           Apply
6167                             (Call("D",ATy(qTy,F64),Var("x",FTy 5)),
6168                              qVar"state")),Var("x",FTy 5)]),qVar"state")))))
6169;
6170val VFPExpandImm_def = Def
6171  ("VFPExpandImm",TP[Var("imm8",F8),bVar"single"],
6172   ITE(bVar"single",
6173       Mop(Cast F64,
6174           CC[EX(Var("imm8",F8),LN 7,LN 7,F1),
6175              Mop(BNot,EX(Var("imm8",F8),LN 6,LN 6,F1)),
6176              REP(EX(Var("imm8",F8),LN 6,LN 6,F1),LN 5,FTy 5),
6177              EX(Var("imm8",F8),LN 5,LN 0,FTy 6),REP(LW(0,1),LN 19,FTy 19)]),
6178       CC[EX(Var("imm8",F8),LN 7,LN 7,F1),
6179          Mop(BNot,EX(Var("imm8",F8),LN 6,LN 6,F1)),
6180          REP(EX(Var("imm8",F8),LN 6,LN 6,F1),LN 8,F8),
6181          EX(Var("imm8",F8),LN 5,LN 0,FTy 6),REP(LW(0,1),LN 48,FTy 48)]))
6182;
6183val FPCompare32_def = Def
6184  ("FPCompare32",TP[Var("op1",F32),Var("op2",F32)],
6185   ITB([(Bop(Or,Mop(FPIsNan 32,Var("op1",F32)),
6186             Mop(FPIsNan 32,Var("op2",F32))),LW(3,4)),
6187        (Mop(FPEq 32,TP[Var("op1",F32),Var("op2",F32)]),LW(6,4)),
6188        (Mop(FPLt 32,TP[Var("op1",F32),Var("op2",F32)]),LW(8,4))],LW(2,4)))
6189;
6190val FPCompare64_def = Def
6191  ("FPCompare64",TP[Var("op1",F64),Var("op2",F64)],
6192   ITB([(Bop(Or,Mop(FPIsNan 64,Var("op1",F64)),
6193             Mop(FPIsNan 64,Var("op2",F64))),LW(3,4)),
6194        (Mop(FPEq 64,TP[Var("op1",F64),Var("op2",F64)]),LW(6,4)),
6195        (Mop(FPLt 64,TP[Var("op1",F64),Var("op2",F64)]),LW(8,4))],LW(2,4)))
6196;
6197val FPZero32_def = Def
6198  ("FPZero32",Var("sign",F1),CC[Var("sign",F1),LW(0,31)])
6199;
6200val FPZero64_def = Def
6201  ("FPZero64",Var("sign",F1),CC[Var("sign",F1),LW(0,63)])
6202;
6203val dfn'vmov_imm_def = Def
6204  ("dfn'vmov_imm",
6205   TP[bVar"single_register",Var("d",FTy 5),Var("imm64",F64)],
6206   Close
6207     (qVar"state",
6208      Apply
6209        (Call("IncPC",ATy(qTy,qTy),LU),
6210         ITE(bVar"single_register",
6211             Apply
6212               (Call
6213                  ("write'S",ATy(qTy,qTy),
6214                   TP[EX(Var("imm64",F64),LN 31,LN 0,F32),Var("d",FTy 5)]),
6215                qVar"state"),
6216             Apply
6217               (Call
6218                  ("write'D",ATy(qTy,qTy),
6219                   TP[Var("imm64",F64),Var("d",FTy 5)]),qVar"state")))))
6220;
6221val dfn'vmov_def = Def
6222  ("dfn'vmov",TP[bVar"single_register",Var("d",FTy 5),Var("m",FTy 5)],
6223   Close
6224     (qVar"state",
6225      Apply
6226        (Call("IncPC",ATy(qTy,qTy),LU),
6227         ITE(bVar"single_register",
6228             Apply
6229               (Call
6230                  ("write'S",ATy(qTy,qTy),
6231                   TP[Apply
6232                        (Call("S",ATy(qTy,F32),Var("m",FTy 5)),qVar"state"),
6233                      Var("d",FTy 5)]),qVar"state"),
6234             Apply
6235               (Call
6236                  ("write'D",ATy(qTy,qTy),
6237                   TP[Apply
6238                        (Call("D",ATy(qTy,F64),Var("m",FTy 5)),qVar"state"),
6239                      Var("d",FTy 5)]),qVar"state")))))
6240;
6241val dfn'vmov_single_def = Def
6242  ("dfn'vmov_single",TP[bVar"to_arm_register",Var("t",F4),Var("n",FTy 5)],
6243   Close
6244     (qVar"state",
6245      Apply
6246        (Call("IncPC",ATy(qTy,qTy),LU),
6247         ITE(bVar"to_arm_register",
6248             Apply
6249               (Call
6250                  ("write'R",ATy(qTy,qTy),
6251                   TP[Apply
6252                        (Call("S",ATy(qTy,F32),Var("n",FTy 5)),qVar"state"),
6253                      Var("t",F4)]),qVar"state"),
6254             Let(TP[Var("v",F32),qVar"s"],
6255                 Apply
6256                   (Call("R",ATy(qTy,PTy(F32,qTy)),Var("t",F4)),
6257                    qVar"state"),
6258                 Apply
6259                   (Call
6260                      ("write'S",ATy(qTy,qTy),
6261                       TP[Var("v",F32),Var("n",FTy 5)]),qVar"s"))))))
6262;
6263val dfn'vmov_two_singles_def = Def
6264  ("dfn'vmov_two_singles",
6265   TP[bVar"to_arm_registers",Var("t",F4),Var("t2",F4),Var("m",FTy 5)],
6266   Close
6267     (qVar"state",
6268      Apply
6269        (Call("IncPC",ATy(qTy,qTy),LU),
6270         ITE(bVar"to_arm_registers",
6271             Let(TP[Var("v",F32),qVar"s"],
6272                 Let(qVar"s0",
6273                     Apply
6274                       (Call
6275                          ("write'R",ATy(qTy,qTy),
6276                           TP[Apply
6277                                (Call("S",ATy(qTy,F32),Var("m",FTy 5)),
6278                                 qVar"state"),Var("t",F4)]),qVar"state"),
6279                     TP[Apply
6280                          (Call
6281                             ("S",ATy(qTy,F32),
6282                              Bop(Add,Var("m",FTy 5),LW(1,5))),qVar"s0"),
6283                        qVar"s0"]),
6284                 Apply
6285                   (Call
6286                      ("write'R",ATy(qTy,qTy),
6287                       TP[Var("v",F32),Var("t2",F4)]),qVar"s")),
6288             Let(TP[Var("v",F32),qVar"s"],
6289                 Apply
6290                   (Call("R",ATy(qTy,PTy(F32,qTy)),Var("t",F4)),
6291                    qVar"state"),
6292                 Let(TP[Var("v",F32),qVar"s"],
6293                     Apply
6294                       (Call("R",ATy(qTy,PTy(F32,qTy)),Var("t2",F4)),
6295                        Apply
6296                          (Call
6297                             ("write'S",ATy(qTy,qTy),
6298                              TP[Var("v",F32),Var("m",FTy 5)]),qVar"s")),
6299                     Apply
6300                       (Call
6301                          ("write'S",ATy(qTy,qTy),
6302                           TP[Var("v",F32),Bop(Add,Var("m",FTy 5),LW(1,5))]),
6303                        qVar"s")))))))
6304;
6305val dfn'vmov_double_def = Def
6306  ("dfn'vmov_double",
6307   TP[bVar"to_arm_registers",Var("t",F4),Var("t2",F4),Var("m",FTy 5)],
6308   Close
6309     (qVar"state",
6310      Apply
6311        (Call("IncPC",ATy(qTy,qTy),LU),
6312         ITE(bVar"to_arm_registers",
6313             Let(TP[Var("v",F64),qVar"s"],
6314                 Let(qVar"s0",
6315                     Apply
6316                       (Call
6317                          ("write'R",ATy(qTy,qTy),
6318                           TP[EX(Apply
6319                                   (Call("D",ATy(qTy,F64),Var("m",FTy 5)),
6320                                    qVar"state"),LN 31,LN 0,F32),
6321                              Var("t",F4)]),qVar"state"),
6322                     TP[Apply
6323                          (Call("D",ATy(qTy,F64),Var("m",FTy 5)),qVar"s0"),
6324                        qVar"s0"]),
6325                 Apply
6326                   (Call
6327                      ("write'R",ATy(qTy,qTy),
6328                       TP[EX(Var("v",F64),LN 63,LN 32,F32),Var("t2",F4)]),
6329                    qVar"s")),
6330             Let(TP[Var("v",F64),qVar"s"],
6331                 Let(qVar"s0",
6332                     Let(TP[Var("v0",F32),qVar"s"],
6333                         Apply
6334                           (Call("R",ATy(qTy,PTy(F32,qTy)),Var("t",F4)),
6335                            qVar"state"),
6336                         Apply
6337                           (Call
6338                              ("write'D",ATy(qTy,qTy),
6339                               TP[BFI(LN 31,LN 0,Var("v0",F32),
6340                                      Apply
6341                                        (Call
6342                                           ("D",ATy(qTy,F64),
6343                                            Var("m",FTy 5)),qVar"state")),
6344                                  Var("m",FTy 5)]),qVar"s")),
6345                     TP[Apply
6346                          (Call("D",ATy(qTy,F64),Var("m",FTy 5)),qVar"s0"),
6347                        qVar"s0"]),
6348                 Let(TP[Var("v0",F32),qVar"s"],
6349                     Apply
6350                       (Call("R",ATy(qTy,PTy(F32,qTy)),Var("t2",F4)),
6351                        qVar"s"),
6352                     Apply
6353                       (Call
6354                          ("write'D",ATy(qTy,qTy),
6355                           TP[BFI(LN 63,LN 32,Var("v0",F32),Var("v",F64)),
6356                              Var("m",FTy 5)]),qVar"s")))))))
6357;
6358val dfn'vabs_def = Def
6359  ("dfn'vabs",TP[bVar"dp_operation",Var("d",FTy 5),Var("m",FTy 5)],
6360   Close
6361     (qVar"state",
6362      Apply
6363        (Call("IncPC",ATy(qTy,qTy),LU),
6364         ITE(bVar"dp_operation",
6365             Apply
6366               (Call
6367                  ("write'D",ATy(qTy,qTy),
6368                   TP[Mop(FPAbs 64,
6369                          Apply
6370                            (Call("D",ATy(qTy,F64),Var("m",FTy 5)),
6371                             qVar"state")),Var("d",FTy 5)]),qVar"state"),
6372             Apply
6373               (Call
6374                  ("write'S",ATy(qTy,qTy),
6375                   TP[Mop(FPAbs 32,
6376                          Apply
6377                            (Call("S",ATy(qTy,F32),Var("m",FTy 5)),
6378                             qVar"state")),Var("d",FTy 5)]),qVar"state")))))
6379;
6380val dfn'vneg_def = Def
6381  ("dfn'vneg",TP[bVar"dp_operation",Var("d",FTy 5),Var("m",FTy 5)],
6382   Close
6383     (qVar"state",
6384      Apply
6385        (Call("IncPC",ATy(qTy,qTy),LU),
6386         ITE(bVar"dp_operation",
6387             Apply
6388               (Call
6389                  ("write'D",ATy(qTy,qTy),
6390                   TP[Mop(FPNeg 64,
6391                          Apply
6392                            (Call("D",ATy(qTy,F64),Var("m",FTy 5)),
6393                             qVar"state")),Var("d",FTy 5)]),qVar"state"),
6394             Apply
6395               (Call
6396                  ("write'S",ATy(qTy,qTy),
6397                   TP[Mop(FPNeg 32,
6398                          Apply
6399                            (Call("S",ATy(qTy,F32),Var("m",FTy 5)),
6400                             qVar"state")),Var("d",FTy 5)]),qVar"state")))))
6401;
6402val dfn'vsqrt_def = Def
6403  ("dfn'vsqrt",TP[bVar"dp_operation",Var("d",FTy 5),Var("m",FTy 5)],
6404   Close
6405     (qVar"state",
6406      Apply
6407        (Call("IncPC",ATy(qTy,qTy),LU),
6408         ITE(bVar"dp_operation",
6409             Apply
6410               (Call
6411                  ("write'D",ATy(qTy,qTy),
6412                   TP[Mop(FPSqrt 64,
6413                          TP[Apply
6414                               (Const("RoundingMode",ATy(qTy,rTy)),
6415                                qVar"state"),
6416                             Apply
6417                               (Call("D",ATy(qTy,F64),Var("m",FTy 5)),
6418                                qVar"state")]),Var("d",FTy 5)]),
6419                qVar"state"),
6420             Apply
6421               (Call
6422                  ("write'S",ATy(qTy,qTy),
6423                   TP[Mop(FPSqrt 32,
6424                          TP[Apply
6425                               (Const("RoundingMode",ATy(qTy,rTy)),
6426                                qVar"state"),
6427                             Apply
6428                               (Call("S",ATy(qTy,F32),Var("m",FTy 5)),
6429                                qVar"state")]),Var("d",FTy 5)]),
6430                qVar"state")))))
6431;
6432val dfn'vcvt_float_def = Def
6433  ("dfn'vcvt_float",
6434   TP[bVar"double_to_single",Var("d",FTy 5),Var("m",FTy 5)],
6435   Close
6436     (qVar"state",
6437      Apply
6438        (Call("IncPC",ATy(qTy,qTy),LU),
6439         ITE(bVar"double_to_single",
6440             Apply
6441               (Call
6442                  ("write'S",ATy(qTy,qTy),
6443                   TP[Mop(FP64To32,
6444                          TP[Apply
6445                               (Const("RoundingMode",ATy(qTy,rTy)),
6446                                qVar"state"),
6447                             Apply
6448                               (Call("D",ATy(qTy,F64),Var("m",FTy 5)),
6449                                qVar"state")]),Var("d",FTy 5)]),
6450                qVar"state"),
6451             Apply
6452               (Call
6453                  ("write'D",ATy(qTy,qTy),
6454                   TP[Mop(FP32To64,
6455                          Apply
6456                            (Call("S",ATy(qTy,F32),Var("m",FTy 5)),
6457                             qVar"state")),Var("d",FTy 5)]),qVar"state")))))
6458;
6459val dfn'vcvt_to_integer_def = Def
6460  ("dfn'vcvt_to_integer",
6461   TP[bVar"dp_operation",bVar"unsigned",bVar"round_zero",Var("d",FTy 5),
6462      Var("m",FTy 5)],
6463   Close
6464     (qVar"state",
6465      Apply
6466        (Call("IncPC",ATy(qTy,qTy),LU),
6467         ITE(bVar"dp_operation",
6468             Let(TP[Var("v",PTy(F32,FTy 5)),qVar"s"],
6469                 Let(TP[Var("v",F32),qVar"s"],
6470                     Apply
6471                       (Call
6472                          ("FPToFixed64",ATy(qTy,PTy(F32,qTy)),
6473                           TP[Apply
6474                                (Call("D",ATy(qTy,F64),Var("m",FTy 5)),
6475                                 qVar"state"),bVar"unsigned",
6476                              bVar"round_zero"]),qVar"state"),
6477                     TP[TP[Var("v",F32),Var("d",FTy 5)],qVar"s"]),
6478                 Apply
6479                   (Call("write'S",ATy(qTy,qTy),Var("v",PTy(F32,FTy 5))),
6480                    qVar"s")),
6481             Let(TP[Var("v",PTy(F32,FTy 5)),qVar"s"],
6482                 Let(TP[Var("v",F32),qVar"s"],
6483                     Apply
6484                       (Call
6485                          ("FPToFixed32",ATy(qTy,PTy(F32,qTy)),
6486                           TP[Apply
6487                                (Call("S",ATy(qTy,F32),Var("m",FTy 5)),
6488                                 qVar"state"),bVar"unsigned",
6489                              bVar"round_zero"]),qVar"state"),
6490                     TP[TP[Var("v",F32),Var("d",FTy 5)],qVar"s"]),
6491                 Apply
6492                   (Call("write'S",ATy(qTy,qTy),Var("v",PTy(F32,FTy 5))),
6493                    qVar"s"))))))
6494;
6495val dfn'vcvt_from_integer_def = Def
6496  ("dfn'vcvt_from_integer",
6497   TP[bVar"dp_operation",bVar"unsigned",Var("d",FTy 5),Var("m",FTy 5)],
6498   Close
6499     (qVar"state",
6500      Apply
6501        (Call("IncPC",ATy(qTy,qTy),LU),
6502         ITE(bVar"dp_operation",
6503             Apply
6504               (Call
6505                  ("write'D",ATy(qTy,qTy),
6506                   TP[Apply
6507                        (Call
6508                           ("FixedToFP64",ATy(qTy,F64),
6509                            TP[Apply
6510                                 (Call("S",ATy(qTy,F32),Var("m",FTy 5)),
6511                                  qVar"state"),bVar"unsigned",LF]),
6512                         qVar"state"),Var("d",FTy 5)]),qVar"state"),
6513             Apply
6514               (Call
6515                  ("write'S",ATy(qTy,qTy),
6516                   TP[Apply
6517                        (Call
6518                           ("FixedToFP32",ATy(qTy,F32),
6519                            TP[Apply
6520                                 (Call("S",ATy(qTy,F32),Var("m",FTy 5)),
6521                                  qVar"state"),bVar"unsigned",LF]),
6522                         qVar"state"),Var("d",FTy 5)]),qVar"state")))))
6523;
6524val dfn'vcmp_def = Def
6525  ("dfn'vcmp",
6526   TP[bVar"dp_operation",Var("d",FTy 5),Var("m_with_zero",OTy(FTy 5))],
6527   Close
6528     (qVar"state",
6529      Apply
6530        (Call("IncPC",ATy(qTy,qTy),LU),
6531         ITE(bVar"dp_operation",
6532             Let(TP[Var("v",F64),qVar"s"],
6533                 CS(Var("m_with_zero",OTy(FTy 5)),
6534                    [(Mop(Some,Var("m",FTy 5)),
6535                      TP[Apply
6536                           (Call("D",ATy(qTy,F64),Var("m",FTy 5)),
6537                            qVar"state"),qVar"state"]),
6538                     (LO(FTy 5),
6539                      TP[Call("FPZero64",F64,LW(0,1)),qVar"state"])]),
6540                 Let(Var("v0",CTy"FPSCR"),
6541                     Dest("FPSCR",CTy"FPSCR",Dest("FP",CTy"FP",qVar"s")),
6542                     Rupd
6543                       ("FP",
6544                        TP[qVar"s",
6545                           Rupd
6546                             ("FPSCR",
6547                              TP[Dest("FP",CTy"FP",qVar"s"),
6548                                 Call
6549                                   ("write'reg'FPSCR",CTy"FPSCR",
6550                                    TP[Var("v0",CTy"FPSCR"),
6551                                       BFI(LN 31,LN 28,
6552                                           Call
6553                                             ("FPCompare64",F4,
6554                                              TP[Apply
6555                                                   (Call
6556                                                      ("D",ATy(qTy,F64),
6557                                                       Var("d",FTy 5)),
6558                                                    qVar"s"),Var("v",F64)]),
6559                                           Call
6560                                             ("reg'FPSCR",F32,
6561                                              Var("v0",CTy"FPSCR")))])])]))),
6562             Let(TP[Var("v",F32),qVar"s"],
6563                 CS(Var("m_with_zero",OTy(FTy 5)),
6564                    [(Mop(Some,Var("m",FTy 5)),
6565                      TP[Apply
6566                           (Call("S",ATy(qTy,F32),Var("m",FTy 5)),
6567                            qVar"state"),qVar"state"]),
6568                     (LO(FTy 5),
6569                      TP[Call("FPZero32",F32,LW(0,1)),qVar"state"])]),
6570                 Let(Var("v0",CTy"FPSCR"),
6571                     Dest("FPSCR",CTy"FPSCR",Dest("FP",CTy"FP",qVar"s")),
6572                     Rupd
6573                       ("FP",
6574                        TP[qVar"s",
6575                           Rupd
6576                             ("FPSCR",
6577                              TP[Dest("FP",CTy"FP",qVar"s"),
6578                                 Call
6579                                   ("write'reg'FPSCR",CTy"FPSCR",
6580                                    TP[Var("v0",CTy"FPSCR"),
6581                                       BFI(LN 31,LN 28,
6582                                           Call
6583                                             ("FPCompare32",F4,
6584                                              TP[Apply
6585                                                   (Call
6586                                                      ("S",ATy(qTy,F32),
6587                                                       Var("d",FTy 5)),
6588                                                    qVar"s"),Var("v",F32)]),
6589                                           Call
6590                                             ("reg'FPSCR",F32,
6591                                              Var("v0",CTy"FPSCR")))])])])))))))
6592;
6593val dfn'vmsr_def = Def
6594  ("dfn'vmsr",Var("t",F4),
6595   Close
6596     (qVar"state",
6597      Apply
6598        (Call("IncPC",ATy(qTy,qTy),LU),
6599         Let(TP[Var("v",CTy"FP"),qVar"s"],
6600             Let(TP[Var("v",PTy(CTy"FP",CTy"FPSCR")),qVar"s"],
6601                 Let(TP[Var("v0",F32),qVar"s0"],
6602                     Apply
6603                       (Call("R",ATy(qTy,PTy(F32,qTy)),Var("t",F4)),
6604                        qVar"state"),
6605                     TP[TP[Dest("FP",CTy"FP",qVar"state"),
6606                           Call
6607                             ("write'reg'FPSCR",CTy"FPSCR",
6608                              TP[Dest
6609                                   ("FPSCR",CTy"FPSCR",
6610                                    Dest("FP",CTy"FP",qVar"state")),
6611                                 Var("v0",F32)])],qVar"s0"]),
6612                 TP[Rupd("FPSCR",Var("v",PTy(CTy"FP",CTy"FPSCR"))),qVar"s"]),
6613             Rupd("FP",TP[qVar"s",Var("v",CTy"FP")])))))
6614;
6615val dfn'vmrs_def = Def
6616  ("dfn'vmrs",Var("t",F4),
6617   Close
6618     (qVar"state",
6619      Apply
6620        (Call("IncPC",ATy(qTy,qTy),LU),
6621         ITE(Mop(Not,EQ(Var("t",F4),LW(15,4))),
6622             Apply
6623               (Call
6624                  ("write'R",ATy(qTy,qTy),
6625                   TP[Call
6626                        ("reg'FPSCR",F32,
6627                         Dest
6628                           ("FPSCR",CTy"FPSCR",
6629                            Dest("FP",CTy"FP",qVar"state"))),Var("t",F4)]),
6630                qVar"state"),
6631             Let(qVar"s",
6632                 Rupd
6633                   ("CPSR",
6634                    TP[qVar"state",
6635                       Rupd
6636                         ("N",
6637                          TP[Dest("CPSR",CTy"PSR",qVar"state"),
6638                             Dest
6639                               ("N",bTy,
6640                                Dest
6641                                  ("FPSCR",CTy"FPSCR",
6642                                   Dest("FP",CTy"FP",qVar"state")))])]),
6643                 Let(qVar"s",
6644                     Rupd
6645                       ("CPSR",
6646                        TP[qVar"s",
6647                           Rupd
6648                             ("Z",
6649                              TP[Dest("CPSR",CTy"PSR",qVar"s"),
6650                                 Dest
6651                                   ("Z",bTy,
6652                                    Dest
6653                                      ("FPSCR",CTy"FPSCR",
6654                                       Dest("FP",CTy"FP",qVar"s")))])]),
6655                     Let(qVar"s",
6656                         Rupd
6657                           ("CPSR",
6658                            TP[qVar"s",
6659                               Rupd
6660                                 ("C",
6661                                  TP[Dest("CPSR",CTy"PSR",qVar"s"),
6662                                     Dest
6663                                       ("C",bTy,
6664                                        Dest
6665                                          ("FPSCR",CTy"FPSCR",
6666                                           Dest("FP",CTy"FP",qVar"s")))])]),
6667                         Rupd
6668                           ("CPSR",
6669                            TP[qVar"s",
6670                               Rupd
6671                                 ("V",
6672                                  TP[Dest("CPSR",CTy"PSR",qVar"s"),
6673                                     Dest
6674                                       ("V",bTy,
6675                                        Dest
6676                                          ("FPSCR",CTy"FPSCR",
6677                                           Dest("FP",CTy"FP",qVar"s")))])]))))))))
6678;
6679val dfn'vadd_def = Def
6680  ("dfn'vadd",
6681   TP[bVar"dp_operation",Var("d",FTy 5),Var("n",FTy 5),Var("m",FTy 5)],
6682   Close
6683     (qVar"state",
6684      Apply
6685        (Call("IncPC",ATy(qTy,qTy),LU),
6686         ITE(bVar"dp_operation",
6687             Apply
6688               (Call
6689                  ("write'D",ATy(qTy,qTy),
6690                   TP[Apply
6691                        (Call
6692                           ("FPAdd64",ATy(qTy,F64),
6693                            TP[Apply
6694                                 (Call("D",ATy(qTy,F64),Var("n",FTy 5)),
6695                                  qVar"state"),
6696                               Apply
6697                                 (Call("D",ATy(qTy,F64),Var("m",FTy 5)),
6698                                  qVar"state")]),qVar"state"),
6699                      Var("d",FTy 5)]),qVar"state"),
6700             Apply
6701               (Call
6702                  ("write'S",ATy(qTy,qTy),
6703                   TP[Apply
6704                        (Call
6705                           ("FPAdd32",ATy(qTy,F32),
6706                            TP[Apply
6707                                 (Call("S",ATy(qTy,F32),Var("n",FTy 5)),
6708                                  qVar"state"),
6709                               Apply
6710                                 (Call("S",ATy(qTy,F32),Var("m",FTy 5)),
6711                                  qVar"state")]),qVar"state"),
6712                      Var("d",FTy 5)]),qVar"state")))))
6713;
6714val dfn'vsub_def = Def
6715  ("dfn'vsub",
6716   TP[bVar"dp_operation",Var("d",FTy 5),Var("n",FTy 5),Var("m",FTy 5)],
6717   Close
6718     (qVar"state",
6719      Apply
6720        (Call("IncPC",ATy(qTy,qTy),LU),
6721         ITE(bVar"dp_operation",
6722             Apply
6723               (Call
6724                  ("write'D",ATy(qTy,qTy),
6725                   TP[Apply
6726                        (Call
6727                           ("FPSub64",ATy(qTy,F64),
6728                            TP[Apply
6729                                 (Call("D",ATy(qTy,F64),Var("n",FTy 5)),
6730                                  qVar"state"),
6731                               Apply
6732                                 (Call("D",ATy(qTy,F64),Var("m",FTy 5)),
6733                                  qVar"state")]),qVar"state"),
6734                      Var("d",FTy 5)]),qVar"state"),
6735             Apply
6736               (Call
6737                  ("write'S",ATy(qTy,qTy),
6738                   TP[Apply
6739                        (Call
6740                           ("FPSub32",ATy(qTy,F32),
6741                            TP[Apply
6742                                 (Call("S",ATy(qTy,F32),Var("n",FTy 5)),
6743                                  qVar"state"),
6744                               Apply
6745                                 (Call("S",ATy(qTy,F32),Var("m",FTy 5)),
6746                                  qVar"state")]),qVar"state"),
6747                      Var("d",FTy 5)]),qVar"state")))))
6748;
6749val dfn'vmul_def = Def
6750  ("dfn'vmul",
6751   TP[bVar"dp_operation",Var("d",FTy 5),Var("n",FTy 5),Var("m",FTy 5)],
6752   Close
6753     (qVar"state",
6754      Apply
6755        (Call("IncPC",ATy(qTy,qTy),LU),
6756         ITE(bVar"dp_operation",
6757             Apply
6758               (Call
6759                  ("write'D",ATy(qTy,qTy),
6760                   TP[Apply
6761                        (Call
6762                           ("FPMul64",ATy(qTy,F64),
6763                            TP[Apply
6764                                 (Call("D",ATy(qTy,F64),Var("n",FTy 5)),
6765                                  qVar"state"),
6766                               Apply
6767                                 (Call("D",ATy(qTy,F64),Var("m",FTy 5)),
6768                                  qVar"state")]),qVar"state"),
6769                      Var("d",FTy 5)]),qVar"state"),
6770             Apply
6771               (Call
6772                  ("write'S",ATy(qTy,qTy),
6773                   TP[Apply
6774                        (Call
6775                           ("FPMul32",ATy(qTy,F32),
6776                            TP[Apply
6777                                 (Call("S",ATy(qTy,F32),Var("n",FTy 5)),
6778                                  qVar"state"),
6779                               Apply
6780                                 (Call("S",ATy(qTy,F32),Var("m",FTy 5)),
6781                                  qVar"state")]),qVar"state"),
6782                      Var("d",FTy 5)]),qVar"state")))))
6783;
6784val dfn'vdiv_def = Def
6785  ("dfn'vdiv",
6786   TP[bVar"dp_operation",Var("d",FTy 5),Var("n",FTy 5),Var("m",FTy 5)],
6787   Close
6788     (qVar"state",
6789      Apply
6790        (Call("IncPC",ATy(qTy,qTy),LU),
6791         ITE(bVar"dp_operation",
6792             Apply
6793               (Call
6794                  ("write'D",ATy(qTy,qTy),
6795                   TP[Mop(FPDiv 64,
6796                          TP[Apply
6797                               (Const("RoundingMode",ATy(qTy,rTy)),
6798                                qVar"state"),
6799                             Apply
6800                               (Call("D",ATy(qTy,F64),Var("n",FTy 5)),
6801                                qVar"state"),
6802                             Apply
6803                               (Call("D",ATy(qTy,F64),Var("m",FTy 5)),
6804                                qVar"state")]),Var("d",FTy 5)]),
6805                qVar"state"),
6806             Apply
6807               (Call
6808                  ("write'S",ATy(qTy,qTy),
6809                   TP[Mop(FPDiv 32,
6810                          TP[Apply
6811                               (Const("RoundingMode",ATy(qTy,rTy)),
6812                                qVar"state"),
6813                             Apply
6814                               (Call("S",ATy(qTy,F32),Var("n",FTy 5)),
6815                                qVar"state"),
6816                             Apply
6817                               (Call("S",ATy(qTy,F32),Var("m",FTy 5)),
6818                                qVar"state")]),Var("d",FTy 5)]),
6819                qVar"state")))))
6820;
6821val dfn'vmla_vmls_def = Def
6822  ("dfn'vmla_vmls",
6823   TP[bVar"dp_operation",bVar"add",Var("d",FTy 5),Var("n",FTy 5),
6824      Var("m",FTy 5)],
6825   Close
6826     (qVar"state",
6827      Apply
6828        (Call("IncPC",ATy(qTy,qTy),LU),
6829         ITE(bVar"dp_operation",
6830             Let(Var("v",F64),
6831                 Apply
6832                   (Call
6833                      ("FPMul64",ATy(qTy,F64),
6834                       TP[Apply
6835                            (Call("D",ATy(qTy,F64),Var("n",FTy 5)),
6836                             qVar"state"),
6837                          Apply
6838                            (Call("D",ATy(qTy,F64),Var("m",FTy 5)),
6839                             qVar"state")]),qVar"state"),
6840                 Apply
6841                   (Call
6842                      ("write'D",ATy(qTy,qTy),
6843                       TP[Apply
6844                            (Call
6845                               ("FPAdd64",ATy(qTy,F64),
6846                                TP[Apply
6847                                     (Call
6848                                        ("D",ATy(qTy,F64),Var("n",FTy 5)),
6849                                      qVar"state"),
6850                                   ITE(bVar"add",Var("v",F64),
6851                                       Mop(FPNeg 64,Var("v",F64)))]),
6852                             qVar"state"),Var("d",FTy 5)]),qVar"state")),
6853             Let(Var("v",F32),
6854                 Apply
6855                   (Call
6856                      ("FPMul32",ATy(qTy,F32),
6857                       TP[Apply
6858                            (Call("S",ATy(qTy,F32),Var("n",FTy 5)),
6859                             qVar"state"),
6860                          Apply
6861                            (Call("S",ATy(qTy,F32),Var("m",FTy 5)),
6862                             qVar"state")]),qVar"state"),
6863                 Apply
6864                   (Call
6865                      ("write'S",ATy(qTy,qTy),
6866                       TP[Apply
6867                            (Call
6868                               ("FPAdd32",ATy(qTy,F32),
6869                                TP[Apply
6870                                     (Call
6871                                        ("S",ATy(qTy,F32),Var("n",FTy 5)),
6872                                      qVar"state"),
6873                                   ITE(bVar"add",Var("v",F32),
6874                                       Mop(FPNeg 32,Var("v",F32)))]),
6875                             qVar"state"),Var("d",FTy 5)]),qVar"state"))))))
6876;
6877val dfn'vfma_vfms_def = Def
6878  ("dfn'vfma_vfms",
6879   TP[bVar"dp_operation",bVar"add",Var("d",FTy 5),Var("n",FTy 5),
6880      Var("m",FTy 5)],
6881   Close
6882     (qVar"state",
6883      Apply
6884        (Call("IncPC",ATy(qTy,qTy),LU),
6885         ITE(bVar"dp_operation",
6886             Let(Var("v",F64),
6887                 Apply(Call("D",ATy(qTy,F64),Var("n",FTy 5)),qVar"state"),
6888                 Apply
6889                   (Call
6890                      ("write'D",ATy(qTy,qTy),
6891                       TP[Mop(FPMulAdd 64,
6892                              TP[Apply
6893                                   (Const("RoundingMode",ATy(qTy,rTy)),
6894                                    qVar"state"),
6895                                 ITE(bVar"add",Var("v",F64),
6896                                     Mop(FPNeg 64,Var("v",F64))),
6897                                 Apply
6898                                   (Call("D",ATy(qTy,F64),Var("m",FTy 5)),
6899                                    qVar"state"),
6900                                 Apply
6901                                   (Call("D",ATy(qTy,F64),Var("d",FTy 5)),
6902                                    qVar"state")]),Var("d",FTy 5)]),
6903                    qVar"state")),
6904             Let(Var("v",F32),
6905                 Apply(Call("S",ATy(qTy,F32),Var("n",FTy 5)),qVar"state"),
6906                 Apply
6907                   (Call
6908                      ("write'S",ATy(qTy,qTy),
6909                       TP[Mop(FPMulAdd 32,
6910                              TP[Apply
6911                                   (Const("RoundingMode",ATy(qTy,rTy)),
6912                                    qVar"state"),
6913                                 ITE(bVar"add",Var("v",F32),
6914                                     Mop(FPNeg 32,Var("v",F32))),
6915                                 Apply
6916                                   (Call("S",ATy(qTy,F32),Var("m",FTy 5)),
6917                                    qVar"state"),
6918                                 Apply
6919                                   (Call("S",ATy(qTy,F32),Var("d",FTy 5)),
6920                                    qVar"state")]),Var("d",FTy 5)]),
6921                    qVar"state"))))))
6922;
6923val dfn'vfnma_vfnms_def = Def
6924  ("dfn'vfnma_vfnms",
6925   TP[bVar"dp_operation",bVar"add",Var("d",FTy 5),Var("n",FTy 5),
6926      Var("m",FTy 5)],
6927   Close
6928     (qVar"state",
6929      Apply
6930        (Call("IncPC",ATy(qTy,qTy),LU),
6931         ITE(bVar"dp_operation",
6932             Let(Var("v",F64),
6933                 Apply(Call("D",ATy(qTy,F64),Var("n",FTy 5)),qVar"state"),
6934                 Apply
6935                   (Call
6936                      ("write'D",ATy(qTy,qTy),
6937                       TP[Mop(FPMulAdd 64,
6938                              TP[Apply
6939                                   (Const("RoundingMode",ATy(qTy,rTy)),
6940                                    qVar"state"),
6941                                 ITE(bVar"add",Var("v",F64),
6942                                     Mop(FPNeg 64,Var("v",F64))),
6943                                 Apply
6944                                   (Call("D",ATy(qTy,F64),Var("m",FTy 5)),
6945                                    qVar"state"),
6946                                 Mop(FPNeg 64,
6947                                     Apply
6948                                       (Call
6949                                          ("D",ATy(qTy,F64),Var("d",FTy 5)),
6950                                        qVar"state"))]),Var("d",FTy 5)]),
6951                    qVar"state")),
6952             Let(Var("v",F32),
6953                 Apply(Call("S",ATy(qTy,F32),Var("n",FTy 5)),qVar"state"),
6954                 Apply
6955                   (Call
6956                      ("write'S",ATy(qTy,qTy),
6957                       TP[Mop(FPMulAdd 32,
6958                              TP[Apply
6959                                   (Const("RoundingMode",ATy(qTy,rTy)),
6960                                    qVar"state"),
6961                                 ITE(bVar"add",Var("v",F32),
6962                                     Mop(FPNeg 32,Var("v",F32))),
6963                                 Apply
6964                                   (Call("S",ATy(qTy,F32),Var("m",FTy 5)),
6965                                    qVar"state"),
6966                                 Mop(FPNeg 32,
6967                                     Apply
6968                                       (Call
6969                                          ("S",ATy(qTy,F32),Var("d",FTy 5)),
6970                                        qVar"state"))]),Var("d",FTy 5)]),
6971                    qVar"state"))))))
6972;
6973val dfn'vneg_mul_def = Def
6974  ("dfn'vneg_mul",
6975   TP[bVar"dp_operation",Var("typ",CTy"VFPNegMul"),Var("d",FTy 5),
6976      Var("n",FTy 5),Var("m",FTy 5)],
6977   Close
6978     (qVar"state",
6979      Apply
6980        (Call("IncPC",ATy(qTy,qTy),LU),
6981         ITE(bVar"dp_operation",
6982             Let(Var("v",F64),
6983                 Apply
6984                   (Call
6985                      ("FPMul64",ATy(qTy,F64),
6986                       TP[Apply
6987                            (Call("D",ATy(qTy,F64),Var("n",FTy 5)),
6988                             qVar"state"),
6989                          Apply
6990                            (Call("D",ATy(qTy,F64),Var("m",FTy 5)),
6991                             qVar"state")]),qVar"state"),
6992                 CS(Var("typ",CTy"VFPNegMul"),
6993                    [(LC("VFPNegMul_VNMLA",CTy"VFPNegMul"),
6994                      Apply
6995                        (Call
6996                           ("write'D",ATy(qTy,qTy),
6997                            TP[Apply
6998                                 (Call
6999                                    ("FPAdd64",ATy(qTy,F64),
7000                                     TP[Mop(FPNeg 64,
7001                                            Apply
7002                                              (Call
7003                                                 ("D",ATy(qTy,F64),
7004                                                  Var("d",FTy 5)),
7005                                               qVar"state")),
7006                                        Mop(FPNeg 64,Var("v",F64))]),
7007                                  qVar"state"),Var("d",FTy 5)]),
7008                         qVar"state")),
7009                     (LC("VFPNegMul_VNMLS",CTy"VFPNegMul"),
7010                      Apply
7011                        (Call
7012                           ("write'D",ATy(qTy,qTy),
7013                            TP[Apply
7014                                 (Call
7015                                    ("FPAdd64",ATy(qTy,F64),
7016                                     TP[Mop(FPNeg 64,
7017                                            Apply
7018                                              (Call
7019                                                 ("D",ATy(qTy,F64),
7020                                                  Var("d",FTy 5)),
7021                                               qVar"state")),Var("v",F64)]),
7022                                  qVar"state"),Var("d",FTy 5)]),
7023                         qVar"state")),
7024                     (LC("VFPNegMul_VNMUL",CTy"VFPNegMul"),
7025                      Apply
7026                        (Call
7027                           ("write'D",ATy(qTy,qTy),
7028                            TP[Mop(FPNeg 64,Var("v",F64)),Var("d",FTy 5)]),
7029                         qVar"state"))])),
7030             Let(Var("v",F32),
7031                 Apply
7032                   (Call
7033                      ("FPMul32",ATy(qTy,F32),
7034                       TP[Apply
7035                            (Call("S",ATy(qTy,F32),Var("n",FTy 5)),
7036                             qVar"state"),
7037                          Apply
7038                            (Call("S",ATy(qTy,F32),Var("m",FTy 5)),
7039                             qVar"state")]),qVar"state"),
7040                 CS(Var("typ",CTy"VFPNegMul"),
7041                    [(LC("VFPNegMul_VNMLA",CTy"VFPNegMul"),
7042                      Apply
7043                        (Call
7044                           ("write'S",ATy(qTy,qTy),
7045                            TP[Apply
7046                                 (Call
7047                                    ("FPAdd32",ATy(qTy,F32),
7048                                     TP[Mop(FPNeg 32,
7049                                            Apply
7050                                              (Call
7051                                                 ("S",ATy(qTy,F32),
7052                                                  Var("d",FTy 5)),
7053                                               qVar"state")),
7054                                        Mop(FPNeg 32,Var("v",F32))]),
7055                                  qVar"state"),Var("d",FTy 5)]),
7056                         qVar"state")),
7057                     (LC("VFPNegMul_VNMLS",CTy"VFPNegMul"),
7058                      Apply
7059                        (Call
7060                           ("write'S",ATy(qTy,qTy),
7061                            TP[Apply
7062                                 (Call
7063                                    ("FPAdd32",ATy(qTy,F32),
7064                                     TP[Mop(FPNeg 32,
7065                                            Apply
7066                                              (Call
7067                                                 ("S",ATy(qTy,F32),
7068                                                  Var("d",FTy 5)),
7069                                               qVar"state")),Var("v",F32)]),
7070                                  qVar"state"),Var("d",FTy 5)]),
7071                         qVar"state")),
7072                     (LC("VFPNegMul_VNMUL",CTy"VFPNegMul"),
7073                      Apply
7074                        (Call
7075                           ("write'S",ATy(qTy,qTy),
7076                            TP[Mop(FPNeg 32,Var("v",F32)),Var("d",FTy 5)]),
7077                         qVar"state"))]))))))
7078;
7079val dfn'vldr_def = Def
7080  ("dfn'vldr",
7081   TP[bVar"single_reg",bVar"add",Var("d",FTy 5),Var("n",F4),
7082      Var("imm32",F32)],
7083   Close
7084     (qVar"state",
7085      Let(TP[Var("v",F32),qVar"s"],
7086          ITE(EQ(Var("n",F4),LW(15,4)),
7087              Let(TP[Var("v",F32),qVar"s"],
7088                  Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
7089                  TP[Call("Align",F32,TP[Var("v",F32),LN 4]),qVar"s"]),
7090              Apply
7091                (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state")),
7092          Let(Var("address",F32),
7093              ITE(bVar"add",Bop(Add,Var("v",F32),Var("imm32",F32)),
7094                  Bop(Sub,Var("v",F32),Var("imm32",F32))),
7095              Apply
7096                (Call("IncPC",ATy(qTy,qTy),LU),
7097                 ITE(bVar"single_reg",
7098                     Let(TP[Var("v",F32),qVar"s"],
7099                         Apply
7100                           (Call
7101                              ("MemA",ATy(qTy,PTy(F32,qTy)),
7102                               TP[Var("address",F32),LN 4]),qVar"s"),
7103                         Apply
7104                           (Call
7105                              ("write'S",ATy(qTy,qTy),
7106                               TP[Var("v",F32),Var("d",FTy 5)]),qVar"s")),
7107                     Let(TP[Var("v",F32),qVar"s"],
7108                         Apply
7109                           (Call
7110                              ("MemA",ATy(qTy,PTy(F32,qTy)),
7111                               TP[Var("address",F32),LN 4]),qVar"s"),
7112                         Let(TP[Var("v0",F32),qVar"s"],
7113                             Apply
7114                               (Call
7115                                  ("MemA",ATy(qTy,PTy(F32,qTy)),
7116                                   TP[Bop(Add,Var("address",F32),LW(4,32)),
7117                                      LN 4]),qVar"s"),
7118                             Apply
7119                               (Call
7120                                  ("write'D",ATy(qTy,qTy),
7121                                   TP[ITE(Apply
7122                                            (Call
7123                                               ("BigEndian",ATy(qTy,bTy),
7124                                                LU),qVar"s"),
7125                                          CC[Var("v",F32),Var("v0",F32)],
7126                                          CC[Var("v0",F32),Var("v",F32)]),
7127                                      Var("d",FTy 5)]),qVar"s")))))))))
7128;
7129val dfn'vstr_def = Def
7130  ("dfn'vstr",
7131   TP[bVar"single_reg",bVar"add",Var("d",FTy 5),Var("n",F4),
7132      Var("imm32",F32)],
7133   Close
7134     (qVar"state",
7135      Let(TP[Var("v",F32),qVar"s"],
7136          ITE(bVar"add",
7137              Let(TP[Var("v",F32),qVar"s"],
7138                  Apply
7139                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
7140                     qVar"state"),
7141                  TP[Bop(Add,Var("v",F32),Var("imm32",F32)),qVar"s"]),
7142              Let(TP[Var("v",F32),qVar"s"],
7143                  Apply
7144                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
7145                     qVar"state"),
7146                  TP[Bop(Sub,Var("v",F32),Var("imm32",F32)),qVar"s"])),
7147          Apply
7148            (Call("IncPC",ATy(qTy,qTy),LU),
7149             ITE(bVar"single_reg",
7150                 Apply
7151                   (Call
7152                      ("write'MemA",ATy(qTy,qTy),
7153                       TP[Apply
7154                            (Call("S",ATy(qTy,F32),Var("d",FTy 5)),qVar"s"),
7155                          Var("v",F32),LN 4]),qVar"s"),
7156                 Let(Var("v0",F64),
7157                     Apply(Call("D",ATy(qTy,F64),Var("d",FTy 5)),qVar"s"),
7158                     Let(TP[bVar"v1",qVar"s"],
7159                         Let(qVar"s0",
7160                             Apply
7161                               (Call
7162                                  ("write'MemA",ATy(qTy,qTy),
7163                                   TP[ITE(Apply
7164                                            (Call
7165                                               ("BigEndian",ATy(qTy,bTy),
7166                                                LU),qVar"s"),
7167                                          EX(Var("v0",F64),LN 63,LN 32,F32),
7168                                          EX(Var("v0",F64),LN 31,LN 0,F32)),
7169                                      Var("v",F32),LN 4]),qVar"s"),
7170                             TP[Apply
7171                                  (Call("BigEndian",ATy(qTy,bTy),LU),
7172                                   qVar"s0"),qVar"s0"]),
7173                         Apply
7174                           (Call
7175                              ("write'MemA",ATy(qTy,qTy),
7176                               TP[ITE(bVar"v1",
7177                                      EX(Var("v0",F64),LN 31,LN 0,F32),
7178                                      EX(Var("v0",F64),LN 63,LN 32,F32)),
7179                                  Bop(Add,Var("v",F32),LW(4,32)),LN 4]),
7180                            qVar"s"))))))))
7181;
7182val dfn'vldm_def = Def
7183  ("dfn'vldm",
7184   TP[bVar"single_regs",bVar"add",bVar"wback",Var("d",FTy 5),Var("n",F4),
7185      Var("imm8",F8)],
7186   Close
7187     (qVar"state",
7188      Let(Var("imm32",F32),Mop(Cast F32,CC[Var("imm8",F8),LW(0,2)]),
7189          Let(TP[Var("v",F32),qVar"s"],
7190              ITE(bVar"add",
7191                  Apply
7192                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
7193                     qVar"state"),
7194                  Let(TP[Var("v",F32),qVar"s"],
7195                      Apply
7196                        (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
7197                         qVar"state"),
7198                      TP[Bop(Sub,Var("v",F32),Var("imm32",F32)),qVar"s"])),
7199              Let(Var("s",PTy(F32,qTy)),
7200                  Mop(Snd,
7201                      Apply
7202                        (For(TP[LN 0,
7203                                Bop(Sub,
7204                                    ITE(bVar"single_regs",
7205                                        Mop(Cast nTy,Var("imm8",F8)),
7206                                        Bop(Div,
7207                                            Mop(Cast nTy,Var("imm8",F8)),
7208                                            LN 2)),LN 1),
7209                                Close
7210                                  (nVar"r",
7211                                   Close
7212                                     (Var("state",PTy(F32,qTy)),
7213                                      ITE(bVar"single_regs",
7214                                          Let(Var("s",PTy(F32,qTy)),
7215                                              Let(TP[Var("v",
7216                                                         PTy(F32,FTy 5)),
7217                                                     Var("s",PTy(F32,qTy))],
7218                                                  Let(TP[Var("v",F32),
7219                                                         Var("s",
7220                                                             PTy(F32,qTy))],
7221                                                      CS(Apply
7222                                                           (Call
7223                                                              ("MemA",
7224                                                               ATy(qTy,
7225                                                                   PTy(F32,
7226                                                                       qTy)),
7227                                                               TP[Mop(Fst,
7228                                                                      Var("state",
7229                                                                          PTy(F32,
7230                                                                              qTy))),
7231                                                                  LN 4]),
7232                                                            Mop(Snd,
7233                                                                Var("state",
7234                                                                    PTy(F32,
7235                                                                        qTy)))),
7236                                                         [(TP[Var("v",F32),
7237                                                              qVar"s3"],
7238                                                           TP[Var("v",F32),
7239                                                              Mop(Fst,
7240                                                                  Var("state",
7241                                                                      PTy(F32,
7242                                                                          qTy))),
7243                                                              qVar"s3"])]),
7244                                                      TP[TP[Var("v",F32),
7245                                                            Bop(Add,
7246                                                                Var("d",
7247                                                                    FTy 5),
7248                                                                Mop(Cast
7249                                                                      (FTy 5),
7250                                                                    nVar"r"))],
7251                                                         Var("s",
7252                                                             PTy(F32,qTy))]),
7253                                                  TP[Mop(Fst,
7254                                                         Var("s",
7255                                                             PTy(F32,qTy))),
7256                                                     Apply
7257                                                       (Call
7258                                                          ("write'S",
7259                                                           ATy(qTy,qTy),
7260                                                           Var("v",
7261                                                               PTy(F32,
7262                                                                   FTy 5))),
7263                                                        Mop(Snd,
7264                                                            Var("s",
7265                                                                PTy(F32,
7266                                                                    qTy))))]),
7267                                              TP[LU,
7268                                                 Bop(Add,
7269                                                     Mop(Fst,
7270                                                         Var("s",
7271                                                             PTy(F32,qTy))),
7272                                                     LW(4,32)),
7273                                                 Mop(Snd,
7274                                                     Var("s",PTy(F32,qTy)))]),
7275                                          Let(TP[Var("v",F32),
7276                                                 Var("s",PTy(F32,qTy))],
7277                                              CS(Apply
7278                                                   (Call
7279                                                      ("MemA",
7280                                                       ATy(qTy,
7281                                                           PTy(F32,qTy)),
7282                                                       TP[Mop(Fst,
7283                                                              Var("state",
7284                                                                  PTy(F32,
7285                                                                      qTy))),
7286                                                          LN 4]),
7287                                                    Mop(Snd,
7288                                                        Var("state",
7289                                                            PTy(F32,qTy)))),
7290                                                 [(TP[Var("v",F32),
7291                                                      qVar"s3"],
7292                                                   TP[Var("v",F32),
7293                                                      Mop(Fst,
7294                                                          Var("state",
7295                                                              PTy(F32,qTy))),
7296                                                      qVar"s3"])]),
7297                                              Let(TP[Var("v0",F32),
7298                                                     Var("s",PTy(F32,qTy))],
7299                                                  CS(Apply
7300                                                       (Call
7301                                                          ("MemA",
7302                                                           ATy(qTy,
7303                                                               PTy(F32,qTy)),
7304                                                           TP[Bop(Add,
7305                                                                  Mop(Fst,
7306                                                                      Var("s",
7307                                                                          PTy(F32,
7308                                                                              qTy))),
7309                                                                  LW(4,32)),
7310                                                              LN 4]),
7311                                                        Mop(Snd,
7312                                                            Var("s",
7313                                                                PTy(F32,
7314                                                                    qTy)))),
7315                                                     [(TP[Var("v",F32),
7316                                                          qVar"s3"],
7317                                                       TP[Var("v",F32),
7318                                                          Mop(Fst,
7319                                                              Var("s",
7320                                                                  PTy(F32,
7321                                                                      qTy))),
7322                                                          qVar"s3"])]),
7323                                                  Let(qVar"s1",
7324                                                      Mop(Snd,
7325                                                          Var("s",
7326                                                              PTy(F32,qTy))),
7327                                                      TP[LU,
7328                                                         Bop(Add,
7329                                                             Mop(Fst,
7330                                                                 Var("s",
7331                                                                     PTy(F32,
7332                                                                         qTy))),
7333                                                             LW(8,32)),
7334                                                         Apply
7335                                                           (Call
7336                                                              ("write'D",
7337                                                               ATy(qTy,qTy),
7338                                                               TP[ITE(Apply
7339                                                                        (Call
7340                                                                           ("BigEndian",
7341                                                                            ATy(qTy,
7342                                                                                bTy),
7343                                                                            LU),
7344                                                                         qVar"s1"),
7345                                                                      CC[Var("v",
7346                                                                             F32),
7347                                                                         Var("v0",
7348                                                                             F32)],
7349                                                                      CC[Var("v0",
7350                                                                             F32),
7351                                                                         Var("v",
7352                                                                             F32)]),
7353                                                                  Bop(Add,
7354                                                                      Var("d",
7355                                                                          FTy 5),
7356                                                                      Mop(Cast
7357                                                                            (FTy 5),
7358                                                                          nVar"r"))]),
7359                                                            qVar"s1")]))))))]),
7360                         TP[Var("v",F32),qVar"s"])),
7361                  Apply
7362                    (Call("IncPC",ATy(qTy,qTy),LU),
7363                     ITE(bVar"wback",
7364                         Let(TP[Var("v",F32),Var("s",PTy(F32,qTy))],
7365                             ITE(bVar"add",
7366                                 Let(TP[Var("v",F32),Var("s",PTy(F32,qTy))],
7367                                     CS(Apply
7368                                          (Call
7369                                             ("R",ATy(qTy,PTy(F32,qTy)),
7370                                              Var("n",F4)),
7371                                           Mop(Snd,Var("s",PTy(F32,qTy)))),
7372                                        [(TP[Var("v",F32),qVar"s3"],
7373                                          TP[Var("v",F32),
7374                                             Mop(Fst,Var("s",PTy(F32,qTy))),
7375                                             qVar"s3"])]),
7376                                     TP[Bop(Add,Var("v",F32),
7377                                            Var("imm32",F32)),
7378                                        Var("s",PTy(F32,qTy))]),
7379                                 Let(TP[Var("v",F32),Var("s",PTy(F32,qTy))],
7380                                     CS(Apply
7381                                          (Call
7382                                             ("R",ATy(qTy,PTy(F32,qTy)),
7383                                              Var("n",F4)),
7384                                           Mop(Snd,Var("s",PTy(F32,qTy)))),
7385                                        [(TP[Var("v",F32),qVar"s3"],
7386                                          TP[Var("v",F32),
7387                                             Mop(Fst,Var("s",PTy(F32,qTy))),
7388                                             qVar"s3"])]),
7389                                     TP[Bop(Sub,Var("v",F32),
7390                                            Var("imm32",F32)),
7391                                        Var("s",PTy(F32,qTy))])),
7392                             Apply
7393                               (Call
7394                                  ("write'R",ATy(qTy,qTy),
7395                                   TP[Var("v",F32),Var("n",F4)]),
7396                                Mop(Snd,Var("s",PTy(F32,qTy))))),
7397                         Mop(Snd,Var("s",PTy(F32,qTy))))))))))
7398;
7399val dfn'vstm_def = Def
7400  ("dfn'vstm",
7401   TP[bVar"single_regs",bVar"add",bVar"wback",Var("d",FTy 5),Var("n",F4),
7402      Var("imm8",F8)],
7403   Close
7404     (qVar"state",
7405      Let(Var("imm32",F32),Mop(Cast F32,CC[Var("imm8",F8),LW(0,2)]),
7406          Let(TP[Var("v",F32),qVar"s"],
7407              ITE(bVar"add",
7408                  Apply
7409                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
7410                     qVar"state"),
7411                  Let(TP[Var("v",F32),qVar"s"],
7412                      Apply
7413                        (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
7414                         qVar"state"),
7415                      TP[Bop(Sub,Var("v",F32),Var("imm32",F32)),qVar"s"])),
7416              Let(Var("s",PTy(F32,qTy)),
7417                  Mop(Snd,
7418                      Apply
7419                        (For(TP[LN 0,
7420                                Bop(Sub,
7421                                    ITE(bVar"single_regs",
7422                                        Mop(Cast nTy,Var("imm8",F8)),
7423                                        Bop(Div,
7424                                            Mop(Cast nTy,Var("imm8",F8)),
7425                                            LN 2)),LN 1),
7426                                Close
7427                                  (nVar"r",
7428                                   Close
7429                                     (Var("state",PTy(F32,qTy)),
7430                                      ITE(bVar"single_regs",
7431                                          TP[LU,
7432                                             Bop(Add,
7433                                                 Mop(Fst,
7434                                                     Var("state",
7435                                                         PTy(F32,qTy))),
7436                                                 LW(4,32)),
7437                                             Apply
7438                                               (Call
7439                                                  ("write'MemA",
7440                                                   ATy(qTy,qTy),
7441                                                   TP[Apply
7442                                                        (Call
7443                                                           ("S",
7444                                                            ATy(qTy,F32),
7445                                                            Bop(Add,
7446                                                                Var("d",
7447                                                                    FTy 5),
7448                                                                Mop(Cast
7449                                                                      (FTy 5),
7450                                                                    nVar"r"))),
7451                                                         Mop(Snd,
7452                                                             Var("state",
7453                                                                 PTy(F32,
7454                                                                     qTy)))),
7455                                                      Mop(Fst,
7456                                                          Var("state",
7457                                                              PTy(F32,qTy))),
7458                                                      LN 4]),
7459                                                Mop(Snd,
7460                                                    Var("state",
7461                                                        PTy(F32,qTy))))],
7462                                          Let(Var("v",F64),
7463                                              Apply
7464                                                (Call
7465                                                   ("D",ATy(qTy,F64),
7466                                                    Bop(Add,
7467                                                        Var("d",FTy 5),
7468                                                        Mop(Cast(FTy 5),
7469                                                            nVar"r"))),
7470                                                 Mop(Snd,
7471                                                     Var("state",
7472                                                         PTy(F32,qTy)))),
7473                                              Let(TP[Var("s0",F32),
7474                                                     qVar"s1"],
7475                                                  TP[Mop(Fst,
7476                                                         Var("state",
7477                                                             PTy(F32,qTy))),
7478                                                     Apply
7479                                                       (Call
7480                                                          ("write'MemA",
7481                                                           ATy(qTy,qTy),
7482                                                           TP[ITE(Apply
7483                                                                    (Call
7484                                                                       ("BigEndian",
7485                                                                        ATy(qTy,
7486                                                                            bTy),
7487                                                                        LU),
7488                                                                     Mop(Snd,
7489                                                                         Var("state",
7490                                                                             PTy(F32,
7491                                                                                 qTy)))),
7492                                                                  EX(Var("v",
7493                                                                         F64),
7494                                                                     LN 63,
7495                                                                     LN 32,
7496                                                                     F32),
7497                                                                  EX(Var("v",
7498                                                                         F64),
7499                                                                     LN 31,
7500                                                                     LN 0,
7501                                                                     F32)),
7502                                                              Mop(Fst,
7503                                                                  Var("state",
7504                                                                      PTy(F32,
7505                                                                          qTy))),
7506                                                              LN 4]),
7507                                                        Mop(Snd,
7508                                                            Var("state",
7509                                                                PTy(F32,
7510                                                                    qTy))))],
7511                                                  TP[LU,
7512                                                     Bop(Add,
7513                                                         Var("s0",F32),
7514                                                         LW(8,32)),
7515                                                     Apply
7516                                                       (Call
7517                                                          ("write'MemA",
7518                                                           ATy(qTy,qTy),
7519                                                           TP[ITE(Apply
7520                                                                    (Call
7521                                                                       ("BigEndian",
7522                                                                        ATy(qTy,
7523                                                                            bTy),
7524                                                                        LU),
7525                                                                     qVar"s1"),
7526                                                                  EX(Var("v",
7527                                                                         F64),
7528                                                                     LN 31,
7529                                                                     LN 0,
7530                                                                     F32),
7531                                                                  EX(Var("v",
7532                                                                         F64),
7533                                                                     LN 63,
7534                                                                     LN 32,
7535                                                                     F32)),
7536                                                              Bop(Add,
7537                                                                  Var("s0",
7538                                                                      F32),
7539                                                                  LW(4,32)),
7540                                                              LN 4]),
7541                                                        qVar"s1")])))))]),
7542                         TP[Var("v",F32),qVar"s"])),
7543                  Apply
7544                    (Call("IncPC",ATy(qTy,qTy),LU),
7545                     ITE(bVar"wback",
7546                         Let(TP[Var("v",F32),Var("s",PTy(F32,qTy))],
7547                             ITE(bVar"add",
7548                                 Let(TP[Var("v",F32),Var("s",PTy(F32,qTy))],
7549                                     CS(Apply
7550                                          (Call
7551                                             ("R",ATy(qTy,PTy(F32,qTy)),
7552                                              Var("n",F4)),
7553                                           Mop(Snd,Var("s",PTy(F32,qTy)))),
7554                                        [(TP[Var("v",F32),qVar"s3"],
7555                                          TP[Var("v",F32),
7556                                             Mop(Fst,Var("s",PTy(F32,qTy))),
7557                                             qVar"s3"])]),
7558                                     TP[Bop(Add,Var("v",F32),
7559                                            Var("imm32",F32)),
7560                                        Var("s",PTy(F32,qTy))]),
7561                                 Let(TP[Var("v",F32),Var("s",PTy(F32,qTy))],
7562                                     CS(Apply
7563                                          (Call
7564                                             ("R",ATy(qTy,PTy(F32,qTy)),
7565                                              Var("n",F4)),
7566                                           Mop(Snd,Var("s",PTy(F32,qTy)))),
7567                                        [(TP[Var("v",F32),qVar"s3"],
7568                                          TP[Var("v",F32),
7569                                             Mop(Fst,Var("s",PTy(F32,qTy))),
7570                                             qVar"s3"])]),
7571                                     TP[Bop(Sub,Var("v",F32),
7572                                            Var("imm32",F32)),
7573                                        Var("s",PTy(F32,qTy))])),
7574                             Apply
7575                               (Call
7576                                  ("write'R",ATy(qTy,qTy),
7577                                   TP[Var("v",F32),Var("n",F4)]),
7578                                Mop(Snd,Var("s",PTy(F32,qTy))))),
7579                         Mop(Snd,Var("s",PTy(F32,qTy))))))))))
7580;
7581val dfn'BranchTarget_def = Def
7582  ("dfn'BranchTarget",Var("imm32",F32),
7583   Close
7584     (qVar"state",
7585      Let(TP[Var("v",F32),qVar"s"],
7586          Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
7587          Apply
7588            (Call
7589               ("BranchWritePC",ATy(qTy,qTy),
7590                Bop(Add,Var("v",F32),Var("imm32",F32))),qVar"s"))))
7591;
7592val dfn'BranchExchange_def = Def
7593  ("dfn'BranchExchange",Var("m",F4),
7594   Close
7595     (qVar"state",
7596      Let(TP[Var("v",F32),qVar"s"],
7597          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"),
7598          Apply(Call("BXWritePC",ATy(qTy,qTy),Var("v",F32)),qVar"s"))))
7599;
7600val dfn'BranchLinkExchangeImmediate_def = Def
7601  ("dfn'BranchLinkExchangeImmediate",
7602   TP[Var("targetInstrSet",CTy"InstrSet"),Var("imm32",F32)],
7603   Close
7604     (qVar"state",
7605      Let(qVar"s",
7606          ITE(EQ(Apply
7607                   (Call("CurrentInstrSet",ATy(qTy,CTy"InstrSet"),LU),
7608                    qVar"state"),LC("InstrSet_ARM",CTy"InstrSet")),
7609              Let(TP[Var("v",F32),qVar"s"],
7610                  Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
7611                  Apply
7612                    (Call
7613                       ("write'LR",ATy(qTy,qTy),
7614                        Bop(Sub,Var("v",F32),LW(4,32))),qVar"s")),
7615              Let(TP[Var("v",F32),qVar"s"],
7616                  Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
7617                  Apply
7618                    (Call
7619                       ("write'LR",ATy(qTy,qTy),
7620                        CC[EX(Var("v",F32),LN 31,LN 1,FTy 31),LW(1,1)]),
7621                     qVar"s"))),
7622          Let(TP[Var("v",F32),qVar"s"],
7623              ITE(EQ(Var("targetInstrSet",CTy"InstrSet"),
7624                     LC("InstrSet_ARM",CTy"InstrSet")),
7625                  Let(TP[Var("v",F32),qVar"s"],
7626                      Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"),
7627                      TP[Bop(Add,Call("Align",F32,TP[Var("v",F32),LN 4]),
7628                             Var("imm32",F32)),qVar"s"]),
7629                  Let(TP[Var("v",F32),qVar"s"],
7630                      Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"),
7631                      TP[Bop(Add,Var("v",F32),Var("imm32",F32)),qVar"s"])),
7632              Apply
7633                (Call("BranchWritePC",ATy(qTy,qTy),Var("v",F32)),
7634                 Apply
7635                   (Call
7636                      ("SelectInstrSet",ATy(qTy,qTy),
7637                       Var("targetInstrSet",CTy"InstrSet")),qVar"s"))))))
7638;
7639val dfn'BranchLinkExchangeRegister_def = Def
7640  ("dfn'BranchLinkExchangeRegister",Var("m",F4),
7641   Close
7642     (qVar"state",
7643      Let(TP[Var("v",F32),qVar"s"],
7644          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"),
7645          Apply
7646            (Call("BXWritePC",ATy(qTy,qTy),Var("v",F32)),
7647             ITE(EQ(Apply
7648                      (Call("CurrentInstrSet",ATy(qTy,CTy"InstrSet"),LU),
7649                       qVar"s"),LC("InstrSet_ARM",CTy"InstrSet")),
7650                 Let(TP[Var("v",F32),qVar"s"],
7651                     Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"),
7652                     Apply
7653                       (Call
7654                          ("write'LR",ATy(qTy,qTy),
7655                           Bop(Sub,Var("v",F32),LW(4,32))),qVar"s")),
7656                 Let(TP[Var("v",F32),qVar"s"],
7657                     Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"),
7658                     Apply
7659                       (Call
7660                          ("write'LR",ATy(qTy,qTy),
7661                           CC[EX(Bop(Sub,Var("v",F32),LW(2,32)),LN 31,
7662                                 LN 1,FTy 31),LW(1,1)]),qVar"s")))))))
7663;
7664val dfn'CompareBranch_def = Def
7665  ("dfn'CompareBranch",TP[bVar"nonzero",Var("n",F4),Var("imm32",F32)],
7666   Close
7667     (qVar"state",
7668      Let(TP[Var("v",F32),qVar"s"],
7669          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"),
7670          ITE(Mop(Not,EQ(bVar"nonzero",EQ(Var("v",F32),LW(0,32)))),
7671              Let(TP[Var("v",F32),qVar"s"],
7672                  Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"),
7673                  Apply
7674                    (Call
7675                       ("BranchWritePC",ATy(qTy,qTy),
7676                        Bop(Add,Var("v",F32),Var("imm32",F32))),qVar"s")),
7677              Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"s")))))
7678;
7679val dfn'TableBranchByte_def = Def
7680  ("dfn'TableBranchByte",TP[bVar"is_tbh",Var("m",F4),Var("n",F4)],
7681   Close
7682     (qVar"state",
7683      Let(TP[bVar"v",qVar"s"],
7684          Apply
7685            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
7686             qVar"state"),
7687          ITE(bVar"v",
7688              Let(TP[Var("v",F16),qVar"s"],
7689                  ITE(bVar"is_tbh",
7690                      Let(TP[Var("v",F32),qVar"s"],
7691                          Apply
7692                            (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
7693                             qVar"s"),
7694                          Let(TP[Var("v",PTy(F32,nTy)),qVar"s"],
7695                              Let(TP[Var("v",F32),qVar"s"],
7696                                  Let(TP[Var("v0",F32),qVar"s"],
7697                                      Apply
7698                                        (Call
7699                                           ("R",ATy(qTy,PTy(F32,qTy)),
7700                                            Var("m",F4)),qVar"s"),
7701                                      Let(TP[Var("v0",F32),qVar"s"],
7702                                          Apply
7703                                            (Call
7704                                               ("LSL",
7705                                                ATy(qTy,PTy(F32,qTy)),
7706                                                TP[Var("v0",F32),LN 1]),
7707                                             qVar"s"),
7708                                          TP[Bop(Add,Var("v",F32),
7709                                                 Var("v0",F32)),qVar"s"])),
7710                                  TP[TP[Var("v",F32),LN 2],qVar"s"]),
7711                              Apply
7712                                (Call
7713                                   ("MemU",ATy(qTy,PTy(F16,qTy)),
7714                                    Var("v",PTy(F32,nTy))),qVar"s"))),
7715                      Let(TP[Var("v",F32),qVar"s"],
7716                          Apply
7717                            (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
7718                             qVar"s"),
7719                          Let(TP[Var("v",PTy(F32,nTy)),qVar"s"],
7720                              Let(TP[Var("v",F32),qVar"s"],
7721                                  Let(TP[Var("v0",F32),qVar"s"],
7722                                      Apply
7723                                        (Call
7724                                           ("R",ATy(qTy,PTy(F32,qTy)),
7725                                            Var("m",F4)),qVar"s"),
7726                                      TP[Bop(Add,Var("v",F32),
7727                                             Var("v0",F32)),qVar"s"]),
7728                                  TP[TP[Var("v",F32),LN 1],qVar"s"]),
7729                              Apply
7730                                (Call
7731                                   ("MemU",ATy(qTy,PTy(F16,qTy)),
7732                                    Var("v",PTy(F32,nTy))),qVar"s")))),
7733                  Let(TP[Var("v0",F32),qVar"s"],
7734                      Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"),
7735                      Apply
7736                        (Call
7737                           ("BranchWritePC",ATy(qTy,qTy),
7738                            Bop(Add,Var("v0",F32),
7739                                Bop(Mul,LW(2,32),
7740                                    Mop(Cast F32,Var("v",F16))))),qVar"s"))),
7741              qVar"s"))))
7742;
7743val dfn'CheckArray_def = Def
7744  ("dfn'CheckArray",TP[Var("m",F4),Var("n",F4)],
7745   Close
7746     (qVar"state",
7747      Let(TP[Var("v",F32),qVar"s"],
7748          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"),
7749          Let(TP[bVar"v",qVar"s"],
7750              Let(TP[Var("v0",F32),qVar"s"],
7751                  Apply
7752                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"),
7753                  TP[Bop(Ule,Var("v",F32),Var("v0",F32)),qVar"s"]),
7754              ITE(bVar"v",
7755                  Let(TP[Var("v",F32),qVar"s"],
7756                      Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"),
7757                      Let(qVar"s",
7758                          Apply
7759                            (Call("write'ITSTATE",ATy(qTy,qTy),LW(0,8)),
7760                             Apply
7761                               (Call
7762                                  ("write'LR",ATy(qTy,qTy),
7763                                   CC[EX(Var("v",F32),LN 31,LN 1,FTy 31),
7764                                      LW(1,1)]),qVar"s")),
7765                          Apply
7766                            (Call
7767                               ("BranchWritePC",ATy(qTy,qTy),
7768                                Bop(Sub,
7769                                    Dest
7770                                      ("TEEHBR",F32,
7771                                       Dest("CP14",CTy"CP14",qVar"s")),
7772                                    LW(8,32))),qVar"s"))),
7773                  Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"s"))))))
7774;
7775val dfn'HandlerBranchLink_def = Def
7776  ("dfn'HandlerBranchLink",
7777   TP[bVar"generate_link",Var("handler_offset",F32)],
7778   Close
7779     (qVar"state",
7780      Let(qVar"s",
7781          ITE(bVar"generate_link",
7782              Let(TP[Var("v",F32),qVar"s"],
7783                  Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
7784                  Apply
7785                    (Call
7786                       ("write'LR",ATy(qTy,qTy),
7787                        CC[EX(Bop(Sub,Var("v",F32),LW(2,32)),LN 31,LN 1,
7788                              FTy 31),LW(1,1)]),qVar"s")),qVar"state"),
7789          Apply
7790            (Call
7791               ("BranchWritePC",ATy(qTy,qTy),
7792                Bop(Add,Dest("TEEHBR",F32,Dest("CP14",CTy"CP14",qVar"s")),
7793                    Var("handler_offset",F32))),qVar"s"))))
7794;
7795val dfn'HandlerBranchLinkParameter_def = Def
7796  ("dfn'HandlerBranchLinkParameter",
7797   TP[Var("imm32",F32),Var("handler_offset",F32)],
7798   Close
7799     (qVar"state",
7800      Let(TP[Var("v",F32),qVar"s"],
7801          Apply
7802            (Const("PC",ATy(qTy,PTy(F32,qTy))),
7803             Apply
7804               (Call("write'R",ATy(qTy,qTy),TP[Var("imm32",F32),LW(8,4)]),
7805                qVar"state")),
7806          Let(qVar"s",
7807              Apply
7808                (Call
7809                   ("write'LR",ATy(qTy,qTy),
7810                    CC[EX(Bop(Sub,Var("v",F32),LW(2,32)),LN 31,LN 1,FTy 31),
7811                       LW(1,1)]),qVar"s"),
7812              Apply
7813                (Call
7814                   ("BranchWritePC",ATy(qTy,qTy),
7815                    Bop(Add,
7816                        Dest("TEEHBR",F32,Dest("CP14",CTy"CP14",qVar"s")),
7817                        Var("handler_offset",F32))),qVar"s")))))
7818;
7819val dfn'HandlerBranchParameter_def = Def
7820  ("dfn'HandlerBranchParameter",
7821   TP[Var("imm32",F32),Var("handler_offset",F32)],
7822   Close
7823     (qVar"state",
7824      Let(qVar"s",
7825          Apply
7826            (Call("write'R",ATy(qTy,qTy),TP[Var("imm32",F32),LW(8,4)]),
7827             qVar"state"),
7828          Apply
7829            (Call
7830               ("BranchWritePC",ATy(qTy,qTy),
7831                Bop(Add,Dest("TEEHBR",F32,Dest("CP14",CTy"CP14",qVar"s")),
7832                    Var("handler_offset",F32))),qVar"s"))))
7833;
7834val dfn'EnterxLeavex_def = Def
7835  ("dfn'EnterxLeavex",bVar"is_enterx",
7836   Close
7837     (qVar"state",
7838      ITE(bVar"is_enterx",
7839          Let(TP[bVar"v",qVar"s"],
7840              Apply
7841                (Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),
7842                 qVar"state"),
7843              ITE(bVar"v",
7844                  Apply
7845                    (Call("TakeUndefInstrException",ATy(qTy,qTy),LU),
7846                     qVar"s"),
7847                  Apply
7848                    (Call("IncPC",ATy(qTy,qTy),LU),
7849                     Apply
7850                       (Call
7851                          ("SelectInstrSet",ATy(qTy,qTy),
7852                           LC("InstrSet_ThumbEE",CTy"InstrSet")),qVar"s")))),
7853          Apply
7854            (Call("IncPC",ATy(qTy,qTy),LU),
7855             Apply
7856               (Call
7857                  ("SelectInstrSet",ATy(qTy,qTy),
7858                   LC("InstrSet_Thumb",CTy"InstrSet")),qVar"state")))))
7859;
7860val dfn'IfThen_def = Def
7861  ("dfn'IfThen",TP[Var("firstcond",F4),Var("mask",F4)],
7862   Close
7863     (qVar"state",
7864      Rupd
7865        ("Encoding",
7866         TP[Apply
7867              (Call("IncPC",ATy(qTy,qTy),LU),
7868               Rupd
7869                 ("CPSR",
7870                  TP[qVar"state",
7871                     Rupd
7872                       ("IT",
7873                        TP[Dest("CPSR",CTy"PSR",qVar"state"),
7874                           CC[Var("firstcond",F4),Var("mask",F4)]])])),
7875            LC("Encoding_ARM",CTy"Encoding")])))
7876;
7877val dfn'CountLeadingZeroes_def = Def
7878  ("dfn'CountLeadingZeroes",TP[Var("d",F4),Var("m",F4)],
7879   Close
7880     (qVar"state",
7881      Let(TP[Var("v",F32),qVar"s"],
7882          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"),
7883          Apply
7884            (Call("IncPC",ATy(qTy,qTy),LU),
7885             Apply
7886               (Call
7887                  ("write'R",ATy(qTy,qTy),
7888                   TP[Mop(Cast F32,
7889                          Call("CountLeadingZeroBits",nTy,Var("v",F32))),
7890                      Var("d",F4)]),qVar"s")))))
7891;
7892val dfn'MoveHalfword_def = Def
7893  ("dfn'MoveHalfword",TP[bVar"high",Var("d",F4),Var("imm16",F16)],
7894   Close
7895     (qVar"state",
7896      Apply
7897        (Call("IncPC",ATy(qTy,qTy),LU),
7898         ITE(bVar"high",
7899             Let(TP[Var("v",F32),qVar"s"],
7900                 Apply
7901                   (Call("R",ATy(qTy,PTy(F32,qTy)),Var("d",F4)),
7902                    qVar"state"),
7903                 Apply
7904                   (Call
7905                      ("write'R",ATy(qTy,qTy),
7906                       TP[BFI(LN 31,LN 16,Var("imm16",F16),Var("v",F32)),
7907                          Var("d",F4)]),qVar"s")),
7908             Apply
7909               (Call
7910                  ("write'R",ATy(qTy,qTy),
7911                   TP[Mop(Cast F32,Var("imm16",F16)),Var("d",F4)]),
7912                qVar"state")))))
7913;
7914val DataProcessing_def = Def
7915  ("DataProcessing",
7916   TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),
7917      Var("imm32",F32),bVar"C"],
7918   Close
7919     (qVar"state",
7920      Let(TP[Var("v",F32),qVar"s"],
7921          ITB([(Bop(Or,EQ(Var("opc",F4),LW(13,4)),
7922                    Bop(And,EQ(Var("opc",F4),LW(15,4)),
7923                        EQ(Var("n",F4),LW(15,4)))),
7924                TP[LW(0,32),qVar"state"]),
7925               (Bop(And,Bop(In,Var("opc",F4),SL[LW(4,4),LW(2,4)]),
7926                    Bop(And,EQ(Var("n",F4),LW(15,4)),
7927                        Mop(Not,bVar"setflags"))),
7928                Let(TP[Var("v",F32),qVar"s"],
7929                    Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
7930                    TP[Call("Align",F32,TP[Var("v",F32),LN 4]),qVar"s"]))],
7931              Apply
7932                (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state")),
7933          Let(TP[Var("result",F32),bVar"carry",bVar"overflow"],
7934              Call
7935                ("DataProcessingALU",PTy(F32,PTy(bTy,bTy)),
7936                 TP[Var("opc",F4),Var("v",F32),Var("imm32",F32),
7937                    Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"s"))]),
7938              Let(qVar"s",
7939                  ITE(Mop(Not,
7940                          EQ(EX(Var("opc",F4),LN 3,LN 2,FTy 2),LW(2,2))),
7941                      Apply
7942                        (Call
7943                           ("write'R",ATy(qTy,qTy),
7944                            TP[Var("result",F32),Var("d",F4)]),qVar"s"),
7945                      qVar"s"),
7946                  Apply
7947                    (Call("IncPC",ATy(qTy,qTy),LU),
7948                     ITE(bVar"setflags",
7949                         Let(qVar"s",
7950                             Rupd
7951                               ("CPSR",
7952                                TP[qVar"s",
7953                                   Rupd
7954                                     ("N",
7955                                      TP[Dest("CPSR",CTy"PSR",qVar"s"),
7956                                         Bop(Bit,Var("result",F32),LN 31)])]),
7957                             Let(qVar"s",
7958                                 Rupd
7959                                   ("CPSR",
7960                                    TP[qVar"s",
7961                                       Rupd
7962                                         ("Z",
7963                                          TP[Dest("CPSR",CTy"PSR",qVar"s"),
7964                                             EQ(Var("result",F32),LW(0,32))])]),
7965                                 ITE(Call
7966                                       ("ArithmeticOpcode",bTy,
7967                                        Var("opc",F4)),
7968                                     Let(qVar"s",
7969                                         Rupd
7970                                           ("CPSR",
7971                                            TP[qVar"s",
7972                                               Rupd
7973                                                 ("C",
7974                                                  TP[Dest
7975                                                       ("CPSR",CTy"PSR",
7976                                                        qVar"s"),
7977                                                     bVar"carry"])]),
7978                                         Rupd
7979                                           ("CPSR",
7980                                            TP[qVar"s",
7981                                               Rupd
7982                                                 ("V",
7983                                                  TP[Dest
7984                                                       ("CPSR",CTy"PSR",
7985                                                        qVar"s"),
7986                                                     bVar"overflow"])])),
7987                                     Rupd
7988                                       ("CPSR",
7989                                        TP[qVar"s",
7990                                           Rupd
7991                                             ("C",
7992                                              TP[Dest
7993                                                   ("CPSR",CTy"PSR",
7994                                                    qVar"s"),bVar"C"])])))),
7995                         qVar"s")))))))
7996;
7997val DataProcessingPC_def = Def
7998  ("DataProcessingPC",
7999   TP[Var("opc",F4),bVar"setflags",Var("n",F4),Var("imm32",F32)],
8000   Close
8001     (qVar"state",
8002      Let(TP[Var("v",F32),qVar"s"],
8003          ITB([(Bop(Or,EQ(Var("opc",F4),LW(13,4)),
8004                    Bop(And,EQ(Var("opc",F4),LW(15,4)),
8005                        EQ(Var("n",F4),LW(15,4)))),
8006                TP[LW(0,32),qVar"state"]),
8007               (Bop(And,Bop(In,Var("opc",F4),SL[LW(4,4),LW(2,4)]),
8008                    Bop(And,EQ(Var("n",F4),LW(15,4)),
8009                        Mop(Not,bVar"setflags"))),
8010                Let(TP[Var("v",F32),qVar"s"],
8011                    Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"state"),
8012                    TP[Call("Align",F32,TP[Var("v",F32),LN 4]),qVar"s"]))],
8013              Apply
8014                (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state")),
8015          Let(TP[Var("result",F32),AVar bTy,AVar bTy],
8016              Call
8017                ("DataProcessingALU",PTy(F32,PTy(bTy,bTy)),
8018                 TP[Var("opc",F4),Var("v",F32),Var("imm32",F32),
8019                    Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"s"))]),
8020              ITE(bVar"setflags",
8021                  Let(TP[bVar"v",qVar"s"],
8022                      Apply
8023                        (Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),
8024                         qVar"s"),
8025                      ITE(bVar"v",
8026                          Apply
8027                            (Call
8028                               ("TakeUndefInstrException",ATy(qTy,qTy),LU),
8029                             qVar"s"),
8030                          Let(TP[bVar"v",qVar"s"],
8031                              Apply
8032                                (Call
8033                                   ("CurrentModeIsUserOrSystem",
8034                                    ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"),
8035                              ITE(bVar"v",
8036                                  Mop(Snd,
8037                                      Apply
8038                                        (Call
8039                                           ("raise'exception",
8040                                            ATy(qTy,PTy(uTy,qTy)),
8041                                            Call
8042                                              ("UNPREDICTABLE",
8043                                               CTy"exception",
8044                                               LS"DataProcessingPC")),
8045                                         qVar"s")),
8046                                  Let(TP[Var("v",CTy"PSR"),qVar"s"],
8047                                      Apply
8048                                        (Const
8049                                           ("SPSR",
8050                                            ATy(qTy,PTy(CTy"PSR",qTy))),
8051                                         qVar"s"),
8052                                      Let(qVar"s",
8053                                          Apply
8054                                            (Call
8055                                               ("CPSRWriteByInstr",
8056                                                ATy(qTy,qTy),
8057                                                TP[Call
8058                                                     ("reg'PSR",F32,
8059                                                      Var("v",CTy"PSR")),
8060                                                   LW(15,4),LT]),qVar"s"),
8061                                          ITE(Bop(And,
8062                                                  EQ(Dest
8063                                                       ("M",FTy 5,
8064                                                        Dest
8065                                                          ("CPSR",
8066                                                           CTy"PSR",
8067                                                           qVar"s")),
8068                                                     LW(26,5)),
8069                                                  EQ(Apply
8070                                                       (Call
8071                                                          ("CurrentInstrSet",
8072                                                           ATy(qTy,
8073                                                               CTy"InstrSet"),
8074                                                           LU),qVar"s"),
8075                                                     LC("InstrSet_ThumbEE",
8076                                                        CTy"InstrSet"))),
8077                                              Mop(Snd,
8078                                                  Apply
8079                                                    (Call
8080                                                       ("raise'exception",
8081                                                        ATy(qTy,
8082                                                            PTy(uTy,qTy)),
8083                                                        Call
8084                                                          ("UNPREDICTABLE",
8085                                                           CTy"exception",
8086                                                           LS
8087                                                            "DataProcessingPC")),
8088                                                     qVar"s")),
8089                                              Apply
8090                                                (Call
8091                                                   ("BranchWritePC",
8092                                                    ATy(qTy,qTy),
8093                                                    Var("result",F32)),
8094                                                 qVar"s")))))))),
8095                  Apply
8096                    (Call("ALUWritePC",ATy(qTy,qTy),Var("result",F32)),
8097                     qVar"s"))))))
8098;
8099val dfn'Move_def = Def
8100  ("dfn'Move",
8101   TP[bVar"setflags",bVar"negate",Var("d",F4),Var("imm12",FTy 12)],
8102   Close
8103     (qVar"state",
8104      Let(Var("opc",F4),CC[LW(3,2),Mop(Cast F1,bVar"negate"),LW(1,1)],
8105          Let(TP[Var("v",PTy(F32,bTy)),qVar"s"],
8106              Apply
8107                (Call
8108                   ("ExpandImm_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
8109                    TP[Var("imm12",FTy 12),
8110                       Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"state"))]),
8111                 qVar"state"),
8112              Let(TP[Var("imm32",F32),bVar"carry"],Var("v",PTy(F32,bTy)),
8113                  ITE(EQ(Var("d",F4),LW(15,4)),
8114                      Apply
8115                        (Call
8116                           ("DataProcessingPC",ATy(qTy,qTy),
8117                            TP[Var("opc",F4),bVar"setflags",LW(15,4),
8118                               Var("imm32",F32)]),qVar"s"),
8119                      Apply
8120                        (Call
8121                           ("DataProcessing",ATy(qTy,qTy),
8122                            TP[Var("opc",F4),bVar"setflags",Var("d",F4),
8123                               LW(15,4),Var("imm32",F32),bVar"carry"]),
8124                         qVar"s")))))))
8125;
8126val dfn'TestCompareImmediate_def = Def
8127  ("dfn'TestCompareImmediate",
8128   TP[Var("op",FTy 2),Var("n",F4),Var("imm12",FTy 12)],
8129   Close
8130     (qVar"state",
8131      Let(TP[Var("v",PTy(F32,bTy)),qVar"s"],
8132          Apply
8133            (Call
8134               ("ExpandImm_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
8135                TP[Var("imm12",FTy 12),
8136                   Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"state"))]),
8137             qVar"state"),
8138          Let(TP[Var("imm32",F32),bVar"carry"],Var("v",PTy(F32,bTy)),
8139              Apply
8140                (Call
8141                   ("DataProcessing",ATy(qTy,qTy),
8142                    TP[CC[LW(2,2),Var("op",FTy 2)],LT,LX F4,Var("n",F4),
8143                       Var("imm32",F32),bVar"carry"]),qVar"s")))))
8144;
8145val dfn'ArithLogicImmediate_def = Def
8146  ("dfn'ArithLogicImmediate",
8147   TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),
8148      Var("imm12",FTy 12)],
8149   Close
8150     (qVar"state",
8151      Let(TP[Var("v",PTy(F32,bTy)),qVar"s"],
8152          Apply
8153            (Call
8154               ("ExpandImm_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
8155                TP[Var("imm12",FTy 12),
8156                   Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"state"))]),
8157             qVar"state"),
8158          Let(TP[Var("imm32",F32),bVar"carry"],Var("v",PTy(F32,bTy)),
8159              ITE(EQ(Var("d",F4),LW(15,4)),
8160                  Apply
8161                    (Call
8162                       ("DataProcessingPC",ATy(qTy,qTy),
8163                        TP[Var("opc",F4),bVar"setflags",Var("n",F4),
8164                           Var("imm32",F32)]),qVar"s"),
8165                  Apply
8166                    (Call
8167                       ("DataProcessing",ATy(qTy,qTy),
8168                        TP[Var("opc",F4),bVar"setflags",Var("d",F4),
8169                           Var("n",F4),Var("imm32",F32),bVar"carry"]),
8170                     qVar"s"))))))
8171;
8172val doRegister_def = Def
8173  ("doRegister",
8174   TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),Var("m",F4),
8175      Var("shift_t",CTy"SRType"),nVar"shift_n"],
8176   Close
8177     (qVar"state",
8178      Let(TP[Var("v",F32),qVar"s"],
8179          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"),
8180          Let(TP[Var("v",PTy(F32,bTy)),qVar"s"],
8181              Apply
8182                (Call
8183                   ("Shift_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
8184                    TP[Var("v",F32),Var("shift_t",CTy"SRType"),
8185                       nVar"shift_n",
8186                       Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"s"))]),
8187                 qVar"s"),
8188              Let(TP[Var("shifted",F32),bVar"carry"],
8189                  Var("v",PTy(F32,bTy)),
8190                  ITE(EQ(Var("d",F4),LW(15,4)),
8191                      Apply
8192                        (Call
8193                           ("DataProcessingPC",ATy(qTy,qTy),
8194                            TP[Var("opc",F4),bVar"setflags",Var("n",F4),
8195                               Var("shifted",F32)]),qVar"s"),
8196                      Apply
8197                        (Call
8198                           ("DataProcessing",ATy(qTy,qTy),
8199                            TP[Var("opc",F4),bVar"setflags",Var("d",F4),
8200                               Var("n",F4),Var("shifted",F32),bVar"carry"]),
8201                         qVar"s")))))))
8202;
8203val dfn'Register_def = Def
8204  ("dfn'Register",
8205   TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),Var("m",F4),
8206      Var("shift_t",CTy"SRType"),nVar"shift_n"],
8207   Close
8208     (qVar"state",
8209      Apply
8210        (Call
8211           ("doRegister",ATy(qTy,qTy),
8212            TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),
8213               Var("m",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"]),
8214         qVar"state")))
8215;
8216val dfn'TestCompareRegister_def = Def
8217  ("dfn'TestCompareRegister",
8218   TP[Var("opc",FTy 2),Var("n",F4),Var("m",F4),Var("shift_t",CTy"SRType"),
8219      nVar"shift_n"],
8220   Close
8221     (qVar"state",
8222      Apply
8223        (Call
8224           ("doRegister",ATy(qTy,qTy),
8225            TP[CC[LW(2,2),Var("opc",FTy 2)],LT,LW(0,4),Var("n",F4),
8226               Var("m",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"]),
8227         qVar"state")))
8228;
8229val dfn'ShiftImmediate_def = Def
8230  ("dfn'ShiftImmediate",
8231   TP[bVar"negate",bVar"setflags",Var("d",F4),Var("m",F4),
8232      Var("shift_t",CTy"SRType"),nVar"shift_n"],
8233   Close
8234     (qVar"state",
8235      ITE(bVar"negate",
8236          Apply
8237            (Call
8238               ("doRegister",ATy(qTy,qTy),
8239                TP[LW(15,4),bVar"setflags",Var("d",F4),LW(15,4),
8240                   Var("m",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"]),
8241             qVar"state"),
8242          Apply
8243            (Call
8244               ("doRegister",ATy(qTy,qTy),
8245                TP[LW(13,4),bVar"setflags",Var("d",F4),LX F4,Var("m",F4),
8246                   Var("shift_t",CTy"SRType"),nVar"shift_n"]),qVar"state"))))
8247;
8248val doRegisterShiftedRegister_def = Def
8249  ("doRegisterShiftedRegister",
8250   TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),Var("m",F4),
8251      Var("shift_t",CTy"SRType"),Var("s",F4)],
8252   Close
8253     (qVar"state",
8254      Let(TP[Var("v",F32),qVar"s0"],
8255          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"),
8256          Let(TP[Var("v",PTy(F32,bTy)),qVar"s"],
8257              Let(TP[Var("v",PTy(F32,PTy(CTy"SRType",PTy(nTy,bTy)))),
8258                     qVar"s"],
8259                  Let(TP[Var("v0",F32),qVar"s"],
8260                      Apply
8261                        (Call("R",ATy(qTy,PTy(F32,qTy)),Var("s",F4)),
8262                         qVar"s0"),
8263                      TP[TP[Var("v",F32),Var("shift_t",CTy"SRType"),
8264                            Mop(Cast nTy,EX(Var("v0",F32),LN 7,LN 0,F8)),
8265                            Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"s"))],
8266                         qVar"s"]),
8267                  Apply
8268                    (Call
8269                       ("Shift_C",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
8270                        Var("v",PTy(F32,PTy(CTy"SRType",PTy(nTy,bTy))))),
8271                     qVar"s")),
8272              Let(TP[Var("shifted",F32),bVar"carry"],
8273                  Var("v",PTy(F32,bTy)),
8274                  Apply
8275                    (Call
8276                       ("DataProcessing",ATy(qTy,qTy),
8277                        TP[Var("opc",F4),bVar"setflags",Var("d",F4),
8278                           Var("n",F4),Var("shifted",F32),bVar"carry"]),
8279                     qVar"s"))))))
8280;
8281val dfn'RegisterShiftedRegister_def = Def
8282  ("dfn'RegisterShiftedRegister",
8283   TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),Var("m",F4),
8284      Var("shift_t",CTy"SRType"),Var("s",F4)],
8285   Close
8286     (qVar"state",
8287      Apply
8288        (Call
8289           ("doRegisterShiftedRegister",ATy(qTy,qTy),
8290            TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),
8291               Var("m",F4),Var("shift_t",CTy"SRType"),Var("s",F4)]),
8292         qVar"state")))
8293;
8294val dfn'ShiftRegister_def = Def
8295  ("dfn'ShiftRegister",
8296   TP[bVar"negate",bVar"setflags",Var("d",F4),Var("n",F4),
8297      Var("shift_t",CTy"SRType"),Var("m",F4)],
8298   Close
8299     (qVar"state",
8300      ITE(bVar"negate",
8301          Apply
8302            (Call
8303               ("doRegisterShiftedRegister",ATy(qTy,qTy),
8304                TP[LW(15,4),bVar"setflags",Var("d",F4),LW(15,4),
8305                   Var("n",F4),Var("shift_t",CTy"SRType"),Var("m",F4)]),
8306             qVar"state"),
8307          Apply
8308            (Call
8309               ("doRegisterShiftedRegister",ATy(qTy,qTy),
8310                TP[LW(13,4),bVar"setflags",Var("d",F4),LX F4,Var("n",F4),
8311                   Var("shift_t",CTy"SRType"),Var("m",F4)]),qVar"state"))))
8312;
8313val dfn'AddSub_def = Def
8314  ("dfn'AddSub",TP[bVar"sub",Var("d",F4),Var("n",F4),Var("imm12",FTy 12)],
8315   Close
8316     (qVar"state",
8317      Apply
8318        (Call
8319           ("DataProcessing",ATy(qTy,qTy),
8320            TP[ITE(bVar"sub",LW(2,4),LW(4,4)),LF,Var("d",F4),Var("n",F4),
8321               Mop(Cast F32,Var("imm12",FTy 12)),LX bTy]),qVar"state")))
8322;
8323val dfn'SaturatingAddSubtract_def = Def
8324  ("dfn'SaturatingAddSubtract",
8325   TP[Var("opc",FTy 2),Var("d",F4),Var("m",F4),Var("n",F4)],
8326   Close
8327     (qVar"state",
8328      Let(Var("s",PTy(bTy,PTy(F32,qTy))),
8329          CS(Var("opc",FTy 2),
8330             [(LW(0,2),
8331               Let(TP[Var("v",F32),Var("s",PTy(bTy,PTy(F32,qTy)))],
8332                   Let(TP[Var("v",F32),Var("s3",PTy(F32,qTy))],
8333                       Let(TP[Var("v",F32),qVar"s3"],
8334                           Apply
8335                             (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
8336                              qVar"state"),
8337                           TP[Var("v",F32),LX F32,qVar"s3"]),
8338                       TP[Var("v",F32),LX bTy,Var("s3",PTy(F32,qTy))]),
8339                   Let(TP[Var("v",PTy(F32,bTy)),
8340                          Var("s",PTy(bTy,PTy(F32,qTy)))],
8341                       Let(TP[Var("v",PTy(iTy,nTy)),
8342                              Var("s",PTy(bTy,PTy(F32,qTy)))],
8343                           Let(TP[iVar"v",Var("s",PTy(bTy,PTy(F32,qTy)))],
8344                               Let(TP[Var("v0",F32),
8345                                      Var("s",PTy(bTy,PTy(F32,qTy)))],
8346                                   Let(TP[Var("v",F32),
8347                                          Var("s3",PTy(F32,qTy))],
8348                                       Let(TP[Var("v",F32),qVar"s3"],
8349                                           Apply
8350                                             (Call
8351                                                ("R",
8352                                                 ATy(qTy,PTy(F32,qTy)),
8353                                                 Var("n",F4)),
8354                                              Mop(Snd,
8355                                                  Mop(Snd,
8356                                                      Var("s",
8357                                                          PTy(bTy,
8358                                                              PTy(F32,qTy)))))),
8359                                           TP[Var("v",F32),
8360                                              Mop(Fst,
8361                                                  Mop(Snd,
8362                                                      Var("s",
8363                                                          PTy(bTy,
8364                                                              PTy(F32,qTy))))),
8365                                              qVar"s3"]),
8366                                       TP[Var("v",F32),
8367                                          Mop(Fst,
8368                                              Var("s",
8369                                                  PTy(bTy,PTy(F32,qTy)))),
8370                                          Var("s3",PTy(F32,qTy))]),
8371                                   TP[Bop(Add,Mop(Cast iTy,Var("v",F32)),
8372                                          Mop(Cast iTy,Var("v0",F32))),
8373                                      Var("s",PTy(bTy,PTy(F32,qTy)))]),
8374                               TP[TP[iVar"v",LN 32],
8375                                  Var("s",PTy(bTy,PTy(F32,qTy)))]),
8376                           Let(TP[Var("v",PTy(F32,bTy)),
8377                                  Var("s3",PTy(F32,qTy))],
8378                               Let(TP[Var("v",PTy(F32,bTy)),qVar"s3"],
8379                                   Apply
8380                                     (Call
8381                                        ("SignedSatQ",
8382                                         ATy(qTy,PTy(PTy(F32,bTy),qTy)),
8383                                         Var("v",PTy(iTy,nTy))),
8384                                      Mop(Snd,
8385                                          Mop(Snd,
8386                                              Var("s",
8387                                                  PTy(bTy,PTy(F32,qTy)))))),
8388                                   TP[Var("v",PTy(F32,bTy)),
8389                                      Mop(Fst,
8390                                          Mop(Snd,
8391                                              Var("s",
8392                                                  PTy(bTy,PTy(F32,qTy))))),
8393                                      qVar"s3"]),
8394                               TP[Var("v",PTy(F32,bTy)),
8395                                  Mop(Fst,Var("s",PTy(bTy,PTy(F32,qTy)))),
8396                                  Var("s3",PTy(F32,qTy))])),
8397                       Let(TP[Var("r",F32),bVar"s0"],
8398                           Var("v",PTy(F32,bTy)),
8399                           TP[bVar"s0",Var("r",F32),
8400                              Mop(Snd,
8401                                  Mop(Snd,Var("s",PTy(bTy,PTy(F32,qTy)))))])))),
8402              (LW(1,2),
8403               Let(TP[Var("v",F32),Var("s",PTy(bTy,PTy(F32,qTy)))],
8404                   Let(TP[Var("v",F32),Var("s3",PTy(F32,qTy))],
8405                       Let(TP[Var("v",F32),qVar"s3"],
8406                           Apply
8407                             (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
8408                              qVar"state"),
8409                           TP[Var("v",F32),LX F32,qVar"s3"]),
8410                       TP[Var("v",F32),LX bTy,Var("s3",PTy(F32,qTy))]),
8411                   Let(TP[Var("v",PTy(F32,bTy)),
8412                          Var("s",PTy(bTy,PTy(F32,qTy)))],
8413                       Let(TP[Var("v",PTy(iTy,nTy)),
8414                              Var("s",PTy(bTy,PTy(F32,qTy)))],
8415                           Let(TP[iVar"v",Var("s",PTy(bTy,PTy(F32,qTy)))],
8416                               Let(TP[Var("v0",F32),
8417                                      Var("s",PTy(bTy,PTy(F32,qTy)))],
8418                                   Let(TP[Var("v",F32),
8419                                          Var("s3",PTy(F32,qTy))],
8420                                       Let(TP[Var("v",F32),qVar"s3"],
8421                                           Apply
8422                                             (Call
8423                                                ("R",
8424                                                 ATy(qTy,PTy(F32,qTy)),
8425                                                 Var("n",F4)),
8426                                              Mop(Snd,
8427                                                  Mop(Snd,
8428                                                      Var("s",
8429                                                          PTy(bTy,
8430                                                              PTy(F32,qTy)))))),
8431                                           TP[Var("v",F32),
8432                                              Mop(Fst,
8433                                                  Mop(Snd,
8434                                                      Var("s",
8435                                                          PTy(bTy,
8436                                                              PTy(F32,qTy))))),
8437                                              qVar"s3"]),
8438                                       TP[Var("v",F32),
8439                                          Mop(Fst,
8440                                              Var("s",
8441                                                  PTy(bTy,PTy(F32,qTy)))),
8442                                          Var("s3",PTy(F32,qTy))]),
8443                                   TP[Bop(Sub,Mop(Cast iTy,Var("v",F32)),
8444                                          Mop(Cast iTy,Var("v0",F32))),
8445                                      Var("s",PTy(bTy,PTy(F32,qTy)))]),
8446                               TP[TP[iVar"v",LN 32],
8447                                  Var("s",PTy(bTy,PTy(F32,qTy)))]),
8448                           Let(TP[Var("v",PTy(F32,bTy)),
8449                                  Var("s3",PTy(F32,qTy))],
8450                               Let(TP[Var("v",PTy(F32,bTy)),qVar"s3"],
8451                                   Apply
8452                                     (Call
8453                                        ("SignedSatQ",
8454                                         ATy(qTy,PTy(PTy(F32,bTy),qTy)),
8455                                         Var("v",PTy(iTy,nTy))),
8456                                      Mop(Snd,
8457                                          Mop(Snd,
8458                                              Var("s",
8459                                                  PTy(bTy,PTy(F32,qTy)))))),
8460                                   TP[Var("v",PTy(F32,bTy)),
8461                                      Mop(Fst,
8462                                          Mop(Snd,
8463                                              Var("s",
8464                                                  PTy(bTy,PTy(F32,qTy))))),
8465                                      qVar"s3"]),
8466                               TP[Var("v",PTy(F32,bTy)),
8467                                  Mop(Fst,Var("s",PTy(bTy,PTy(F32,qTy)))),
8468                                  Var("s3",PTy(F32,qTy))])),
8469                       Let(TP[Var("r",F32),bVar"s0"],
8470                           Var("v",PTy(F32,bTy)),
8471                           TP[bVar"s0",Var("r",F32),
8472                              Mop(Snd,
8473                                  Mop(Snd,Var("s",PTy(bTy,PTy(F32,qTy)))))])))),
8474              (LW(2,2),
8475               Let(TP[Var("v",F32),Var("s",PTy(bTy,PTy(F32,qTy)))],
8476                   Let(TP[Var("v",F32),Var("s3",PTy(F32,qTy))],
8477                       Let(TP[Var("v",F32),qVar"s3"],
8478                           Apply
8479                             (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
8480                              qVar"state"),
8481                           TP[Var("v",F32),LX F32,qVar"s3"]),
8482                       TP[Var("v",F32),LX bTy,Var("s3",PTy(F32,qTy))]),
8483                   Let(TP[Var("v",PTy(F32,bTy)),
8484                          Var("s",PTy(bTy,PTy(F32,qTy)))],
8485                       Let(TP[Var("v",PTy(F32,bTy)),Var("s3",PTy(F32,qTy))],
8486                           Let(TP[Var("v",PTy(F32,bTy)),qVar"s3"],
8487                               Apply
8488                                 (Call
8489                                    ("SignedSatQ",
8490                                     ATy(qTy,PTy(PTy(F32,bTy),qTy)),
8491                                     TP[Bop(Mul,LI 2,
8492                                            Mop(Cast iTy,Var("v",F32))),
8493                                        LN 32]),
8494                                  Mop(Snd,
8495                                      Mop(Snd,
8496                                          Var("s",PTy(bTy,PTy(F32,qTy)))))),
8497                               TP[Var("v",PTy(F32,bTy)),
8498                                  Mop(Fst,
8499                                      Mop(Snd,
8500                                          Var("s",PTy(bTy,PTy(F32,qTy))))),
8501                                  qVar"s3"]),
8502                           TP[Var("v",PTy(F32,bTy)),
8503                              Mop(Fst,Var("s",PTy(bTy,PTy(F32,qTy)))),
8504                              Var("s3",PTy(F32,qTy))]),
8505                       Let(TP[Var("doubled",F32),bVar"sat1"],
8506                           Var("v",PTy(F32,bTy)),
8507                           Let(TP[Var("v",F32),
8508                                  Var("s",PTy(bTy,PTy(F32,qTy)))],
8509                               Let(TP[Var("v",F32),Var("s3",PTy(F32,qTy))],
8510                                   Let(TP[Var("v",F32),qVar"s3"],
8511                                       Apply
8512                                         (Call
8513                                            ("R",ATy(qTy,PTy(F32,qTy)),
8514                                             Var("m",F4)),
8515                                          Mop(Snd,
8516                                              Mop(Snd,
8517                                                  Var("s",
8518                                                      PTy(bTy,PTy(F32,qTy)))))),
8519                                       TP[Var("v",F32),
8520                                          Mop(Fst,
8521                                              Mop(Snd,
8522                                                  Var("s",
8523                                                      PTy(bTy,PTy(F32,qTy))))),
8524                                          qVar"s3"]),
8525                                   TP[Var("v",F32),
8526                                      Mop(Fst,
8527                                          Var("s",PTy(bTy,PTy(F32,qTy)))),
8528                                      Var("s3",PTy(F32,qTy))]),
8529                               Let(TP[Var("v",PTy(F32,bTy)),
8530                                      Var("s",PTy(bTy,PTy(F32,qTy)))],
8531                                   Let(TP[Var("v",PTy(F32,bTy)),
8532                                          Var("s3",PTy(F32,qTy))],
8533                                       Let(TP[Var("v",PTy(F32,bTy)),
8534                                              qVar"s3"],
8535                                           Apply
8536                                             (Call
8537                                                ("SignedSatQ",
8538                                                 ATy(qTy,
8539                                                     PTy(PTy(F32,bTy),qTy)),
8540                                                 TP[Bop(Add,
8541                                                        Mop(Cast iTy,
8542                                                            Var("v",F32)),
8543                                                        Mop(Cast iTy,
8544                                                            Var("doubled",
8545                                                                F32))),
8546                                                    LN 32]),
8547                                              Mop(Snd,
8548                                                  Mop(Snd,
8549                                                      Var("s",
8550                                                          PTy(bTy,
8551                                                              PTy(F32,qTy)))))),
8552                                           TP[Var("v",PTy(F32,bTy)),
8553                                              Mop(Fst,
8554                                                  Mop(Snd,
8555                                                      Var("s",
8556                                                          PTy(bTy,
8557                                                              PTy(F32,qTy))))),
8558                                              qVar"s3"]),
8559                                       TP[Var("v",PTy(F32,bTy)),
8560                                          Mop(Fst,
8561                                              Var("s",
8562                                                  PTy(bTy,PTy(F32,qTy)))),
8563                                          Var("s3",PTy(F32,qTy))]),
8564                                   Let(TP[Var("r",F32),bVar"sat2"],
8565                                       Var("v",PTy(F32,bTy)),
8566                                       TP[Bop(Or,bVar"sat1",bVar"sat2"),
8567                                          Var("r",F32),
8568                                          Mop(Snd,
8569                                              Mop(Snd,
8570                                                  Var("s",
8571                                                      PTy(bTy,PTy(F32,qTy)))))]))))))),
8572              (LW(3,2),
8573               Let(TP[Var("v",F32),Var("s",PTy(bTy,PTy(F32,qTy)))],
8574                   Let(TP[Var("v",F32),Var("s3",PTy(F32,qTy))],
8575                       Let(TP[Var("v",F32),qVar"s3"],
8576                           Apply
8577                             (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
8578                              qVar"state"),
8579                           TP[Var("v",F32),LX F32,qVar"s3"]),
8580                       TP[Var("v",F32),LX bTy,Var("s3",PTy(F32,qTy))]),
8581                   Let(TP[Var("v",PTy(F32,bTy)),
8582                          Var("s",PTy(bTy,PTy(F32,qTy)))],
8583                       Let(TP[Var("v",PTy(F32,bTy)),Var("s3",PTy(F32,qTy))],
8584                           Let(TP[Var("v",PTy(F32,bTy)),qVar"s3"],
8585                               Apply
8586                                 (Call
8587                                    ("SignedSatQ",
8588                                     ATy(qTy,PTy(PTy(F32,bTy),qTy)),
8589                                     TP[Bop(Mul,LI 2,
8590                                            Mop(Cast iTy,Var("v",F32))),
8591                                        LN 32]),
8592                                  Mop(Snd,
8593                                      Mop(Snd,
8594                                          Var("s",PTy(bTy,PTy(F32,qTy)))))),
8595                               TP[Var("v",PTy(F32,bTy)),
8596                                  Mop(Fst,
8597                                      Mop(Snd,
8598                                          Var("s",PTy(bTy,PTy(F32,qTy))))),
8599                                  qVar"s3"]),
8600                           TP[Var("v",PTy(F32,bTy)),
8601                              Mop(Fst,Var("s",PTy(bTy,PTy(F32,qTy)))),
8602                              Var("s3",PTy(F32,qTy))]),
8603                       Let(TP[Var("doubled",F32),bVar"sat1"],
8604                           Var("v",PTy(F32,bTy)),
8605                           Let(TP[Var("v",F32),
8606                                  Var("s",PTy(bTy,PTy(F32,qTy)))],
8607                               Let(TP[Var("v",F32),Var("s3",PTy(F32,qTy))],
8608                                   Let(TP[Var("v",F32),qVar"s3"],
8609                                       Apply
8610                                         (Call
8611                                            ("R",ATy(qTy,PTy(F32,qTy)),
8612                                             Var("m",F4)),
8613                                          Mop(Snd,
8614                                              Mop(Snd,
8615                                                  Var("s",
8616                                                      PTy(bTy,PTy(F32,qTy)))))),
8617                                       TP[Var("v",F32),
8618                                          Mop(Fst,
8619                                              Mop(Snd,
8620                                                  Var("s",
8621                                                      PTy(bTy,PTy(F32,qTy))))),
8622                                          qVar"s3"]),
8623                                   TP[Var("v",F32),
8624                                      Mop(Fst,
8625                                          Var("s",PTy(bTy,PTy(F32,qTy)))),
8626                                      Var("s3",PTy(F32,qTy))]),
8627                               Let(TP[Var("v",PTy(F32,bTy)),
8628                                      Var("s",PTy(bTy,PTy(F32,qTy)))],
8629                                   Let(TP[Var("v",PTy(F32,bTy)),
8630                                          Var("s3",PTy(F32,qTy))],
8631                                       Let(TP[Var("v",PTy(F32,bTy)),
8632                                              qVar"s3"],
8633                                           Apply
8634                                             (Call
8635                                                ("SignedSatQ",
8636                                                 ATy(qTy,
8637                                                     PTy(PTy(F32,bTy),qTy)),
8638                                                 TP[Bop(Sub,
8639                                                        Mop(Cast iTy,
8640                                                            Var("v",F32)),
8641                                                        Mop(Cast iTy,
8642                                                            Var("doubled",
8643                                                                F32))),
8644                                                    LN 32]),
8645                                              Mop(Snd,
8646                                                  Mop(Snd,
8647                                                      Var("s",
8648                                                          PTy(bTy,
8649                                                              PTy(F32,qTy)))))),
8650                                           TP[Var("v",PTy(F32,bTy)),
8651                                              Mop(Fst,
8652                                                  Mop(Snd,
8653                                                      Var("s",
8654                                                          PTy(bTy,
8655                                                              PTy(F32,qTy))))),
8656                                              qVar"s3"]),
8657                                       TP[Var("v",PTy(F32,bTy)),
8658                                          Mop(Fst,
8659                                              Var("s",
8660                                                  PTy(bTy,PTy(F32,qTy)))),
8661                                          Var("s3",PTy(F32,qTy))]),
8662                                   Let(TP[Var("r",F32),bVar"sat2"],
8663                                       Var("v",PTy(F32,bTy)),
8664                                       TP[Bop(Or,bVar"sat1",bVar"sat2"),
8665                                          Var("r",F32),
8666                                          Mop(Snd,
8667                                              Mop(Snd,
8668                                                  Var("s",
8669                                                      PTy(bTy,PTy(F32,qTy)))))])))))))]),
8670          Let(qVar"s2",
8671              Apply
8672                (Call
8673                   ("write'R",ATy(qTy,qTy),
8674                    TP[Mop(Fst,Mop(Snd,Var("s",PTy(bTy,PTy(F32,qTy))))),
8675                       Var("d",F4)]),
8676                 Mop(Snd,Mop(Snd,Var("s",PTy(bTy,PTy(F32,qTy)))))),
8677              Apply
8678                (Call("IncPC",ATy(qTy,qTy),LU),
8679                 ITE(Mop(Fst,Var("s",PTy(bTy,PTy(F32,qTy)))),
8680                     Rupd
8681                       ("CPSR",
8682                        TP[qVar"s2",
8683                           Rupd("Q",TP[Dest("CPSR",CTy"PSR",qVar"s2"),LT])]),
8684                     qVar"s2"))))))
8685;
8686val dfn'Multiply32_def = Def
8687  ("dfn'Multiply32",
8688   TP[bVar"setflags",Var("d",F4),Var("n",F4),Var("m",F4)],
8689   Close
8690     (qVar"state",
8691      Let(TP[Var("v",F32),qVar"s"],
8692          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"),
8693          Let(TP[Var("v0",F32),qVar"s"],
8694              Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"),
8695              Let(Var("result",F32),Bop(Mul,Var("v",F32),Var("v0",F32)),
8696                  Let(qVar"s",
8697                      Apply
8698                        (Call
8699                           ("write'R",ATy(qTy,qTy),
8700                            TP[Var("result",F32),Var("d",F4)]),qVar"s"),
8701                      Apply
8702                        (Call("IncPC",ATy(qTy,qTy),LU),
8703                         ITE(bVar"setflags",
8704                             Let(qVar"s",
8705                                 Rupd
8706                                   ("CPSR",
8707                                    TP[qVar"s",
8708                                       Rupd
8709                                         ("N",
8710                                          TP[Dest("CPSR",CTy"PSR",qVar"s"),
8711                                             Bop(Bit,Var("result",F32),
8712                                                 LN 31)])]),
8713                                 Let(TP[nVar"v1",qVar"s"],
8714                                     Let(qVar"s0",
8715                                         Rupd
8716                                           ("CPSR",
8717                                            TP[qVar"s",
8718                                               Rupd
8719                                                 ("Z",
8720                                                  TP[Dest
8721                                                       ("CPSR",CTy"PSR",
8722                                                        qVar"s"),
8723                                                     EQ(Var("result",F32),
8724                                                        LW(0,32))])]),
8725                                         TP[Apply
8726                                              (Call
8727                                                 ("ArchVersion",
8728                                                  ATy(qTy,nTy),LU),
8729                                               qVar"s0"),qVar"s0"]),
8730                                     ITE(EQ(nVar"v1",LN 4),
8731                                         Rupd
8732                                           ("CPSR",
8733                                            TP[qVar"s",
8734                                               Rupd
8735                                                 ("C",
8736                                                  TP[Dest
8737                                                       ("CPSR",CTy"PSR",
8738                                                        qVar"s"),
8739                                                     Apply
8740                                                       (LX(ATy(PTy(F32,
8741                                                                   PTy(F32,
8742                                                                       bTy)),
8743                                                               bTy)),
8744                                                        TP[Var("v",F32),
8745                                                           Var("v0",F32),
8746                                                           Dest
8747                                                             ("C",bTy,
8748                                                              Dest
8749                                                                ("CPSR",
8750                                                                 CTy"PSR",
8751                                                                 qVar"s"))])])]),
8752                                         qVar"s"))),qVar"s"))))))))
8753;
8754val dfn'MultiplyAccumulate_def = Def
8755  ("dfn'MultiplyAccumulate",
8756   TP[bVar"setflags",Var("d",F4),Var("n",F4),Var("m",F4),Var("a",F4)],
8757   Close
8758     (qVar"state",
8759      Let(TP[Var("v",F32),qVar"s"],
8760          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"),
8761          Let(TP[Var("v0",F32),qVar"s"],
8762              Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"),
8763              Let(TP[Var("v1",F32),qVar"s"],
8764                  Apply
8765                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4)),qVar"s"),
8766                  Let(Var("result",F32),
8767                      Bop(Add,Bop(Mul,Var("v",F32),Var("v0",F32)),
8768                          Var("v1",F32)),
8769                      Let(qVar"s",
8770                          Apply
8771                            (Call
8772                               ("write'R",ATy(qTy,qTy),
8773                                TP[Var("result",F32),Var("d",F4)]),qVar"s"),
8774                          Apply
8775                            (Call("IncPC",ATy(qTy,qTy),LU),
8776                             ITE(bVar"setflags",
8777                                 Let(qVar"s",
8778                                     Rupd
8779                                       ("CPSR",
8780                                        TP[qVar"s",
8781                                           Rupd
8782                                             ("N",
8783                                              TP[Dest
8784                                                   ("CPSR",CTy"PSR",
8785                                                    qVar"s"),
8786                                                 Bop(Bit,
8787                                                     Var("result",F32),
8788                                                     LN 31)])]),
8789                                     Let(TP[nVar"v2",qVar"s"],
8790                                         Let(qVar"s0",
8791                                             Rupd
8792                                               ("CPSR",
8793                                                TP[qVar"s",
8794                                                   Rupd
8795                                                     ("Z",
8796                                                      TP[Dest
8797                                                           ("CPSR",
8798                                                            CTy"PSR",
8799                                                            qVar"s"),
8800                                                         EQ(Var("result",
8801                                                                F32),
8802                                                            LW(0,32))])]),
8803                                             TP[Apply
8804                                                  (Call
8805                                                     ("ArchVersion",
8806                                                      ATy(qTy,nTy),LU),
8807                                                   qVar"s0"),qVar"s0"]),
8808                                         ITE(EQ(nVar"v2",LN 4),
8809                                             Rupd
8810                                               ("CPSR",
8811                                                TP[qVar"s",
8812                                                   Rupd
8813                                                     ("C",
8814                                                      TP[Dest
8815                                                           ("CPSR",
8816                                                            CTy"PSR",
8817                                                            qVar"s"),
8818                                                         Apply
8819                                                           (LX(ATy(PTy(F32,
8820                                                                       PTy(F32,
8821                                                                           PTy(F32,
8822                                                                               bTy))),
8823                                                                   bTy)),
8824                                                            TP[Var("v",F32),
8825                                                               Var("v0",
8826                                                                   F32),
8827                                                               Var("v1",
8828                                                                   F32),
8829                                                               Dest
8830                                                                 ("C",bTy,
8831                                                                  Dest
8832                                                                    ("CPSR",
8833                                                                     CTy"PSR",
8834                                                                     qVar"s"))])])]),
8835                                             qVar"s"))),qVar"s")))))))))
8836;
8837val dfn'MultiplyLong_def = Def
8838  ("dfn'MultiplyLong",
8839   TP[bVar"accumulate",bVar"signed",bVar"setflags",Var("dhi",F4),
8840      Var("dlo",F4),Var("n",F4),Var("m",F4)],
8841   Close
8842     (qVar"state",
8843      Let(TP[Var("v",F32),qVar"s"],
8844          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"),
8845          Let(TP[Var("v0",F32),qVar"s"],
8846              Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"),
8847              Let(TP[Var("v1",F32),qVar"s"],
8848                  Apply
8849                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("dhi",F4)),qVar"s"),
8850                  Let(TP[Var("v2",F32),qVar"s"],
8851                      Apply
8852                        (Call("R",ATy(qTy,PTy(F32,qTy)),Var("dlo",F4)),
8853                         qVar"s"),
8854                      Let(Var("result",F64),
8855                          Bop(Add,
8856                              ITE(bVar"signed",
8857                                  Bop(Mul,Mop(SE F64,Var("v",F32)),
8858                                      Mop(SE F64,Var("v0",F32))),
8859                                  Bop(Mul,Mop(Cast F64,Var("v",F32)),
8860                                      Mop(Cast F64,Var("v0",F32)))),
8861                              ITE(bVar"accumulate",
8862                                  CC[Var("v1",F32),Var("v2",F32)],LW(0,64))),
8863                          Let(qVar"s",
8864                              Apply
8865                                (Call
8866                                   ("write'R",ATy(qTy,qTy),
8867                                    TP[EX(Var("result",F64),LN 31,LN 0,F32),
8868                                       Var("dlo",F4)]),
8869                                 Apply
8870                                   (Call
8871                                      ("write'R",ATy(qTy,qTy),
8872                                       TP[EX(Var("result",F64),LN 63,
8873                                             LN 32,F32),Var("dhi",F4)]),
8874                                    qVar"s")),
8875                              Apply
8876                                (Call("IncPC",ATy(qTy,qTy),LU),
8877                                 ITE(bVar"setflags",
8878                                     Let(qVar"s",
8879                                         Rupd
8880                                           ("CPSR",
8881                                            TP[qVar"s",
8882                                               Rupd
8883                                                 ("N",
8884                                                  TP[Dest
8885                                                       ("CPSR",CTy"PSR",
8886                                                        qVar"s"),
8887                                                     Bop(Bit,
8888                                                         Var("result",F64),
8889                                                         LN 63)])]),
8890                                         Let(TP[nVar"v3",qVar"s"],
8891                                             Let(qVar"s0",
8892                                                 Rupd
8893                                                   ("CPSR",
8894                                                    TP[qVar"s",
8895                                                       Rupd
8896                                                         ("Z",
8897                                                          TP[Dest
8898                                                               ("CPSR",
8899                                                                CTy"PSR",
8900                                                                qVar"s"),
8901                                                             EQ(Var("result",
8902                                                                    F64),
8903                                                                LW(0,64))])]),
8904                                                 TP[Apply
8905                                                      (Call
8906                                                         ("ArchVersion",
8907                                                          ATy(qTy,nTy),LU),
8908                                                       qVar"s0"),qVar"s0"]),
8909                                             ITE(EQ(nVar"v3",LN 4),
8910                                                 Let(qVar"s",
8911                                                     Rupd
8912                                                       ("CPSR",
8913                                                        TP[qVar"s",
8914                                                           Rupd
8915                                                             ("C",
8916                                                              TP[Dest
8917                                                                   ("CPSR",
8918                                                                    CTy"PSR",
8919                                                                    qVar"s"),
8920                                                                 Apply
8921                                                                   (LX(ATy(PTy(F32,
8922                                                                               PTy(F32,
8923                                                                                   PTy(F32,
8924                                                                                       PTy(F32,
8925                                                                                           bTy)))),
8926                                                                           bTy)),
8927                                                                    TP[Var("v",
8928                                                                           F32),
8929                                                                       Var("v0",
8930                                                                           F32),
8931                                                                       Var("v1",
8932                                                                           F32),
8933                                                                       Var("v2",
8934                                                                           F32),
8935                                                                       Dest
8936                                                                         ("C",
8937                                                                          bTy,
8938                                                                          Dest
8939                                                                            ("CPSR",
8940                                                                             CTy"PSR",
8941                                                                             qVar"s"))])])]),
8942                                                     Rupd
8943                                                       ("CPSR",
8944                                                        TP[qVar"s",
8945                                                           Rupd
8946                                                             ("V",
8947                                                              TP[Dest
8948                                                                   ("CPSR",
8949                                                                    CTy"PSR",
8950                                                                    qVar"s"),
8951                                                                 Apply
8952                                                                   (LX(ATy(PTy(F32,
8953                                                                               PTy(F32,
8954                                                                                   PTy(F32,
8955                                                                                       PTy(F32,
8956                                                                                           bTy)))),
8957                                                                           bTy)),
8958                                                                    TP[Var("v",
8959                                                                           F32),
8960                                                                       Var("v0",
8961                                                                           F32),
8962                                                                       Var("v1",
8963                                                                           F32),
8964                                                                       Var("v2",
8965                                                                           F32),
8966                                                                       Dest
8967                                                                         ("V",
8968                                                                          bTy,
8969                                                                          Dest
8970                                                                            ("CPSR",
8971                                                                             CTy"PSR",
8972                                                                             qVar"s"))])])])),
8973                                                 qVar"s"))),qVar"s"))))))))))
8974;
8975val dfn'MultiplyAccumulateAccumulate_def = Def
8976  ("dfn'MultiplyAccumulateAccumulate",
8977   TP[Var("dhi",F4),Var("dlo",F4),Var("n",F4),Var("m",F4)],
8978   Close
8979     (qVar"state",
8980      Let(TP[Var("v",F32),qVar"s"],
8981          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"),
8982          Let(TP[Var("v",F64),qVar"s"],
8983              Let(TP[Var("v",F64),qVar"s"],
8984                  Let(TP[Var("v",F64),qVar"s"],
8985                      Let(TP[Var("v0",F32),qVar"s"],
8986                          Apply
8987                            (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
8988                             qVar"s"),
8989                          TP[Bop(Mul,Mop(Cast F64,Var("v",F32)),
8990                                 Mop(Cast F64,Var("v0",F32))),qVar"s"]),
8991                      Let(TP[Var("v0",F32),qVar"s"],
8992                          Apply
8993                            (Call("R",ATy(qTy,PTy(F32,qTy)),Var("dhi",F4)),
8994                             qVar"s"),
8995                          TP[Bop(Add,Var("v",F64),
8996                                 Mop(Cast F64,Var("v0",F32))),qVar"s"])),
8997                  Let(TP[Var("v0",F32),qVar"s"],
8998                      Apply
8999                        (Call("R",ATy(qTy,PTy(F32,qTy)),Var("dlo",F4)),
9000                         qVar"s"),
9001                      TP[Bop(Add,Var("v",F64),Mop(Cast F64,Var("v0",F32))),
9002                         qVar"s"])),
9003              Apply
9004                (Call("IncPC",ATy(qTy,qTy),LU),
9005                 Apply
9006                   (Call
9007                      ("write'R",ATy(qTy,qTy),
9008                       TP[EX(Var("v",F64),LN 31,LN 0,F32),Var("dlo",F4)]),
9009                    Apply
9010                      (Call
9011                         ("write'R",ATy(qTy,qTy),
9012                          TP[EX(Var("v",F64),LN 63,LN 32,F32),
9013                             Var("dhi",F4)]),qVar"s")))))))
9014;
9015val dfn'MultiplySubtract_def = Def
9016  ("dfn'MultiplySubtract",
9017   TP[Var("d",F4),Var("n",F4),Var("m",F4),Var("a",F4)],
9018   Close
9019     (qVar"state",
9020      Let(TP[Var("v",F32),qVar"s"],
9021          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4)),qVar"state"),
9022          Apply
9023            (Call("IncPC",ATy(qTy,qTy),LU),
9024             Let(TP[Var("v",PTy(F32,F4)),qVar"s"],
9025                 Let(TP[Var("v",F32),qVar"s"],
9026                     Let(TP[Var("v0",F32),qVar"s"],
9027                         Apply
9028                           (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
9029                            qVar"s"),
9030                         Let(TP[Var("v0",F32),qVar"s"],
9031                             Let(TP[Var("v1",F32),qVar"s"],
9032                                 Apply
9033                                   (Call
9034                                      ("R",ATy(qTy,PTy(F32,qTy)),
9035                                       Var("n",F4)),qVar"s"),
9036                                 TP[Bop(Mul,Var("v0",F32),Var("v1",F32)),
9037                                    qVar"s"]),
9038                             TP[Bop(Sub,Var("v",F32),Var("v0",F32)),
9039                                qVar"s"])),
9040                     TP[TP[Var("v",F32),Var("d",F4)],qVar"s"]),
9041                 Apply
9042                   (Call("write'R",ATy(qTy,qTy),Var("v",PTy(F32,F4))),
9043                    qVar"s"))))))
9044;
9045val dfn'Signed16Multiply32Accumulate_def = Def
9046  ("dfn'Signed16Multiply32Accumulate",
9047   TP[bVar"m_high",bVar"n_high",Var("d",F4),Var("n",F4),Var("m",F4),
9048      Var("a",F4)],
9049   Close
9050     (qVar"state",
9051      Let(TP[Var("v",F16),qVar"s"],
9052          ITE(bVar"n_high",
9053              Let(TP[Var("v",F32),qVar"s"],
9054                  Apply
9055                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
9056                     qVar"state"),
9057                  TP[EX(Var("v",F32),LN 31,LN 16,F16),qVar"s"]),
9058              Let(TP[Var("v",F32),qVar"s"],
9059                  Apply
9060                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
9061                     qVar"state"),
9062                  TP[EX(Var("v",F32),LN 15,LN 0,F16),qVar"s"])),
9063          Let(TP[Var("v0",F16),qVar"s"],
9064              ITE(bVar"m_high",
9065                  Let(TP[Var("v",F32),qVar"s"],
9066                      Apply
9067                        (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
9068                         qVar"s"),
9069                      TP[EX(Var("v",F32),LN 31,LN 16,F16),qVar"s"]),
9070                  Let(TP[Var("v",F32),qVar"s"],
9071                      Apply
9072                        (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
9073                         qVar"s"),
9074                      TP[EX(Var("v",F32),LN 15,LN 0,F16),qVar"s"])),
9075              Let(TP[Var("v1",F32),qVar"s"],
9076                  Apply
9077                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4)),qVar"s"),
9078                  Let(iVar"v",
9079                      Bop(Add,
9080                          Bop(Mul,Mop(Cast iTy,Var("v",F16)),
9081                              Mop(Cast iTy,Var("v0",F16))),
9082                          Mop(Cast iTy,Var("v1",F32))),
9083                      Let(Var("result32",F32),Mop(Cast F32,iVar"v"),
9084                          Let(qVar"s",
9085                              Apply
9086                                (Call
9087                                   ("write'R",ATy(qTy,qTy),
9088                                    TP[Var("result32",F32),Var("d",F4)]),
9089                                 qVar"s"),
9090                              Apply
9091                                (Call("IncPC",ATy(qTy,qTy),LU),
9092                                 ITE(Mop(Not,
9093                                         EQ(iVar"v",
9094                                            Mop(Cast iTy,
9095                                                Var("result32",F32)))),
9096                                     Rupd
9097                                       ("CPSR",
9098                                        TP[qVar"s",
9099                                           Rupd
9100                                             ("Q",
9101                                              TP[Dest
9102                                                   ("CPSR",CTy"PSR",
9103                                                    qVar"s"),LT])]),
9104                                     qVar"s"))))))))))
9105;
9106val dfn'Signed16Multiply32Result_def = Def
9107  ("dfn'Signed16Multiply32Result",
9108   TP[bVar"m_high",bVar"n_high",Var("d",F4),Var("n",F4),Var("m",F4)],
9109   Close
9110     (qVar"state",
9111      Let(TP[Var("v",F16),qVar"s"],
9112          ITE(bVar"n_high",
9113              Let(TP[Var("v",F32),qVar"s"],
9114                  Apply
9115                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
9116                     qVar"state"),
9117                  TP[EX(Var("v",F32),LN 31,LN 16,F16),qVar"s"]),
9118              Let(TP[Var("v",F32),qVar"s"],
9119                  Apply
9120                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
9121                     qVar"state"),
9122                  TP[EX(Var("v",F32),LN 15,LN 0,F16),qVar"s"])),
9123          Let(TP[Var("v0",F16),qVar"s"],
9124              ITE(bVar"m_high",
9125                  Let(TP[Var("v",F32),qVar"s"],
9126                      Apply
9127                        (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
9128                         qVar"s"),
9129                      TP[EX(Var("v",F32),LN 31,LN 16,F16),qVar"s"]),
9130                  Let(TP[Var("v",F32),qVar"s"],
9131                      Apply
9132                        (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
9133                         qVar"s"),
9134                      TP[EX(Var("v",F32),LN 15,LN 0,F16),qVar"s"])),
9135              Apply
9136                (Call("IncPC",ATy(qTy,qTy),LU),
9137                 Apply
9138                   (Call
9139                      ("write'R",ATy(qTy,qTy),
9140                       TP[Mop(Cast F32,
9141                              Bop(Mul,Mop(Cast iTy,Var("v",F16)),
9142                                  Mop(Cast iTy,Var("v0",F16)))),
9143                          Var("d",F4)]),qVar"s"))))))
9144;
9145val dfn'Signed16x32Multiply32Accumulate_def = Def
9146  ("dfn'Signed16x32Multiply32Accumulate",
9147   TP[bVar"m_high",Var("d",F4),Var("n",F4),Var("m",F4),Var("a",F4)],
9148   Close
9149     (qVar"state",
9150      Let(TP[Var("v",F16),qVar"s"],
9151          ITE(bVar"m_high",
9152              Let(TP[Var("v",F32),qVar"s"],
9153                  Apply
9154                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
9155                     qVar"state"),
9156                  TP[EX(Var("v",F32),LN 31,LN 16,F16),qVar"s"]),
9157              Let(TP[Var("v",F32),qVar"s"],
9158                  Apply
9159                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
9160                     qVar"state"),
9161                  TP[EX(Var("v",F32),LN 15,LN 0,F16),qVar"s"])),
9162          Let(iVar"sh16",Bop(Exp,LI 2,LN 16),
9163              Let(TP[Var("v0",F32),qVar"s"],
9164                  Apply
9165                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
9166                  Let(TP[iVar"v",qVar"s"],
9167                      Let(TP[iVar"v",qVar"s"],
9168                          Let(TP[Var("v1",F32),qVar"s"],
9169                              Apply
9170                                (Call
9171                                   ("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4)),
9172                                 qVar"s"),
9173                              TP[Bop(Add,
9174                                     Bop(Mul,Mop(Cast iTy,Var("v0",F32)),
9175                                         Mop(Cast iTy,Var("v",F16))),
9176                                     Bop(Mul,Mop(Cast iTy,Var("v1",F32)),
9177                                         iVar"sh16")),qVar"s"]),
9178                          TP[Bop(Div,iVar"v",iVar"sh16"),qVar"s"]),
9179                      Let(Var("result32",F32),Mop(Cast F32,iVar"v"),
9180                          Let(qVar"s",
9181                              Apply
9182                                (Call
9183                                   ("write'R",ATy(qTy,qTy),
9184                                    TP[Var("result32",F32),Var("d",F4)]),
9185                                 qVar"s"),
9186                              Apply
9187                                (Call("IncPC",ATy(qTy,qTy),LU),
9188                                 ITE(Mop(Not,
9189                                         EQ(iVar"v",
9190                                            Mop(Cast iTy,
9191                                                Var("result32",F32)))),
9192                                     Rupd
9193                                       ("CPSR",
9194                                        TP[qVar"s",
9195                                           Rupd
9196                                             ("Q",
9197                                              TP[Dest
9198                                                   ("CPSR",CTy"PSR",
9199                                                    qVar"s"),LT])]),
9200                                     qVar"s"))))))))))
9201;
9202val dfn'Signed16x32Multiply32Result_def = Def
9203  ("dfn'Signed16x32Multiply32Result",
9204   TP[bVar"m_high",Var("d",F4),Var("n",F4),Var("m",F4)],
9205   Close
9206     (qVar"state",
9207      Let(TP[Var("v",F16),qVar"s"],
9208          ITE(bVar"m_high",
9209              Let(TP[Var("v",F32),qVar"s"],
9210                  Apply
9211                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
9212                     qVar"state"),
9213                  TP[EX(Var("v",F32),LN 31,LN 16,F16),qVar"s"]),
9214              Let(TP[Var("v",F32),qVar"s"],
9215                  Apply
9216                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
9217                     qVar"state"),
9218                  TP[EX(Var("v",F32),LN 15,LN 0,F16),qVar"s"])),
9219          Let(TP[Var("v0",F32),qVar"s"],
9220              Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
9221              Apply
9222                (Call("IncPC",ATy(qTy,qTy),LU),
9223                 Apply
9224                   (Call
9225                      ("write'R",ATy(qTy,qTy),
9226                       TP[Mop(Cast F32,
9227                              Bop(Div,
9228                                  Bop(Mul,Mop(Cast iTy,Var("v0",F32)),
9229                                      Mop(Cast iTy,Var("v",F16))),
9230                                  Bop(Exp,LI 2,LN 16))),Var("d",F4)]),
9231                    qVar"s"))))))
9232;
9233val dfn'Signed16Multiply64Accumulate_def = Def
9234  ("dfn'Signed16Multiply64Accumulate",
9235   TP[bVar"m_high",bVar"n_high",Var("dhi",F4),Var("dlo",F4),Var("n",F4),
9236      Var("m",F4)],
9237   Close
9238     (qVar"state",
9239      Let(TP[Var("v",F16),qVar"s"],
9240          ITE(bVar"n_high",
9241              Let(TP[Var("v",F32),qVar"s"],
9242                  Apply
9243                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
9244                     qVar"state"),
9245                  TP[EX(Var("v",F32),LN 31,LN 16,F16),qVar"s"]),
9246              Let(TP[Var("v",F32),qVar"s"],
9247                  Apply
9248                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
9249                     qVar"state"),
9250                  TP[EX(Var("v",F32),LN 15,LN 0,F16),qVar"s"])),
9251          Let(TP[Var("v0",F16),qVar"s"],
9252              ITE(bVar"m_high",
9253                  Let(TP[Var("v",F32),qVar"s"],
9254                      Apply
9255                        (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
9256                         qVar"s"),
9257                      TP[EX(Var("v",F32),LN 31,LN 16,F16),qVar"s"]),
9258                  Let(TP[Var("v",F32),qVar"s"],
9259                      Apply
9260                        (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
9261                         qVar"s"),
9262                      TP[EX(Var("v",F32),LN 15,LN 0,F16),qVar"s"])),
9263              Let(TP[Var("v1",F32),qVar"s"],
9264                  Apply
9265                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("dhi",F4)),qVar"s"),
9266                  Let(TP[iVar"v",qVar"s"],
9267                      Let(TP[iVar"v1",qVar"s"],
9268                          Let(TP[Var("v",F64),qVar"s"],
9269                              Let(TP[Var("v2",F32),qVar"s"],
9270                                  Apply
9271                                    (Call
9272                                       ("R",ATy(qTy,PTy(F32,qTy)),
9273                                        Var("dlo",F4)),qVar"s"),
9274                                  TP[CC[Var("v1",F32),Var("v2",F32)],
9275                                     qVar"s"]),
9276                              TP[Mop(Cast iTy,Var("v",F64)),qVar"s"]),
9277                          TP[Bop(Add,
9278                                 Bop(Mul,Mop(Cast iTy,Var("v",F16)),
9279                                     Mop(Cast iTy,Var("v0",F16))),iVar"v1"),
9280                             qVar"s"]),
9281                      Let(Var("result64",F64),Mop(Cast F64,iVar"v"),
9282                          Apply
9283                            (Call("IncPC",ATy(qTy,qTy),LU),
9284                             Apply
9285                               (Call
9286                                  ("write'R",ATy(qTy,qTy),
9287                                   TP[EX(Var("result64",F64),LN 31,LN 0,
9288                                         F32),Var("dlo",F4)]),
9289                                Apply
9290                                  (Call
9291                                     ("write'R",ATy(qTy,qTy),
9292                                      TP[EX(Var("result64",F64),LN 63,
9293                                            LN 32,F32),Var("dhi",F4)]),
9294                                   qVar"s"))))))))))
9295;
9296val dfn'SignedMultiplyDual_def = Def
9297  ("dfn'SignedMultiplyDual",
9298   TP[bVar"sub",bVar"m_swap",Var("d",F4),Var("n",F4),Var("m",F4),
9299      Var("a",F4)],
9300   Close
9301     (qVar"state",
9302      Let(TP[Var("v",F32),qVar"s"],
9303          ITE(bVar"m_swap",
9304              Let(TP[Var("v",F32),qVar"s"],
9305                  Apply
9306                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
9307                     qVar"state"),
9308                  Apply
9309                    (Call
9310                       ("ROR",ATy(qTy,PTy(F32,qTy)),TP[Var("v",F32),LN 16]),
9311                     qVar"s")),
9312              Apply
9313                (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state")),
9314          Let(TP[Var("v0",F32),qVar"s"],
9315              Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
9316              Let(iVar"v0",
9317                  Bop(Mul,Mop(Cast iTy,EX(Var("v0",F32),LN 15,LN 0,F16)),
9318                      Mop(Cast iTy,EX(Var("v",F32),LN 15,LN 0,F16))),
9319                  Let(TP[Var("v1",F32),qVar"s"],
9320                      Apply
9321                        (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
9322                         qVar"s"),
9323                      Let(iVar"v1",
9324                          Bop(Mul,
9325                              Mop(Cast iTy,
9326                                  EX(Var("v1",F32),LN 31,LN 16,F16)),
9327                              Mop(Cast iTy,
9328                                  EX(Var("v",F32),LN 31,LN 16,F16))),
9329                          Let(TP[Var("v2",F32),qVar"s"],
9330                              ITE(EQ(Var("a",F4),LW(15,4)),
9331                                  TP[LW(0,32),qVar"s"],
9332                                  Apply
9333                                    (Call
9334                                       ("R",ATy(qTy,PTy(F32,qTy)),
9335                                        Var("a",F4)),qVar"s")),
9336                              Let(iVar"result",
9337                                  ITE(bVar"sub",
9338                                      Bop(Add,Bop(Sub,iVar"v0",iVar"v1"),
9339                                          Mop(Cast iTy,Var("v2",F32))),
9340                                      Bop(Add,Bop(Add,iVar"v0",iVar"v1"),
9341                                          Mop(Cast iTy,Var("v2",F32)))),
9342                                  Let(Var("result32",F32),
9343                                      Mop(Cast F32,iVar"result"),
9344                                      Let(qVar"s",
9345                                          Apply
9346                                            (Call
9347                                               ("write'R",ATy(qTy,qTy),
9348                                                TP[Var("result32",F32),
9349                                                   Var("d",F4)]),qVar"s"),
9350                                          Apply
9351                                            (Call("IncPC",ATy(qTy,qTy),LU),
9352                                             ITE(Mop(Not,
9353                                                     EQ(iVar"result",
9354                                                        Mop(Cast iTy,
9355                                                            Var("result32",
9356                                                                F32)))),
9357                                                 Rupd
9358                                                   ("CPSR",
9359                                                    TP[qVar"s",
9360                                                       Rupd
9361                                                         ("Q",
9362                                                          TP[Dest
9363                                                               ("CPSR",
9364                                                                CTy"PSR",
9365                                                                qVar"s"),
9366                                                             LT])]),
9367                                                 qVar"s")))))))))))))
9368;
9369val dfn'SignedMultiplyLongDual_def = Def
9370  ("dfn'SignedMultiplyLongDual",
9371   TP[bVar"sub",bVar"m_swap",Var("dhi",F4),Var("dlo",F4),Var("n",F4),
9372      Var("m",F4)],
9373   Close
9374     (qVar"state",
9375      Let(TP[Var("v",F32),qVar"s"],
9376          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"),
9377          Let(TP[Var("v0",F32),qVar"s"],
9378              ITE(bVar"m_swap",
9379                  Let(TP[Var("v",F32),qVar"s"],
9380                      Apply
9381                        (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
9382                         qVar"s"),
9383                      Apply
9384                        (Call
9385                           ("ROR",ATy(qTy,PTy(F32,qTy)),
9386                            TP[Var("v",F32),LN 16]),qVar"s")),
9387                  Apply
9388                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s")),
9389              Let(iVar"product1",
9390                  Bop(Mul,Mop(Cast iTy,EX(Var("v",F32),LN 15,LN 0,F16)),
9391                      Mop(Cast iTy,EX(Var("v0",F32),LN 15,LN 0,F16))),
9392                  Let(iVar"product2",
9393                      Bop(Mul,
9394                          Mop(Cast iTy,EX(Var("v",F32),LN 31,LN 16,F16)),
9395                          Mop(Cast iTy,EX(Var("v0",F32),LN 31,LN 16,F16))),
9396                      Let(TP[Var("v",F32),qVar"s"],
9397                          Apply
9398                            (Call("R",ATy(qTy,PTy(F32,qTy)),Var("dhi",F4)),
9399                             qVar"s"),
9400                          Let(TP[Var("v",F64),qVar"s"],
9401                              Let(TP[Var("v0",F32),qVar"s"],
9402                                  Apply
9403                                    (Call
9404                                       ("R",ATy(qTy,PTy(F32,qTy)),
9405                                        Var("dlo",F4)),qVar"s"),
9406                                  TP[CC[Var("v",F32),Var("v0",F32)],
9407                                     qVar"s"]),
9408                              Let(Var("result64",F64),
9409                                  Mop(Cast F64,
9410                                      ITE(bVar"sub",
9411                                          Bop(Add,
9412                                              Bop(Sub,iVar"product1",
9413                                                  iVar"product2"),
9414                                              Mop(Cast iTy,Var("v",F64))),
9415                                          Bop(Add,
9416                                              Bop(Add,iVar"product1",
9417                                                  iVar"product2"),
9418                                              Mop(Cast iTy,Var("v",F64))))),
9419                                  Apply
9420                                    (Call("IncPC",ATy(qTy,qTy),LU),
9421                                     Apply
9422                                       (Call
9423                                          ("write'R",ATy(qTy,qTy),
9424                                           TP[EX(Var("result64",F64),
9425                                                 LN 31,LN 0,F32),
9426                                              Var("dlo",F4)]),
9427                                        Apply
9428                                          (Call
9429                                             ("write'R",ATy(qTy,qTy),
9430                                              TP[EX(Var("result64",F64),
9431                                                    LN 63,LN 32,F32),
9432                                                 Var("dhi",F4)]),qVar"s"))))))))))))
9433;
9434val dfn'SignedMostSignificantMultiply_def = Def
9435  ("dfn'SignedMostSignificantMultiply",
9436   TP[bVar"round",Var("d",F4),Var("n",F4),Var("m",F4),Var("a",F4)],
9437   Close
9438     (qVar"state",
9439      Let(TP[Var("v",F32),qVar"s"],
9440          ITE(EQ(Var("a",F4),LW(15,4)),TP[LW(0,32),qVar"state"],
9441              Apply
9442                (Call("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4)),qVar"state")),
9443          Let(TP[Var("v0",F32),qVar"s"],
9444              Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
9445              Let(TP[iVar"v",qVar"s"],
9446                  Let(TP[iVar"v0",qVar"s"],
9447                      Let(TP[Var("v1",F32),qVar"s"],
9448                          Apply
9449                            (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
9450                             qVar"s"),
9451                          TP[Bop(Mul,Mop(Cast iTy,Var("v0",F32)),
9452                                 Mop(Cast iTy,Var("v1",F32))),qVar"s"]),
9453                      TP[Bop(Add,
9454                             Mop(Cast iTy,
9455                                 Bop(Lsl,Mop(Cast F64,Var("v",F32)),LN 32)),
9456                             iVar"v0"),qVar"s"]),
9457                  Apply
9458                    (Call("IncPC",ATy(qTy,qTy),LU),
9459                     Apply
9460                       (Call
9461                          ("write'R",ATy(qTy,qTy),
9462                           TP[EX(Mop(Cast F64,
9463                                     ITE(bVar"round",
9464                                         Bop(Add,iVar"v",LI 2147483648),
9465                                         iVar"v")),LN 63,LN 32,F32),
9466                              Var("d",F4)]),qVar"s")))))))
9467;
9468val dfn'SignedMostSignificantMultiplySubtract_def = Def
9469  ("dfn'SignedMostSignificantMultiplySubtract",
9470   TP[bVar"round",Var("d",F4),Var("n",F4),Var("m",F4),Var("a",F4)],
9471   Close
9472     (qVar"state",
9473      Let(TP[Var("v",F32),qVar"s"],
9474          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4)),qVar"state"),
9475          Let(TP[iVar"v",qVar"s"],
9476              Let(TP[Var("v0",F32),qVar"s"],
9477                  Apply
9478                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
9479                  Let(TP[iVar"v0",qVar"s"],
9480                      Let(TP[Var("v1",F32),qVar"s"],
9481                          Apply
9482                            (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
9483                             qVar"s"),
9484                          TP[Bop(Mul,Mop(Cast iTy,Var("v0",F32)),
9485                                 Mop(Cast iTy,Var("v1",F32))),qVar"s"]),
9486                      TP[Bop(Sub,
9487                             Mop(Cast iTy,
9488                                 Bop(Lsl,Mop(Cast F64,Var("v",F32)),LN 32)),
9489                             iVar"v0"),qVar"s"])),
9490              Apply
9491                (Call("IncPC",ATy(qTy,qTy),LU),
9492                 Apply
9493                   (Call
9494                      ("write'R",ATy(qTy,qTy),
9495                       TP[EX(Mop(Cast F64,
9496                                 ITE(bVar"round",
9497                                     Bop(Add,iVar"v",LI 2147483648),
9498                                     iVar"v")),LN 63,LN 32,F32),
9499                          Var("d",F4)]),qVar"s"))))))
9500;
9501val SignedParallelAddSub16_def = Def
9502  ("SignedParallelAddSub16",TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)],
9503   Close
9504     (qVar"state",
9505      Let(TP[Var("v",F32),qVar"s"],
9506          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"),
9507          Let(TP[Var("v0",F32),qVar"s"],
9508              Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"),
9509              TP[CS(Var("op",FTy 2),
9510                    [(LW(0,2),
9511                      TP[Bop(Add,
9512                             Mop(Cast iTy,EX(Var("v",F32),LN 15,LN 0,F16)),
9513                             Mop(Cast iTy,EX(Var("v0",F32),LN 15,LN 0,F16))),
9514                         Bop(Add,
9515                             Mop(Cast iTy,EX(Var("v",F32),LN 31,LN 16,F16)),
9516                             Mop(Cast iTy,
9517                                 EX(Var("v0",F32),LN 31,LN 16,F16)))]),
9518                     (LW(1,2),
9519                      TP[Bop(Sub,
9520                             Mop(Cast iTy,EX(Var("v",F32),LN 15,LN 0,F16)),
9521                             Mop(Cast iTy,
9522                                 EX(Var("v0",F32),LN 31,LN 16,F16))),
9523                         Bop(Add,
9524                             Mop(Cast iTy,EX(Var("v",F32),LN 31,LN 16,F16)),
9525                             Mop(Cast iTy,EX(Var("v0",F32),LN 15,LN 0,F16)))]),
9526                     (LW(2,2),
9527                      TP[Bop(Add,
9528                             Mop(Cast iTy,EX(Var("v",F32),LN 15,LN 0,F16)),
9529                             Mop(Cast iTy,
9530                                 EX(Var("v0",F32),LN 31,LN 16,F16))),
9531                         Bop(Sub,
9532                             Mop(Cast iTy,EX(Var("v",F32),LN 31,LN 16,F16)),
9533                             Mop(Cast iTy,EX(Var("v0",F32),LN 15,LN 0,F16)))]),
9534                     (LW(3,2),
9535                      TP[Bop(Sub,
9536                             Mop(Cast iTy,EX(Var("v",F32),LN 15,LN 0,F16)),
9537                             Mop(Cast iTy,EX(Var("v0",F32),LN 15,LN 0,F16))),
9538                         Bop(Sub,
9539                             Mop(Cast iTy,EX(Var("v",F32),LN 31,LN 16,F16)),
9540                             Mop(Cast iTy,
9541                                 EX(Var("v0",F32),LN 31,LN 16,F16)))])]),
9542                 qVar"s"]))))
9543;
9544val dfn'SignedAddSub16_def = Def
9545  ("dfn'SignedAddSub16",
9546   TP[Var("op",FTy 2),Var("d",F4),Var("n",F4),Var("m",F4)],
9547   Close
9548     (qVar"state",
9549      Let(TP[Var("v",PTy(iTy,iTy)),qVar"s"],
9550          Apply
9551            (Call
9552               ("SignedParallelAddSub16",ATy(qTy,PTy(PTy(iTy,iTy),qTy)),
9553                TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)]),qVar"state"),
9554          Let(TP[iVar"res1",iVar"res2"],Var("v",PTy(iTy,iTy)),
9555              Let(qVar"s",
9556                  Apply
9557                    (Call
9558                       ("write'R",ATy(qTy,qTy),
9559                        TP[CC[Mop(Cast F16,iVar"res2"),
9560                              Mop(Cast F16,iVar"res1")],Var("d",F4)]),
9561                     qVar"s"),
9562                  Let(qVar"s",
9563                      Rupd
9564                        ("CPSR",
9565                         TP[qVar"s",
9566                            Rupd
9567                              ("GE",
9568                               TP[Dest("CPSR",CTy"PSR",qVar"s"),
9569                                  BFI(LN 1,LN 0,
9570                                      ITE(Bop(Ge,iVar"res1",LI 0),LW(3,2),
9571                                          LW(0,2)),
9572                                      Dest
9573                                        ("GE",F4,
9574                                         Dest("CPSR",CTy"PSR",qVar"s")))])]),
9575                      Apply
9576                        (Call("IncPC",ATy(qTy,qTy),LU),
9577                         Rupd
9578                           ("CPSR",
9579                            TP[qVar"s",
9580                               Rupd
9581                                 ("GE",
9582                                  TP[Dest("CPSR",CTy"PSR",qVar"s"),
9583                                     BFI(LN 3,LN 2,
9584                                         ITE(Bop(Ge,iVar"res2",LI 0),
9585                                             LW(3,2),LW(0,2)),
9586                                         Dest
9587                                           ("GE",F4,
9588                                            Dest("CPSR",CTy"PSR",qVar"s")))])]))))))))
9589;
9590val dfn'SignedSaturatingAddSub16_def = Def
9591  ("dfn'SignedSaturatingAddSub16",
9592   TP[Var("op",FTy 2),Var("d",F4),Var("n",F4),Var("m",F4)],
9593   Close
9594     (qVar"state",
9595      Let(TP[Var("v",PTy(iTy,iTy)),qVar"s"],
9596          Apply
9597            (Call
9598               ("SignedParallelAddSub16",ATy(qTy,PTy(PTy(iTy,iTy),qTy)),
9599                TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)]),qVar"state"),
9600          Let(TP[iVar"res1",iVar"res2"],Var("v",PTy(iTy,iTy)),
9601              Let(TP[Var("v",F16),qVar"s"],
9602                  Apply
9603                    (Call
9604                       ("SignedSat",ATy(qTy,PTy(F16,qTy)),
9605                        TP[iVar"res2",LN 16]),qVar"s"),
9606                  Apply
9607                    (Call("IncPC",ATy(qTy,qTy),LU),
9608                     Let(TP[Var("v",PTy(F32,F4)),qVar"s"],
9609                         Let(TP[Var("v",F32),qVar"s"],
9610                             Let(TP[Var("v0",F16),qVar"s"],
9611                                 Apply
9612                                   (Call
9613                                      ("SignedSat",ATy(qTy,PTy(F16,qTy)),
9614                                       TP[iVar"res1",LN 16]),qVar"s"),
9615                                 TP[CC[Var("v",F16),Var("v0",F16)],qVar"s"]),
9616                             TP[TP[Var("v",F32),Var("d",F4)],qVar"s"]),
9617                         Apply
9618                           (Call
9619                              ("write'R",ATy(qTy,qTy),Var("v",PTy(F32,F4))),
9620                            qVar"s"))))))))
9621;
9622val dfn'SignedHalvingAddSub16_def = Def
9623  ("dfn'SignedHalvingAddSub16",
9624   TP[Var("op",FTy 2),Var("d",F4),Var("n",F4),Var("m",F4)],
9625   Close
9626     (qVar"state",
9627      Let(TP[Var("v",PTy(iTy,iTy)),qVar"s"],
9628          Apply
9629            (Call
9630               ("SignedParallelAddSub16",ATy(qTy,PTy(PTy(iTy,iTy),qTy)),
9631                TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)]),qVar"state"),
9632          Let(TP[iVar"res1",iVar"res2"],Var("v",PTy(iTy,iTy)),
9633              Apply
9634                (Call("IncPC",ATy(qTy,qTy),LU),
9635                 Apply
9636                   (Call
9637                      ("write'R",ATy(qTy,qTy),
9638                       TP[CC[Mop(Cast F16,Bop(Div,iVar"res2",LI 2)),
9639                             Mop(Cast F16,Bop(Div,iVar"res1",LI 2))],
9640                          Var("d",F4)]),qVar"s"))))))
9641;
9642val SignedParallelAddSub8_def = Def
9643  ("SignedParallelAddSub8",TP[bVar"sub",Var("n",F4),Var("m",F4)],
9644   Close
9645     (qVar"state",
9646      Let(TP[Var("v",F32),qVar"s"],
9647          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"),
9648          Let(TP[Var("v0",F32),qVar"s"],
9649              Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"),
9650              TP[ITE(bVar"sub",
9651                     TP[Bop(Sub,
9652                            Mop(Cast iTy,EX(Var("v",F32),LN 7,LN 0,F8)),
9653                            Mop(Cast iTy,EX(Var("v0",F32),LN 7,LN 0,F8))),
9654                        Bop(Sub,
9655                            Mop(Cast iTy,EX(Var("v",F32),LN 15,LN 8,F8)),
9656                            Mop(Cast iTy,EX(Var("v0",F32),LN 15,LN 8,F8))),
9657                        Bop(Sub,
9658                            Mop(Cast iTy,EX(Var("v",F32),LN 23,LN 16,F8)),
9659                            Mop(Cast iTy,EX(Var("v0",F32),LN 23,LN 16,F8))),
9660                        Bop(Sub,
9661                            Mop(Cast iTy,EX(Var("v",F32),LN 31,LN 24,F8)),
9662                            Mop(Cast iTy,EX(Var("v0",F32),LN 31,LN 24,F8)))],
9663                     TP[Bop(Add,
9664                            Mop(Cast iTy,EX(Var("v",F32),LN 7,LN 0,F8)),
9665                            Mop(Cast iTy,EX(Var("v0",F32),LN 7,LN 0,F8))),
9666                        Bop(Add,
9667                            Mop(Cast iTy,EX(Var("v",F32),LN 15,LN 8,F8)),
9668                            Mop(Cast iTy,EX(Var("v0",F32),LN 15,LN 8,F8))),
9669                        Bop(Add,
9670                            Mop(Cast iTy,EX(Var("v",F32),LN 23,LN 16,F8)),
9671                            Mop(Cast iTy,EX(Var("v0",F32),LN 23,LN 16,F8))),
9672                        Bop(Add,
9673                            Mop(Cast iTy,EX(Var("v",F32),LN 31,LN 24,F8)),
9674                            Mop(Cast iTy,EX(Var("v0",F32),LN 31,LN 24,F8)))]),
9675                 qVar"s"]))))
9676;
9677val dfn'SignedAddSub8_def = Def
9678  ("dfn'SignedAddSub8",TP[bVar"sub",Var("d",F4),Var("n",F4),Var("m",F4)],
9679   Close
9680     (qVar"state",
9681      Let(TP[Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),qVar"s"],
9682          Apply
9683            (Call
9684               ("SignedParallelAddSub8",
9685                ATy(qTy,PTy(PTy(iTy,PTy(iTy,PTy(iTy,iTy))),qTy)),
9686                TP[bVar"sub",Var("n",F4),Var("m",F4)]),qVar"state"),
9687          Let(TP[iVar"res1",iVar"res2",iVar"res3",iVar"res4"],
9688              Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),
9689              Let(qVar"s",
9690                  Apply
9691                    (Call
9692                       ("write'R",ATy(qTy,qTy),
9693                        TP[CC[Mop(Cast F8,iVar"res4"),
9694                              Mop(Cast F8,iVar"res3"),
9695                              Mop(Cast F8,iVar"res2"),
9696                              Mop(Cast F8,iVar"res1")],Var("d",F4)]),
9697                     qVar"s"),
9698                  Let(qVar"s",
9699                      Rupd
9700                        ("CPSR",
9701                         TP[qVar"s",
9702                            Rupd
9703                              ("GE",
9704                               TP[Dest("CPSR",CTy"PSR",qVar"s"),
9705                                  BFI(LN 0,LN 0,
9706                                      Mop(Cast F1,Bop(Ge,iVar"res1",LI 0)),
9707                                      Dest
9708                                        ("GE",F4,
9709                                         Dest("CPSR",CTy"PSR",qVar"s")))])]),
9710                      Let(qVar"s",
9711                          Rupd
9712                            ("CPSR",
9713                             TP[qVar"s",
9714                                Rupd
9715                                  ("GE",
9716                                   TP[Dest("CPSR",CTy"PSR",qVar"s"),
9717                                      BFI(LN 1,LN 1,
9718                                          Mop(Cast F1,
9719                                              Bop(Ge,iVar"res2",LI 0)),
9720                                          Dest
9721                                            ("GE",F4,
9722                                             Dest("CPSR",CTy"PSR",qVar"s")))])]),
9723                          Let(qVar"s",
9724                              Rupd
9725                                ("CPSR",
9726                                 TP[qVar"s",
9727                                    Rupd
9728                                      ("GE",
9729                                       TP[Dest("CPSR",CTy"PSR",qVar"s"),
9730                                          BFI(LN 2,LN 2,
9731                                              Mop(Cast F1,
9732                                                  Bop(Ge,iVar"res3",LI 0)),
9733                                              Dest
9734                                                ("GE",F4,
9735                                                 Dest
9736                                                   ("CPSR",CTy"PSR",
9737                                                    qVar"s")))])]),
9738                              Apply
9739                                (Call("IncPC",ATy(qTy,qTy),LU),
9740                                 Rupd
9741                                   ("CPSR",
9742                                    TP[qVar"s",
9743                                       Rupd
9744                                         ("GE",
9745                                          TP[Dest("CPSR",CTy"PSR",qVar"s"),
9746                                             BFI(LN 3,LN 3,
9747                                                 Mop(Cast F1,
9748                                                     Bop(Ge,iVar"res4",
9749                                                         LI 0)),
9750                                                 Dest
9751                                                   ("GE",F4,
9752                                                    Dest
9753                                                      ("CPSR",CTy"PSR",
9754                                                       qVar"s")))])]))))))))))
9755;
9756val dfn'SignedSaturatingAddSub8_def = Def
9757  ("dfn'SignedSaturatingAddSub8",
9758   TP[bVar"sub",Var("d",F4),Var("n",F4),Var("m",F4)],
9759   Close
9760     (qVar"state",
9761      Let(TP[Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),qVar"s"],
9762          Apply
9763            (Call
9764               ("SignedParallelAddSub8",
9765                ATy(qTy,PTy(PTy(iTy,PTy(iTy,PTy(iTy,iTy))),qTy)),
9766                TP[bVar"sub",Var("n",F4),Var("m",F4)]),qVar"state"),
9767          Let(TP[iVar"res1",iVar"res2",iVar"res3",iVar"res4"],
9768              Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),
9769              Let(TP[Var("v",F8),qVar"s"],
9770                  Apply
9771                    (Call
9772                       ("SignedSat",ATy(qTy,PTy(F8,qTy)),
9773                        TP[iVar"res4",LN 8]),qVar"s"),
9774                  Apply
9775                    (Call("IncPC",ATy(qTy,qTy),LU),
9776                     Let(TP[Var("v",PTy(F32,F4)),qVar"s"],
9777                         Let(TP[Var("v",F32),qVar"s"],
9778                             Let(TP[Var("v0",F8),qVar"s"],
9779                                 Apply
9780                                   (Call
9781                                      ("SignedSat",ATy(qTy,PTy(F8,qTy)),
9782                                       TP[iVar"res3",LN 8]),qVar"s"),
9783                                 Let(TP[Var("v0",FTy 24),qVar"s"],
9784                                     Let(TP[Var("v1",F8),qVar"s"],
9785                                         Apply
9786                                           (Call
9787                                              ("SignedSat",
9788                                               ATy(qTy,PTy(F8,qTy)),
9789                                               TP[iVar"res2",LN 8]),
9790                                            qVar"s"),
9791                                         Let(TP[Var("v1",F16),qVar"s"],
9792                                             Let(TP[Var("v2",F8),qVar"s"],
9793                                                 Apply
9794                                                   (Call
9795                                                      ("SignedSat",
9796                                                       ATy(qTy,PTy(F8,qTy)),
9797                                                       TP[iVar"res1",LN 8]),
9798                                                    qVar"s"),
9799                                                 TP[CC[Var("v1",F8),
9800                                                       Var("v2",F8)],
9801                                                    qVar"s"]),
9802                                             TP[CC[Var("v0",F8),
9803                                                   Var("v1",F16)],qVar"s"])),
9804                                     TP[CC[Var("v",F8),Var("v0",FTy 24)],
9805                                        qVar"s"])),
9806                             TP[TP[Var("v",F32),Var("d",F4)],qVar"s"]),
9807                         Apply
9808                           (Call
9809                              ("write'R",ATy(qTy,qTy),Var("v",PTy(F32,F4))),
9810                            qVar"s"))))))))
9811;
9812val dfn'SignedHalvingAddSub8_def = Def
9813  ("dfn'SignedHalvingAddSub8",
9814   TP[bVar"sub",Var("d",F4),Var("n",F4),Var("m",F4)],
9815   Close
9816     (qVar"state",
9817      Let(TP[Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),qVar"s"],
9818          Apply
9819            (Call
9820               ("SignedParallelAddSub8",
9821                ATy(qTy,PTy(PTy(iTy,PTy(iTy,PTy(iTy,iTy))),qTy)),
9822                TP[bVar"sub",Var("n",F4),Var("m",F4)]),qVar"state"),
9823          Let(TP[iVar"res1",iVar"res2",iVar"res3",iVar"res4"],
9824              Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),
9825              Apply
9826                (Call("IncPC",ATy(qTy,qTy),LU),
9827                 Apply
9828                   (Call
9829                      ("write'R",ATy(qTy,qTy),
9830                       TP[CC[Mop(Cast F8,Bop(Div,iVar"res4",LI 2)),
9831                             Mop(Cast F8,Bop(Div,iVar"res3",LI 2)),
9832                             Mop(Cast F8,Bop(Div,iVar"res2",LI 2)),
9833                             Mop(Cast F8,Bop(Div,iVar"res1",LI 2))],
9834                          Var("d",F4)]),qVar"s"))))))
9835;
9836val UnsignedParallelAddSub16_def = Def
9837  ("UnsignedParallelAddSub16",TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)],
9838   Close
9839     (qVar"state",
9840      Let(TP[Var("v",F32),qVar"s"],
9841          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"),
9842          Let(TP[Var("v0",F32),qVar"s"],
9843              Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"),
9844              TP[CS(Var("op",FTy 2),
9845                    [(LW(0,2),
9846                      TP[Bop(Add,
9847                             Call
9848                               ("UInt",iTy,EX(Var("v",F32),LN 15,LN 0,F16)),
9849                             Call
9850                               ("UInt",iTy,
9851                                EX(Var("v0",F32),LN 15,LN 0,F16))),
9852                         Bop(Add,
9853                             Call
9854                               ("UInt",iTy,
9855                                EX(Var("v",F32),LN 31,LN 16,F16)),
9856                             Call
9857                               ("UInt",iTy,
9858                                EX(Var("v0",F32),LN 31,LN 16,F16)))]),
9859                     (LW(1,2),
9860                      TP[Bop(Sub,
9861                             Call
9862                               ("UInt",iTy,EX(Var("v",F32),LN 15,LN 0,F16)),
9863                             Call
9864                               ("UInt",iTy,
9865                                EX(Var("v0",F32),LN 31,LN 16,F16))),
9866                         Bop(Add,
9867                             Call
9868                               ("UInt",iTy,
9869                                EX(Var("v",F32),LN 31,LN 16,F16)),
9870                             Call
9871                               ("UInt",iTy,
9872                                EX(Var("v0",F32),LN 15,LN 0,F16)))]),
9873                     (LW(2,2),
9874                      TP[Bop(Add,
9875                             Call
9876                               ("UInt",iTy,EX(Var("v",F32),LN 15,LN 0,F16)),
9877                             Call
9878                               ("UInt",iTy,
9879                                EX(Var("v0",F32),LN 31,LN 16,F16))),
9880                         Bop(Sub,
9881                             Call
9882                               ("UInt",iTy,
9883                                EX(Var("v",F32),LN 31,LN 16,F16)),
9884                             Call
9885                               ("UInt",iTy,
9886                                EX(Var("v0",F32),LN 15,LN 0,F16)))]),
9887                     (LW(3,2),
9888                      TP[Bop(Sub,
9889                             Call
9890                               ("UInt",iTy,EX(Var("v",F32),LN 15,LN 0,F16)),
9891                             Call
9892                               ("UInt",iTy,
9893                                EX(Var("v0",F32),LN 15,LN 0,F16))),
9894                         Bop(Sub,
9895                             Call
9896                               ("UInt",iTy,
9897                                EX(Var("v",F32),LN 31,LN 16,F16)),
9898                             Call
9899                               ("UInt",iTy,
9900                                EX(Var("v0",F32),LN 31,LN 16,F16)))])]),
9901                 qVar"s"]))))
9902;
9903val dfn'UnsignedAddSub16_def = Def
9904  ("dfn'UnsignedAddSub16",
9905   TP[Var("op",FTy 2),Var("d",F4),Var("n",F4),Var("m",F4)],
9906   Close
9907     (qVar"state",
9908      Let(TP[Var("v",PTy(iTy,iTy)),qVar"s"],
9909          Apply
9910            (Call
9911               ("UnsignedParallelAddSub16",ATy(qTy,PTy(PTy(iTy,iTy),qTy)),
9912                TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)]),qVar"state"),
9913          Let(TP[iVar"res1",iVar"res2"],Var("v",PTy(iTy,iTy)),
9914              Let(qVar"s",
9915                  Apply
9916                    (Call
9917                       ("write'R",ATy(qTy,qTy),
9918                        TP[CC[Mop(Cast F16,iVar"res2"),
9919                              Mop(Cast F16,iVar"res1")],Var("d",F4)]),
9920                     qVar"s"),
9921                  Let(qVar"s",
9922                      Rupd
9923                        ("CPSR",
9924                         TP[qVar"s",
9925                            Rupd
9926                              ("GE",
9927                               TP[Dest("CPSR",CTy"PSR",qVar"s"),
9928                                  BFI(LN 1,LN 0,
9929                                      ITE(Bop(Ge,iVar"res1",
9930                                              ITE(Bop(In,Var("op",FTy 2),
9931                                                      SL[LW(1,2),LW(3,2)]),
9932                                                  LI 0,LI 65536)),LW(3,2),
9933                                          LW(0,2)),
9934                                      Dest
9935                                        ("GE",F4,
9936                                         Dest("CPSR",CTy"PSR",qVar"s")))])]),
9937                      Apply
9938                        (Call("IncPC",ATy(qTy,qTy),LU),
9939                         Rupd
9940                           ("CPSR",
9941                            TP[qVar"s",
9942                               Rupd
9943                                 ("GE",
9944                                  TP[Dest("CPSR",CTy"PSR",qVar"s"),
9945                                     BFI(LN 3,LN 2,
9946                                         ITE(Bop(Ge,iVar"res2",
9947                                                 ITE(Bop(In,
9948                                                         Var("op",FTy 2),
9949                                                         SL[LW(2,2),
9950                                                            LW(3,2)]),
9951                                                     LI 0,LI 65536)),
9952                                             LW(3,2),LW(0,2)),
9953                                         Dest
9954                                           ("GE",F4,
9955                                            Dest("CPSR",CTy"PSR",qVar"s")))])]))))))))
9956;
9957val dfn'UnsignedSaturatingAddSub16_def = Def
9958  ("dfn'UnsignedSaturatingAddSub16",
9959   TP[Var("op",FTy 2),Var("d",F4),Var("n",F4),Var("m",F4)],
9960   Close
9961     (qVar"state",
9962      Let(TP[Var("v",PTy(iTy,iTy)),qVar"s"],
9963          Apply
9964            (Call
9965               ("UnsignedParallelAddSub16",ATy(qTy,PTy(PTy(iTy,iTy),qTy)),
9966                TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)]),qVar"state"),
9967          Let(TP[iVar"res1",iVar"res2"],Var("v",PTy(iTy,iTy)),
9968              Let(TP[Var("v",F16),qVar"s"],
9969                  Apply
9970                    (Call
9971                       ("UnsignedSat",ATy(qTy,PTy(F16,qTy)),
9972                        TP[iVar"res2",LN 16]),qVar"s"),
9973                  Apply
9974                    (Call("IncPC",ATy(qTy,qTy),LU),
9975                     Let(TP[Var("v",PTy(F32,F4)),qVar"s"],
9976                         Let(TP[Var("v",F32),qVar"s"],
9977                             Let(TP[Var("v0",F16),qVar"s"],
9978                                 Apply
9979                                   (Call
9980                                      ("UnsignedSat",
9981                                       ATy(qTy,PTy(F16,qTy)),
9982                                       TP[iVar"res1",LN 16]),qVar"s"),
9983                                 TP[CC[Var("v",F16),Var("v0",F16)],qVar"s"]),
9984                             TP[TP[Var("v",F32),Var("d",F4)],qVar"s"]),
9985                         Apply
9986                           (Call
9987                              ("write'R",ATy(qTy,qTy),Var("v",PTy(F32,F4))),
9988                            qVar"s"))))))))
9989;
9990val dfn'UnsignedHalvingAddSub16_def = Def
9991  ("dfn'UnsignedHalvingAddSub16",
9992   TP[Var("op",FTy 2),Var("d",F4),Var("n",F4),Var("m",F4)],
9993   Close
9994     (qVar"state",
9995      Let(TP[Var("v",PTy(iTy,iTy)),qVar"s"],
9996          Apply
9997            (Call
9998               ("UnsignedParallelAddSub16",ATy(qTy,PTy(PTy(iTy,iTy),qTy)),
9999                TP[Var("op",FTy 2),Var("n",F4),Var("m",F4)]),qVar"state"),
10000          Let(TP[iVar"res1",iVar"res2"],Var("v",PTy(iTy,iTy)),
10001              Apply
10002                (Call("IncPC",ATy(qTy,qTy),LU),
10003                 Apply
10004                   (Call
10005                      ("write'R",ATy(qTy,qTy),
10006                       TP[CC[Mop(Cast F16,Bop(Div,iVar"res2",LI 2)),
10007                             Mop(Cast F16,Bop(Div,iVar"res1",LI 2))],
10008                          Var("d",F4)]),qVar"s"))))))
10009;
10010val UnsignedParallelAddSub8_def = Def
10011  ("UnsignedParallelAddSub8",TP[bVar"sub",Var("n",F4),Var("m",F4)],
10012   Close
10013     (qVar"state",
10014      Let(TP[Var("v",F32),qVar"s"],
10015          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"),
10016          Let(TP[Var("v0",F32),qVar"s"],
10017              Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"),
10018              TP[ITE(bVar"sub",
10019                     TP[Bop(Sub,
10020                            Call("UInt",iTy,EX(Var("v",F32),LN 7,LN 0,F8)),
10021                            Call
10022                              ("UInt",iTy,EX(Var("v0",F32),LN 7,LN 0,F8))),
10023                        Bop(Sub,
10024                            Call
10025                              ("UInt",iTy,EX(Var("v",F32),LN 15,LN 8,F8)),
10026                            Call
10027                              ("UInt",iTy,EX(Var("v0",F32),LN 15,LN 8,F8))),
10028                        Bop(Sub,
10029                            Call
10030                              ("UInt",iTy,EX(Var("v",F32),LN 23,LN 16,F8)),
10031                            Call
10032                              ("UInt",iTy,EX(Var("v0",F32),LN 23,LN 16,F8))),
10033                        Bop(Sub,
10034                            Call
10035                              ("UInt",iTy,EX(Var("v",F32),LN 31,LN 24,F8)),
10036                            Call
10037                              ("UInt",iTy,EX(Var("v0",F32),LN 31,LN 24,F8)))],
10038                     TP[Bop(Add,
10039                            Call("UInt",iTy,EX(Var("v",F32),LN 7,LN 0,F8)),
10040                            Call
10041                              ("UInt",iTy,EX(Var("v0",F32),LN 7,LN 0,F8))),
10042                        Bop(Add,
10043                            Call
10044                              ("UInt",iTy,EX(Var("v",F32),LN 15,LN 8,F8)),
10045                            Call
10046                              ("UInt",iTy,EX(Var("v0",F32),LN 15,LN 8,F8))),
10047                        Bop(Add,
10048                            Call
10049                              ("UInt",iTy,EX(Var("v",F32),LN 23,LN 16,F8)),
10050                            Call
10051                              ("UInt",iTy,EX(Var("v0",F32),LN 23,LN 16,F8))),
10052                        Bop(Add,
10053                            Call
10054                              ("UInt",iTy,EX(Var("v",F32),LN 31,LN 24,F8)),
10055                            Call
10056                              ("UInt",iTy,EX(Var("v0",F32),LN 31,LN 24,F8)))]),
10057                 qVar"s"]))))
10058;
10059val dfn'UnsignedAddSub8_def = Def
10060  ("dfn'UnsignedAddSub8",
10061   TP[bVar"sub",Var("d",F4),Var("n",F4),Var("m",F4)],
10062   Close
10063     (qVar"state",
10064      Let(TP[Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),qVar"s"],
10065          Apply
10066            (Call
10067               ("UnsignedParallelAddSub8",
10068                ATy(qTy,PTy(PTy(iTy,PTy(iTy,PTy(iTy,iTy))),qTy)),
10069                TP[bVar"sub",Var("n",F4),Var("m",F4)]),qVar"state"),
10070          Let(TP[iVar"res1",iVar"res2",iVar"res3",iVar"res4"],
10071              Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),
10072              Let(qVar"s",
10073                  Apply
10074                    (Call
10075                       ("write'R",ATy(qTy,qTy),
10076                        TP[CC[Mop(Cast F8,iVar"res4"),
10077                              Mop(Cast F8,iVar"res3"),
10078                              Mop(Cast F8,iVar"res2"),
10079                              Mop(Cast F8,iVar"res1")],Var("d",F4)]),
10080                     qVar"s"),
10081                  Let(iVar"ge_lim",ITE(bVar"sub",LI 0,LI 256),
10082                      Let(qVar"s",
10083                          Rupd
10084                            ("CPSR",
10085                             TP[qVar"s",
10086                                Rupd
10087                                  ("GE",
10088                                   TP[Dest("CPSR",CTy"PSR",qVar"s"),
10089                                      BFI(LN 0,LN 0,
10090                                          Mop(Cast F1,
10091                                              Bop(Ge,iVar"res1",
10092                                                  iVar"ge_lim")),
10093                                          Dest
10094                                            ("GE",F4,
10095                                             Dest("CPSR",CTy"PSR",qVar"s")))])]),
10096                          Let(qVar"s",
10097                              Rupd
10098                                ("CPSR",
10099                                 TP[qVar"s",
10100                                    Rupd
10101                                      ("GE",
10102                                       TP[Dest("CPSR",CTy"PSR",qVar"s"),
10103                                          BFI(LN 1,LN 1,
10104                                              Mop(Cast F1,
10105                                                  Bop(Ge,iVar"res2",
10106                                                      iVar"ge_lim")),
10107                                              Dest
10108                                                ("GE",F4,
10109                                                 Dest
10110                                                   ("CPSR",CTy"PSR",
10111                                                    qVar"s")))])]),
10112                              Let(qVar"s",
10113                                  Rupd
10114                                    ("CPSR",
10115                                     TP[qVar"s",
10116                                        Rupd
10117                                          ("GE",
10118                                           TP[Dest
10119                                                ("CPSR",CTy"PSR",qVar"s"),
10120                                              BFI(LN 2,LN 2,
10121                                                  Mop(Cast F1,
10122                                                      Bop(Ge,iVar"res3",
10123                                                          iVar"ge_lim")),
10124                                                  Dest
10125                                                    ("GE",F4,
10126                                                     Dest
10127                                                       ("CPSR",CTy"PSR",
10128                                                        qVar"s")))])]),
10129                                  Apply
10130                                    (Call("IncPC",ATy(qTy,qTy),LU),
10131                                     Rupd
10132                                       ("CPSR",
10133                                        TP[qVar"s",
10134                                           Rupd
10135                                             ("GE",
10136                                              TP[Dest
10137                                                   ("CPSR",CTy"PSR",
10138                                                    qVar"s"),
10139                                                 BFI(LN 3,LN 3,
10140                                                     Mop(Cast F1,
10141                                                         Bop(Ge,
10142                                                             iVar"res4",
10143                                                             iVar"ge_lim")),
10144                                                     Dest
10145                                                       ("GE",F4,
10146                                                        Dest
10147                                                          ("CPSR",
10148                                                           CTy"PSR",
10149                                                           qVar"s")))])])))))))))))
10150;
10151val dfn'UnsignedSaturatingAddSub8_def = Def
10152  ("dfn'UnsignedSaturatingAddSub8",
10153   TP[bVar"sub",Var("d",F4),Var("n",F4),Var("m",F4)],
10154   Close
10155     (qVar"state",
10156      Let(TP[Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),qVar"s"],
10157          Apply
10158            (Call
10159               ("UnsignedParallelAddSub8",
10160                ATy(qTy,PTy(PTy(iTy,PTy(iTy,PTy(iTy,iTy))),qTy)),
10161                TP[bVar"sub",Var("n",F4),Var("m",F4)]),qVar"state"),
10162          Let(TP[iVar"res1",iVar"res2",iVar"res3",iVar"res4"],
10163              Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),
10164              Let(TP[Var("v",F8),qVar"s"],
10165                  Apply
10166                    (Call
10167                       ("UnsignedSat",ATy(qTy,PTy(F8,qTy)),
10168                        TP[iVar"res4",LN 8]),qVar"s"),
10169                  Apply
10170                    (Call("IncPC",ATy(qTy,qTy),LU),
10171                     Let(TP[Var("v",PTy(F32,F4)),qVar"s"],
10172                         Let(TP[Var("v",F32),qVar"s"],
10173                             Let(TP[Var("v0",F8),qVar"s"],
10174                                 Apply
10175                                   (Call
10176                                      ("UnsignedSat",ATy(qTy,PTy(F8,qTy)),
10177                                       TP[iVar"res3",LN 8]),qVar"s"),
10178                                 Let(TP[Var("v0",FTy 24),qVar"s"],
10179                                     Let(TP[Var("v1",F8),qVar"s"],
10180                                         Apply
10181                                           (Call
10182                                              ("UnsignedSat",
10183                                               ATy(qTy,PTy(F8,qTy)),
10184                                               TP[iVar"res2",LN 8]),
10185                                            qVar"s"),
10186                                         Let(TP[Var("v1",F16),qVar"s"],
10187                                             Let(TP[Var("v2",F8),qVar"s"],
10188                                                 Apply
10189                                                   (Call
10190                                                      ("UnsignedSat",
10191                                                       ATy(qTy,PTy(F8,qTy)),
10192                                                       TP[iVar"res1",LN 8]),
10193                                                    qVar"s"),
10194                                                 TP[CC[Var("v1",F8),
10195                                                       Var("v2",F8)],
10196                                                    qVar"s"]),
10197                                             TP[CC[Var("v0",F8),
10198                                                   Var("v1",F16)],qVar"s"])),
10199                                     TP[CC[Var("v",F8),Var("v0",FTy 24)],
10200                                        qVar"s"])),
10201                             TP[TP[Var("v",F32),Var("d",F4)],qVar"s"]),
10202                         Apply
10203                           (Call
10204                              ("write'R",ATy(qTy,qTy),Var("v",PTy(F32,F4))),
10205                            qVar"s"))))))))
10206;
10207val dfn'UnsignedHalvingAddSub8_def = Def
10208  ("dfn'UnsignedHalvingAddSub8",
10209   TP[bVar"sub",Var("d",F4),Var("n",F4),Var("m",F4)],
10210   Close
10211     (qVar"state",
10212      Let(TP[Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),qVar"s"],
10213          Apply
10214            (Call
10215               ("UnsignedParallelAddSub8",
10216                ATy(qTy,PTy(PTy(iTy,PTy(iTy,PTy(iTy,iTy))),qTy)),
10217                TP[bVar"sub",Var("n",F4),Var("m",F4)]),qVar"state"),
10218          Let(TP[iVar"res1",iVar"res2",iVar"res3",iVar"res4"],
10219              Var("v",PTy(iTy,PTy(iTy,PTy(iTy,iTy)))),
10220              Apply
10221                (Call("IncPC",ATy(qTy,qTy),LU),
10222                 Apply
10223                   (Call
10224                      ("write'R",ATy(qTy,qTy),
10225                       TP[CC[Mop(Cast F8,Bop(Div,iVar"res4",LI 2)),
10226                             Mop(Cast F8,Bop(Div,iVar"res3",LI 2)),
10227                             Mop(Cast F8,Bop(Div,iVar"res2",LI 2)),
10228                             Mop(Cast F8,Bop(Div,iVar"res1",LI 2))],
10229                          Var("d",F4)]),qVar"s"))))))
10230;
10231val dfn'UnsignedSumAbsoluteDifferences_def = Def
10232  ("dfn'UnsignedSumAbsoluteDifferences",
10233   TP[Var("d",F4),Var("n",F4),Var("m",F4),Var("a",F4)],
10234   Close
10235     (qVar"state",
10236      Let(TP[Var("v",F32),qVar"s"],
10237          ITE(EQ(Var("a",F4),LW(15,4)),TP[LW(0,32),qVar"state"],
10238              Apply
10239                (Call("R",ATy(qTy,PTy(F32,qTy)),Var("a",F4)),qVar"state")),
10240          Let(TP[Var("v0",F32),qVar"s"],
10241              Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
10242              Let(TP[Var("v1",F32),qVar"s"],
10243                  Apply
10244                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"),
10245                  Apply
10246                    (Call("IncPC",ATy(qTy,qTy),LU),
10247                     Apply
10248                       (Call
10249                          ("write'R",ATy(qTy,qTy),
10250                           TP[Mop(Cast F32,
10251                                  Bop(Add,
10252                                      Bop(Add,
10253                                          Bop(Add,
10254                                              Bop(Add,
10255                                                  Call
10256                                                    ("UInt",iTy,
10257                                                     Var("v",F32)),
10258                                                  Mop(Abs,
10259                                                      Bop(Sub,
10260                                                          Call
10261                                                            ("UInt",iTy,
10262                                                             EX(Var("v0",
10263                                                                    F32),
10264                                                                LN 7,LN 0,
10265                                                                F8)),
10266                                                          Call
10267                                                            ("UInt",iTy,
10268                                                             EX(Var("v1",
10269                                                                    F32),
10270                                                                LN 7,LN 0,
10271                                                                F8))))),
10272                                              Mop(Abs,
10273                                                  Bop(Sub,
10274                                                      Call
10275                                                        ("UInt",iTy,
10276                                                         EX(Var("v0",F32),
10277                                                            LN 15,LN 8,F8)),
10278                                                      Call
10279                                                        ("UInt",iTy,
10280                                                         EX(Var("v1",F32),
10281                                                            LN 15,LN 8,F8))))),
10282                                          Mop(Abs,
10283                                              Bop(Sub,
10284                                                  Call
10285                                                    ("UInt",iTy,
10286                                                     EX(Var("v0",F32),
10287                                                        LN 23,LN 16,F8)),
10288                                                  Call
10289                                                    ("UInt",iTy,
10290                                                     EX(Var("v1",F32),
10291                                                        LN 23,LN 16,F8))))),
10292                                      Mop(Abs,
10293                                          Bop(Sub,
10294                                              Call
10295                                                ("UInt",iTy,
10296                                                 EX(Var("v0",F32),LN 31,
10297                                                    LN 24,F8)),
10298                                              Call
10299                                                ("UInt",iTy,
10300                                                 EX(Var("v1",F32),LN 31,
10301                                                    LN 24,F8)))))),
10302                              Var("d",F4)]),qVar"s")))))))
10303;
10304val GenerateIntegerZeroDivide_def = Def
10305  ("GenerateIntegerZeroDivide",AVar uTy,
10306   Close
10307     (qVar"state",
10308      Apply(Call("TakeUndefInstrException",ATy(qTy,qTy),LU),qVar"state")))
10309;
10310val dfn'Divide_def = Def
10311  ("dfn'Divide",TP[bVar"unsigned",Var("d",F4),Var("n",F4),Var("m",F4)],
10312   Close
10313     (qVar"state",
10314      Let(TP[Var("v",F32),qVar"s"],
10315          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"),
10316          ITE(EQ(Var("v",F32),LW(0,32)),
10317              ITE(Apply
10318                    (Call
10319                       ("IntegerZeroDivideTrappingEnabled",ATy(qTy,bTy),LU),
10320                     qVar"s"),
10321                  Apply
10322                    (Call("GenerateIntegerZeroDivide",ATy(qTy,qTy),LU),
10323                     qVar"s"),
10324                  Apply
10325                    (Call("IncPC",ATy(qTy,qTy),LU),
10326                     Apply
10327                       (Call
10328                          ("write'R",ATy(qTy,qTy),TP[LW(0,32),Var("d",F4)]),
10329                        qVar"s"))),
10330              Let(TP[Var("v",F32),qVar"s"],
10331                  ITE(bVar"unsigned",
10332                      Let(TP[Var("v",F32),qVar"s"],
10333                          Apply
10334                            (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
10335                             qVar"s"),
10336                          Let(TP[Var("v0",F32),qVar"s"],
10337                              Apply
10338                                (Call
10339                                   ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
10340                                 qVar"s"),
10341                              TP[Bop(Div,Var("v",F32),Var("v0",F32)),
10342                                 qVar"s"])),
10343                      Let(TP[Var("v",F32),qVar"s"],
10344                          Apply
10345                            (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
10346                             qVar"s"),
10347                          Let(TP[Var("v0",F32),qVar"s"],
10348                              Apply
10349                                (Call
10350                                   ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
10351                                 qVar"s"),
10352                              TP[Bop(Quot,Var("v",F32),Var("v0",F32)),
10353                                 qVar"s"]))),
10354                  Apply
10355                    (Call("IncPC",ATy(qTy,qTy),LU),
10356                     Apply
10357                       (Call
10358                          ("write'R",ATy(qTy,qTy),
10359                           TP[Var("v",F32),Var("d",F4)]),qVar"s")))))))
10360;
10361val dfn'PackHalfword_def = Def
10362  ("dfn'PackHalfword",
10363   TP[Var("shift_t",CTy"SRType"),nVar"shift_n",bVar"tbform",Var("d",F4),
10364      Var("n",F4),Var("m",F4)],
10365   Close
10366     (qVar"state",
10367      Let(TP[Var("v",F32),qVar"s"],
10368          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"),
10369          Let(TP[Var("v",F32),qVar"s"],
10370              Apply
10371                (Call
10372                   ("Shift",ATy(qTy,PTy(F32,qTy)),
10373                    TP[Var("v",F32),Var("shift_t",CTy"SRType"),
10374                       nVar"shift_n",
10375                       Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"s"))]),
10376                 qVar"s"),
10377              Let(TP[Var("v0",F16),qVar"s"],
10378                  ITE(bVar"tbform",
10379                      TP[EX(Var("v",F32),LN 15,LN 0,F16),qVar"s"],
10380                      Let(TP[Var("v",F32),qVar"s"],
10381                          Apply
10382                            (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
10383                             qVar"s"),
10384                          TP[EX(Var("v",F32),LN 15,LN 0,F16),qVar"s"])),
10385                  Let(TP[Var("v1",F16),qVar"s"],
10386                      ITE(bVar"tbform",
10387                          Let(TP[Var("v",F32),qVar"s"],
10388                              Apply
10389                                (Call
10390                                   ("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
10391                                 qVar"s"),
10392                              TP[EX(Var("v",F32),LN 31,LN 16,F16),qVar"s"]),
10393                          TP[EX(Var("v",F32),LN 31,LN 16,F16),qVar"s"]),
10394                      Apply
10395                        (Call("IncPC",ATy(qTy,qTy),LU),
10396                         Apply
10397                           (Call
10398                              ("write'R",ATy(qTy,qTy),
10399                               TP[CC[Var("v1",F16),Var("v0",F16)],
10400                                  Var("d",F4)]),qVar"s"))))))))
10401;
10402val dfn'Saturate_def = Def
10403  ("dfn'Saturate",
10404   TP[Var("shift_t",CTy"SRType"),nVar"shift_n",nVar"saturate_to",
10405      bVar"unsigned",Var("d",F4),Var("n",F4)],
10406   Close
10407     (qVar"state",
10408      Let(TP[Var("v",F32),qVar"s"],
10409          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"),
10410          Let(TP[Var("v",F32),qVar"s"],
10411              Apply
10412                (Call
10413                   ("Shift",ATy(qTy,PTy(F32,qTy)),
10414                    TP[Var("v",F32),Var("shift_t",CTy"SRType"),
10415                       nVar"shift_n",
10416                       Dest("C",bTy,Dest("CPSR",CTy"PSR",qVar"s"))]),
10417                 qVar"s"),
10418              Let(TP[Var("v",PTy(F32,bTy)),qVar"s"],
10419                  ITE(bVar"unsigned",
10420                      Apply
10421                        (Call
10422                           ("UnsignedSatQ",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
10423                            TP[Mop(Cast iTy,Var("v",F32)),
10424                               nVar"saturate_to"]),qVar"s"),
10425                      Apply
10426                        (Call
10427                           ("SignedSatQ",ATy(qTy,PTy(PTy(F32,bTy),qTy)),
10428                            TP[Mop(Cast iTy,Var("v",F32)),
10429                               nVar"saturate_to"]),qVar"s")),
10430                  Let(TP[Var("result",F32),bVar"sat"],
10431                      Var("v",PTy(F32,bTy)),
10432                      Let(qVar"s",
10433                          Apply
10434                            (Call
10435                               ("write'R",ATy(qTy,qTy),
10436                                TP[ITE(bVar"unsigned",Var("result",F32),
10437                                       Call
10438                                         ("SignExtendFrom",F32,
10439                                          TP[Var("result",F32),
10440                                             nVar"saturate_to"])),
10441                                   Var("d",F4)]),qVar"s"),
10442                          Apply
10443                            (Call("IncPC",ATy(qTy,qTy),LU),
10444                             ITE(bVar"sat",
10445                                 Rupd
10446                                   ("CPSR",
10447                                    TP[qVar"s",
10448                                       Rupd
10449                                         ("Q",
10450                                          TP[Dest("CPSR",CTy"PSR",qVar"s"),
10451                                             LT])]),qVar"s")))))))))
10452;
10453val dfn'Saturate16_def = Def
10454  ("dfn'Saturate16",
10455   TP[nVar"saturate_to",bVar"unsigned",Var("d",F4),Var("n",F4)],
10456   Close
10457     (qVar"state",
10458      Let(TP[Var("v",F32),qVar"s"],
10459          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"),
10460          Let(TP[Var("v",PTy(PTy(F16,bTy),PTy(F16,bTy))),qVar"s"],
10461              ITE(bVar"unsigned",
10462                  Let(TP[Var("v0",PTy(F16,bTy)),qVar"s"],
10463                      Apply
10464                        (Call
10465                           ("UnsignedSatQ",ATy(qTy,PTy(PTy(F16,bTy),qTy)),
10466                            TP[Mop(Cast iTy,
10467                                   EX(Var("v",F32),LN 15,LN 0,F16)),
10468                               nVar"saturate_to"]),qVar"s"),
10469                      Let(TP[Var("v1",PTy(F16,bTy)),qVar"s"],
10470                          Apply
10471                            (Call
10472                               ("UnsignedSatQ",
10473                                ATy(qTy,PTy(PTy(F16,bTy),qTy)),
10474                                TP[Mop(Cast iTy,
10475                                       EX(Var("v",F32),LN 31,LN 16,F16)),
10476                                   nVar"saturate_to"]),qVar"s"),
10477                          TP[TP[Var("v0",PTy(F16,bTy)),
10478                                Var("v1",PTy(F16,bTy))],qVar"s"])),
10479                  Let(TP[Var("v0",PTy(F16,bTy)),qVar"s"],
10480                      Apply
10481                        (Call
10482                           ("SignedSatQ",ATy(qTy,PTy(PTy(F16,bTy),qTy)),
10483                            TP[Mop(Cast iTy,
10484                                   EX(Var("v",F32),LN 15,LN 0,F16)),
10485                               nVar"saturate_to"]),qVar"s"),
10486                      Let(TP[Var("v1",PTy(F16,bTy)),qVar"s"],
10487                          Apply
10488                            (Call
10489                               ("SignedSatQ",
10490                                ATy(qTy,PTy(PTy(F16,bTy),qTy)),
10491                                TP[Mop(Cast iTy,
10492                                       EX(Var("v",F32),LN 31,LN 16,F16)),
10493                                   nVar"saturate_to"]),qVar"s"),
10494                          TP[TP[Var("v0",PTy(F16,bTy)),
10495                                Var("v1",PTy(F16,bTy))],qVar"s"]))),
10496              Let(TP[TP[Var("result1",F16),bVar"sat1"],Var("result2",F16),
10497                     bVar"sat2"],Var("v",PTy(PTy(F16,bTy),PTy(F16,bTy))),
10498                  Let(qVar"s",
10499                      Apply
10500                        (Call
10501                           ("write'R",ATy(qTy,qTy),
10502                            TP[ITE(bVar"unsigned",
10503                                   CC[Var("result2",F16),
10504                                      Var("result1",F16)],
10505                                   CC[Call
10506                                        ("SignExtendFrom",F16,
10507                                         TP[Var("result2",F16),
10508                                            nVar"saturate_to"]),
10509                                      Call
10510                                        ("SignExtendFrom",F16,
10511                                         TP[Var("result1",F16),
10512                                            nVar"saturate_to"])]),
10513                               Var("d",F4)]),qVar"s"),
10514                      Apply
10515                        (Call("IncPC",ATy(qTy,qTy),LU),
10516                         ITE(Bop(Or,bVar"sat1",bVar"sat2"),
10517                             Rupd
10518                               ("CPSR",
10519                                TP[qVar"s",
10520                                   Rupd
10521                                     ("Q",
10522                                      TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]),
10523                             qVar"s"))))))))
10524;
10525val dfn'ExtendByte_def = Def
10526  ("dfn'ExtendByte",
10527   TP[bVar"unsigned",Var("d",F4),Var("n",F4),Var("m",F4),nVar"rotation"],
10528   Close
10529     (qVar"state",
10530      Let(TP[Var("v",F32),qVar"s"],
10531          ITE(EQ(Var("n",F4),LW(15,4)),TP[LW(0,32),qVar"state"],
10532              Apply
10533                (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state")),
10534          Let(TP[Var("v0",F32),qVar"s"],
10535              Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"),
10536              Let(TP[Var("v0",F32),qVar"s"],
10537                  Apply
10538                    (Call
10539                       ("ROR",ATy(qTy,PTy(F32,qTy)),
10540                        TP[Var("v0",F32),nVar"rotation"]),qVar"s"),
10541                  Apply
10542                    (Call("IncPC",ATy(qTy,qTy),LU),
10543                     Apply
10544                       (Call
10545                          ("write'R",ATy(qTy,qTy),
10546                           TP[Bop(Add,Var("v",F32),
10547                                  Call
10548                                    ("Extend",F32,
10549                                     TP[bVar"unsigned",
10550                                        EX(Var("v0",F32),LN 7,LN 0,F8)])),
10551                              Var("d",F4)]),qVar"s")))))))
10552;
10553val dfn'ExtendByte16_def = Def
10554  ("dfn'ExtendByte16",
10555   TP[bVar"unsigned",Var("d",F4),Var("n",F4),Var("m",F4),nVar"rotation"],
10556   Close
10557     (qVar"state",
10558      Let(TP[Var("v",F32),qVar"s"],
10559          ITE(EQ(Var("n",F4),LW(15,4)),TP[LW(0,32),qVar"state"],
10560              Apply
10561                (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state")),
10562          Let(TP[Var("v0",F32),qVar"s"],
10563              Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"),
10564              Let(TP[Var("v0",F32),qVar"s"],
10565                  Apply
10566                    (Call
10567                       ("ROR",ATy(qTy,PTy(F32,qTy)),
10568                        TP[Var("v0",F32),nVar"rotation"]),qVar"s"),
10569                  Apply
10570                    (Call("IncPC",ATy(qTy,qTy),LU),
10571                     Apply
10572                       (Call
10573                          ("write'R",ATy(qTy,qTy),
10574                           TP[CC[Bop(Add,EX(Var("v",F32),LN 31,LN 16,F16),
10575                                     Call
10576                                       ("Extend",F16,
10577                                        TP[bVar"unsigned",
10578                                           EX(Var("v0",F32),LN 23,LN 16,F8)])),
10579                                 Bop(Add,EX(Var("v",F32),LN 15,LN 0,F16),
10580                                     Call
10581                                       ("Extend",F16,
10582                                        TP[bVar"unsigned",
10583                                           EX(Var("v0",F32),LN 7,LN 0,F8)]))],
10584                              Var("d",F4)]),qVar"s")))))))
10585;
10586val dfn'ExtendHalfword_def = Def
10587  ("dfn'ExtendHalfword",
10588   TP[bVar"unsigned",Var("d",F4),Var("n",F4),Var("m",F4),nVar"rotation"],
10589   Close
10590     (qVar"state",
10591      Let(TP[Var("v",F32),qVar"s"],
10592          ITE(EQ(Var("n",F4),LW(15,4)),TP[LW(0,32),qVar"state"],
10593              Apply
10594                (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state")),
10595          Let(TP[Var("v0",F32),qVar"s"],
10596              Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"),
10597              Let(TP[Var("v0",F32),qVar"s"],
10598                  Apply
10599                    (Call
10600                       ("ROR",ATy(qTy,PTy(F32,qTy)),
10601                        TP[Var("v0",F32),nVar"rotation"]),qVar"s"),
10602                  Apply
10603                    (Call("IncPC",ATy(qTy,qTy),LU),
10604                     Apply
10605                       (Call
10606                          ("write'R",ATy(qTy,qTy),
10607                           TP[Bop(Add,Var("v",F32),
10608                                  Call
10609                                    ("Extend",F32,
10610                                     TP[bVar"unsigned",
10611                                        EX(Var("v0",F32),LN 15,LN 0,F16)])),
10612                              Var("d",F4)]),qVar"s")))))))
10613;
10614val dfn'SelectBytes_def = Def
10615  ("dfn'SelectBytes",TP[Var("d",F4),Var("n",F4),Var("m",F4)],
10616   Close
10617     (qVar"state",
10618      Let(TP[Var("v",F32),qVar"s"],
10619          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"),
10620          Let(TP[Var("v0",F32),qVar"s"],
10621              Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"s"),
10622              Apply
10623                (Call("IncPC",ATy(qTy,qTy),LU),
10624                 Apply
10625                   (Call
10626                      ("write'R",ATy(qTy,qTy),
10627                       TP[CC[ITE(Bop(Bit,
10628                                     Dest
10629                                       ("GE",F4,
10630                                        Dest("CPSR",CTy"PSR",qVar"s")),
10631                                     LN 3),
10632                                 EX(Var("v",F32),LN 31,LN 24,F8),
10633                                 EX(Var("v0",F32),LN 31,LN 24,F8)),
10634                             ITE(Bop(Bit,
10635                                     Dest
10636                                       ("GE",F4,
10637                                        Dest("CPSR",CTy"PSR",qVar"s")),
10638                                     LN 2),
10639                                 EX(Var("v",F32),LN 23,LN 16,F8),
10640                                 EX(Var("v0",F32),LN 23,LN 16,F8)),
10641                             ITE(Bop(Bit,
10642                                     Dest
10643                                       ("GE",F4,
10644                                        Dest("CPSR",CTy"PSR",qVar"s")),
10645                                     LN 1),EX(Var("v",F32),LN 15,LN 8,F8),
10646                                 EX(Var("v0",F32),LN 15,LN 8,F8)),
10647                             ITE(Bop(Bit,
10648                                     Dest
10649                                       ("GE",F4,
10650                                        Dest("CPSR",CTy"PSR",qVar"s")),
10651                                     LN 0),EX(Var("v",F32),LN 7,LN 0,F8),
10652                                 EX(Var("v0",F32),LN 7,LN 0,F8))],
10653                          Var("d",F4)]),qVar"s"))))))
10654;
10655val dfn'ByteReverse_def = Def
10656  ("dfn'ByteReverse",TP[Var("d",F4),Var("m",F4)],
10657   Close
10658     (qVar"state",
10659      Let(TP[Var("v",F32),qVar"s"],
10660          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"),
10661          Apply
10662            (Call("IncPC",ATy(qTy,qTy),LU),
10663             Apply
10664               (Call
10665                  ("write'R",ATy(qTy,qTy),
10666                   TP[CC[EX(Var("v",F32),LN 7,LN 0,F8),
10667                         EX(Var("v",F32),LN 15,LN 8,F8),
10668                         EX(Var("v",F32),LN 23,LN 16,F8),
10669                         EX(Var("v",F32),LN 31,LN 24,F8)],Var("d",F4)]),
10670                qVar"s")))))
10671;
10672val dfn'ByteReversePackedHalfword_def = Def
10673  ("dfn'ByteReversePackedHalfword",TP[Var("d",F4),Var("m",F4)],
10674   Close
10675     (qVar"state",
10676      Let(TP[Var("v",F32),qVar"s"],
10677          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"),
10678          Apply
10679            (Call("IncPC",ATy(qTy,qTy),LU),
10680             Apply
10681               (Call
10682                  ("write'R",ATy(qTy,qTy),
10683                   TP[CC[EX(Var("v",F32),LN 23,LN 16,F8),
10684                         EX(Var("v",F32),LN 31,LN 24,F8),
10685                         EX(Var("v",F32),LN 7,LN 0,F8),
10686                         EX(Var("v",F32),LN 15,LN 8,F8)],Var("d",F4)]),
10687                qVar"s")))))
10688;
10689val dfn'ByteReverseSignedHalfword_def = Def
10690  ("dfn'ByteReverseSignedHalfword",TP[Var("d",F4),Var("m",F4)],
10691   Close
10692     (qVar"state",
10693      Let(TP[Var("v",F32),qVar"s"],
10694          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"),
10695          Apply
10696            (Call("IncPC",ATy(qTy,qTy),LU),
10697             Apply
10698               (Call
10699                  ("write'R",ATy(qTy,qTy),
10700                   TP[CC[Mop(SE(FTy 24),EX(Var("v",F32),LN 7,LN 0,F8)),
10701                         EX(Var("v",F32),LN 15,LN 8,F8)],Var("d",F4)]),
10702                qVar"s")))))
10703;
10704val dfn'ReverseBits_def = Def
10705  ("dfn'ReverseBits",TP[Var("d",F4),Var("m",F4)],
10706   Close
10707     (qVar"state",
10708      Let(TP[Var("v",F32),qVar"s"],
10709          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),qVar"state"),
10710          Apply
10711            (Call("IncPC",ATy(qTy,qTy),LU),
10712             Apply
10713               (Call
10714                  ("write'R",ATy(qTy,qTy),
10715                   TP[Mop(Rev,Var("v",F32)),Var("d",F4)]),qVar"s")))))
10716;
10717val dfn'BitFieldExtract_def = Def
10718  ("dfn'BitFieldExtract",
10719   TP[bVar"unsigned",Var("d",F4),Var("n",F4),nVar"lsbit",nVar"widthminus1"],
10720   Close
10721     (qVar"state",
10722      Let(nVar"msbit",Bop(Add,nVar"lsbit",nVar"widthminus1"),
10723          Let(TP[Var("v",F32),qVar"s"],
10724              ITE(bVar"unsigned",
10725                  Let(TP[Var("v",F32),qVar"s"],
10726                      Apply
10727                        (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
10728                         qVar"state"),
10729                      TP[EX(Var("v",F32),nVar"msbit",nVar"lsbit",F32),
10730                         qVar"s"]),
10731                  Let(TP[Var("v",F32),qVar"s"],
10732                      Apply
10733                        (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
10734                         qVar"state"),
10735                      TP[Call
10736                           ("SignExtendFrom",F32,
10737                            TP[EX(Var("v",F32),nVar"msbit",nVar"lsbit",F32),
10738                               nVar"widthminus1"]),qVar"s"])),
10739              Apply
10740                (Call("IncPC",ATy(qTy,qTy),LU),
10741                 Apply
10742                   (Call
10743                      ("write'R",ATy(qTy,qTy),TP[Var("v",F32),Var("d",F4)]),
10744                    qVar"s"))))))
10745;
10746val dfn'BitFieldClearOrInsert_def = Def
10747  ("dfn'BitFieldClearOrInsert",
10748   TP[Var("d",F4),Var("n",F4),nVar"lsbit",nVar"msbit"],
10749   Close
10750     (qVar"state",
10751      Let(TP[Var("v",F32),qVar"s"],
10752          ITE(EQ(Var("n",F4),LW(15,4)),TP[LW(0,32),qVar"state"],
10753              Apply
10754                (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state")),
10755          Let(TP[Var("v0",F32),qVar"s"],
10756              Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("d",F4)),qVar"s"),
10757              Apply
10758                (Call("IncPC",ATy(qTy,qTy),LU),
10759                 Apply
10760                   (Call
10761                      ("write'R",ATy(qTy,qTy),
10762                       TP[Mop(Cast F32,
10763                              BFI(nVar"msbit",nVar"lsbit",
10764                                  EX(Mop(Cast vTy,Var("v",F32)),
10765                                     Bop(Sub,nVar"msbit",nVar"lsbit"),
10766                                     LN 0,vTy),Mop(Cast vTy,Var("v0",F32)))),
10767                          Var("d",F4)]),qVar"s"))))))
10768;
10769val dfn'LoadWord_def = Def
10770  ("dfn'LoadWord",
10771   TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4),
10772      Var("m",CTy"offset1")],
10773   Close
10774     (qVar"state",
10775      Let(TP[bVar"v",qVar"s"],
10776          Apply
10777            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
10778             qVar"state"),
10779          ITE(bVar"v",
10780              Let(TP[Var("v",F32),qVar"s"],
10781                  Apply
10782                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
10783                  Let(TP[Var("v0",F32),qVar"s"],
10784                      CS(Var("m",CTy"offset1"),
10785                         [(Call
10786                             ("register_form1",CTy"offset1",
10787                              TP[Var("m",F4),Var("shift_t",CTy"SRType"),
10788                                 nVar"shift_n"]),
10789                           Let(TP[Var("v",F32),qVar"s"],
10790                               Apply
10791                                 (Call
10792                                    ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
10793                                  qVar"s"),
10794                               Apply
10795                                 (Call
10796                                    ("Shift",ATy(qTy,PTy(F32,qTy)),
10797                                     TP[Var("v",F32),
10798                                        Var("shift_t",CTy"SRType"),
10799                                        nVar"shift_n",
10800                                        Dest
10801                                          ("C",bTy,
10802                                           Dest("CPSR",CTy"PSR",qVar"s"))]),
10803                                  qVar"s"))),
10804                          (Call
10805                             ("immediate_form1",CTy"offset1",
10806                              Var("imm32",F32)),
10807                           TP[Var("imm32",F32),qVar"s"])]),
10808                      Let(Var("offset_addr",F32),
10809                          ITE(bVar"add",
10810                              Bop(Add,Var("v",F32),Var("v0",F32)),
10811                              Bop(Sub,Var("v",F32),Var("v0",F32))),
10812                          Let(Var("address",F32),
10813                              ITE(bVar"index",Var("offset_addr",F32),
10814                                  Var("v",F32)),
10815                              Let(TP[Var("v",F32),qVar"s"],
10816                                  Apply
10817                                    (Call
10818                                       ("MemU",ATy(qTy,PTy(F32,qTy)),
10819                                        TP[Var("address",F32),LN 4]),
10820                                     qVar"s"),
10821                                  Let(qVar"s",
10822                                      ITE(bVar"wback",
10823                                          Apply
10824                                            (Call
10825                                               ("write'R",ATy(qTy,qTy),
10826                                                TP[Var("offset_addr",F32),
10827                                                   Var("n",F4)]),qVar"s"),
10828                                          qVar"s"),
10829                                      ITE(EQ(Var("t",F4),LW(15,4)),
10830                                          ITE(Call
10831                                                ("Aligned",bTy,
10832                                                 TP[Var("address",F32),
10833                                                    LN 4]),
10834                                              Apply
10835                                                (Call
10836                                                   ("LoadWritePC",
10837                                                    ATy(qTy,qTy),
10838                                                    Var("v",F32)),qVar"s"),
10839                                              Mop(Snd,
10840                                                  Apply
10841                                                    (Call
10842                                                       ("raise'exception",
10843                                                        ATy(qTy,
10844                                                            PTy(uTy,qTy)),
10845                                                        Call
10846                                                          ("UNPREDICTABLE",
10847                                                           CTy"exception",
10848                                                           LS"Load")),
10849                                                     qVar"s"))),
10850                                          Apply
10851                                            (Call("IncPC",ATy(qTy,qTy),LU),
10852                                             Let(TP[Var("v",PTy(F32,F4)),
10853                                                    qVar"s"],
10854                                                 Let(TP[Var("v",F32),
10855                                                        qVar"s"],
10856                                                     ITB([(Bop(Or,
10857                                                               Apply
10858                                                                 (Call
10859                                                                    ("UnalignedSupport",
10860                                                                     ATy(qTy,
10861                                                                         bTy),
10862                                                                     LU),
10863                                                                  qVar"s"),
10864                                                               Call
10865                                                                 ("Aligned",
10866                                                                  bTy,
10867                                                                  TP[Var("address",
10868                                                                         F32),
10869                                                                     LN 4])),
10870                                                           TP[Var("v",F32),
10871                                                              qVar"s"]),
10872                                                          (EQ(Dest
10873                                                                ("Encoding",
10874                                                                 CTy"Encoding",
10875                                                                 qVar"s"),
10876                                                              LC("Encoding_ARM",
10877                                                                 CTy"Encoding")),
10878                                                           Apply
10879                                                             (Call
10880                                                                ("ROR",
10881                                                                 ATy(qTy,
10882                                                                     PTy(F32,
10883                                                                         qTy)),
10884                                                                 TP[Var("v",
10885                                                                        F32),
10886                                                                    Bop(Mul,
10887                                                                        LN
10888                                                                         8,
10889                                                                        Mop(Cast
10890                                                                              nTy,
10891                                                                            EX(Var("address",
10892                                                                                   F32),
10893                                                                               LN
10894                                                                                1,
10895                                                                               LN
10896                                                                                0,
10897                                                                               FTy 2)))]),
10898                                                              qVar"s"))],
10899                                                         TP[LX F32,qVar"s"]),
10900                                                     TP[TP[Var("v",F32),
10901                                                           Var("t",F4)],
10902                                                        qVar"s"]),
10903                                                 Apply
10904                                                   (Call
10905                                                      ("write'R",
10906                                                       ATy(qTy,qTy),
10907                                                       Var("v",PTy(F32,F4))),
10908                                                    qVar"s")))))))))),
10909              qVar"s"))))
10910;
10911val dfn'LoadLiteral_def = Def
10912  ("dfn'LoadLiteral",TP[bVar"add",Var("t",F4),Var("imm32",F32)],
10913   Close
10914     (qVar"state",
10915      Let(TP[bVar"v",qVar"s"],
10916          Apply
10917            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),LW(15,4)),
10918             qVar"state"),
10919          ITE(bVar"v",
10920              Let(TP[Var("v",F32),qVar"s"],
10921                  Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"),
10922                  Let(Var("v",F32),
10923                      Call("Align",F32,TP[Var("v",F32),LN 4]),
10924                      Let(Var("address",F32),
10925                          ITE(bVar"add",
10926                              Bop(Add,Var("v",F32),Var("imm32",F32)),
10927                              Bop(Sub,Var("v",F32),Var("imm32",F32))),
10928                          Let(TP[Var("v",F32),qVar"s"],
10929                              Apply
10930                                (Call
10931                                   ("MemU",ATy(qTy,PTy(F32,qTy)),
10932                                    TP[Var("address",F32),LN 4]),qVar"s"),
10933                              ITE(EQ(Var("t",F4),LW(15,4)),
10934                                  ITE(Call
10935                                        ("Aligned",bTy,
10936                                         TP[Var("address",F32),LN 4]),
10937                                      Apply
10938                                        (Call
10939                                           ("LoadWritePC",ATy(qTy,qTy),
10940                                            Var("v",F32)),qVar"s"),
10941                                      Mop(Snd,
10942                                          Apply
10943                                            (Call
10944                                               ("raise'exception",
10945                                                ATy(qTy,PTy(uTy,qTy)),
10946                                                Call
10947                                                  ("UNPREDICTABLE",
10948                                                   CTy"exception",
10949                                                   LS"LoadLiteral")),
10950                                             qVar"s"))),
10951                                  Apply
10952                                    (Call("IncPC",ATy(qTy,qTy),LU),
10953                                     Let(TP[Var("v",PTy(F32,F4)),qVar"s"],
10954                                         Let(TP[Var("v",F32),qVar"s"],
10955                                             ITB([(Bop(Or,
10956                                                       Apply
10957                                                         (Call
10958                                                            ("UnalignedSupport",
10959                                                             ATy(qTy,bTy),
10960                                                             LU),qVar"s"),
10961                                                       Call
10962                                                         ("Aligned",bTy,
10963                                                          TP[Var("address",
10964                                                                 F32),LN 4])),
10965                                                   TP[Var("v",F32),qVar"s"]),
10966                                                  (EQ(Dest
10967                                                        ("Encoding",
10968                                                         CTy"Encoding",
10969                                                         qVar"s"),
10970                                                      LC("Encoding_ARM",
10971                                                         CTy"Encoding")),
10972                                                   Apply
10973                                                     (Call
10974                                                        ("ROR",
10975                                                         ATy(qTy,
10976                                                             PTy(F32,qTy)),
10977                                                         TP[Var("v",F32),
10978                                                            Bop(Mul,LN 8,
10979                                                                Mop(Cast
10980                                                                      nTy,
10981                                                                    EX(Var("address",
10982                                                                           F32),
10983                                                                       LN
10984                                                                        1,
10985                                                                       LN
10986                                                                        0,
10987                                                                       FTy 2)))]),
10988                                                      qVar"s"))],
10989                                                 TP[LX F32,qVar"s"]),
10990                                             TP[TP[Var("v",F32),
10991                                                   Var("t",F4)],qVar"s"]),
10992                                         Apply
10993                                           (Call
10994                                              ("write'R",ATy(qTy,qTy),
10995                                               Var("v",PTy(F32,F4))),
10996                                            qVar"s")))))))),qVar"s"))))
10997;
10998val dfn'LoadUnprivileged_def = Def
10999  ("dfn'LoadUnprivileged",
11000   TP[bVar"add",bVar"postindex",Var("t",F4),Var("n",F4),
11001      Var("m",CTy"offset1")],
11002   Close
11003     (qVar"state",
11004      Let(TP[bVar"v",qVar"s"],
11005          Apply
11006            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
11007             qVar"state"),
11008          ITE(bVar"v",
11009              Let(TP[Var("v",F32),qVar"s"],
11010                  Apply
11011                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
11012                  Let(TP[Var("v0",F32),qVar"s"],
11013                      CS(Var("m",CTy"offset1"),
11014                         [(Call
11015                             ("register_form1",CTy"offset1",
11016                              TP[Var("m",F4),Var("shift_t",CTy"SRType"),
11017                                 nVar"shift_n"]),
11018                           Let(TP[Var("v",F32),qVar"s"],
11019                               Apply
11020                                 (Call
11021                                    ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
11022                                  qVar"s"),
11023                               Apply
11024                                 (Call
11025                                    ("Shift",ATy(qTy,PTy(F32,qTy)),
11026                                     TP[Var("v",F32),
11027                                        Var("shift_t",CTy"SRType"),
11028                                        nVar"shift_n",
11029                                        Dest
11030                                          ("C",bTy,
11031                                           Dest("CPSR",CTy"PSR",qVar"s"))]),
11032                                  qVar"s"))),
11033                          (Call
11034                             ("immediate_form1",CTy"offset1",
11035                              Var("imm32",F32)),
11036                           TP[Var("imm32",F32),qVar"s"])]),
11037                      Let(Var("offset_addr",F32),
11038                          ITE(bVar"add",
11039                              Bop(Add,Var("v",F32),Var("v0",F32)),
11040                              Bop(Sub,Var("v",F32),Var("v0",F32))),
11041                          Let(Var("address",F32),
11042                              ITE(bVar"postindex",Var("v",F32),
11043                                  Var("offset_addr",F32)),
11044                              Let(TP[Var("v",F32),qVar"s"],
11045                                  Apply
11046                                    (Call
11047                                       ("MemU_unpriv",
11048                                        ATy(qTy,PTy(F32,qTy)),
11049                                        TP[Var("address",F32),LN 4]),
11050                                     qVar"s"),
11051                                  Let(TP[bVar"v0",qVar"s"],
11052                                      Let(qVar"s0",
11053                                          ITE(bVar"postindex",
11054                                              Apply
11055                                                (Call
11056                                                   ("write'R",
11057                                                    ATy(qTy,qTy),
11058                                                    TP[Var("offset_addr",
11059                                                           F32),
11060                                                       Var("n",F4)]),
11061                                                 qVar"s"),qVar"s"),
11062                                          TP[Apply
11063                                               (Call
11064                                                  ("UnalignedSupport",
11065                                                   ATy(qTy,bTy),LU),
11066                                                qVar"s0"),qVar"s0"]),
11067                                      Apply
11068                                        (Call("IncPC",ATy(qTy,qTy),LU),
11069                                         Let(TP[Var("v",PTy(F32,F4)),
11070                                                qVar"s"],
11071                                             Let(TP[Var("v",F32),qVar"s"],
11072                                                 ITB([(Bop(Or,bVar"v0",
11073                                                           Call
11074                                                             ("Aligned",
11075                                                              bTy,
11076                                                              TP[Var("address",
11077                                                                     F32),
11078                                                                 LN 4])),
11079                                                       TP[Var("v",F32),
11080                                                          qVar"s"]),
11081                                                      (EQ(Dest
11082                                                            ("Encoding",
11083                                                             CTy"Encoding",
11084                                                             qVar"s"),
11085                                                          LC("Encoding_ARM",
11086                                                             CTy"Encoding")),
11087                                                       Apply
11088                                                         (Call
11089                                                            ("ROR",
11090                                                             ATy(qTy,
11091                                                                 PTy(F32,
11092                                                                     qTy)),
11093                                                             TP[Var("v",
11094                                                                    F32),
11095                                                                Bop(Mul,
11096                                                                    LN 8,
11097                                                                    Mop(Cast
11098                                                                          nTy,
11099                                                                        EX(Var("address",
11100                                                                               F32),
11101                                                                           LN
11102                                                                            1,
11103                                                                           LN
11104                                                                            0,
11105                                                                           FTy 2)))]),
11106                                                          qVar"s"))],
11107                                                     TP[LX F32,qVar"s"]),
11108                                                 TP[TP[Var("v",F32),
11109                                                       Var("t",F4)],
11110                                                    qVar"s"]),
11111                                             Apply
11112                                               (Call
11113                                                  ("write'R",ATy(qTy,qTy),
11114                                                   Var("v",PTy(F32,F4))),
11115                                                qVar"s"))))))))),qVar"s"))))
11116;
11117val dfn'LoadByte_def = Def
11118  ("dfn'LoadByte",
11119   TP[bVar"unsigned",bVar"add",bVar"index",bVar"wback",Var("t",F4),
11120      Var("n",F4),Var("m",CTy"offset1")],
11121   Close
11122     (qVar"state",
11123      Let(TP[bVar"v",qVar"s"],
11124          Apply
11125            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
11126             qVar"state"),
11127          ITE(bVar"v",
11128              Let(TP[Var("v",F32),qVar"s"],
11129                  Apply
11130                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
11131                  Let(TP[Var("v0",F32),qVar"s"],
11132                      CS(Var("m",CTy"offset1"),
11133                         [(Call
11134                             ("register_form1",CTy"offset1",
11135                              TP[Var("m",F4),Var("shift_t",CTy"SRType"),
11136                                 nVar"shift_n"]),
11137                           Let(TP[Var("v",F32),qVar"s"],
11138                               Apply
11139                                 (Call
11140                                    ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
11141                                  qVar"s"),
11142                               Apply
11143                                 (Call
11144                                    ("Shift",ATy(qTy,PTy(F32,qTy)),
11145                                     TP[Var("v",F32),
11146                                        Var("shift_t",CTy"SRType"),
11147                                        nVar"shift_n",
11148                                        Dest
11149                                          ("C",bTy,
11150                                           Dest("CPSR",CTy"PSR",qVar"s"))]),
11151                                  qVar"s"))),
11152                          (Call
11153                             ("immediate_form1",CTy"offset1",
11154                              Var("imm32",F32)),
11155                           TP[Var("imm32",F32),qVar"s"])]),
11156                      Let(Var("offset_addr",F32),
11157                          ITE(bVar"add",
11158                              Bop(Add,Var("v",F32),Var("v0",F32)),
11159                              Bop(Sub,Var("v",F32),Var("v0",F32))),
11160                          Let(TP[Var("v",F8),qVar"s"],
11161                              Apply
11162                                (Call
11163                                   ("MemU",ATy(qTy,PTy(F8,qTy)),
11164                                    TP[ITE(bVar"index",
11165                                           Var("offset_addr",F32),
11166                                           Var("v",F32)),LN 1]),qVar"s"),
11167                              Let(qVar"s",
11168                                  Apply
11169                                    (Call
11170                                       ("write'R",ATy(qTy,qTy),
11171                                        TP[Call
11172                                             ("Extend",F32,
11173                                              TP[bVar"unsigned",
11174                                                 Var("v",F8)]),Var("t",F4)]),
11175                                     qVar"s"),
11176                                  Apply
11177                                    (Call("IncPC",ATy(qTy,qTy),LU),
11178                                     ITE(bVar"wback",
11179                                         Apply
11180                                           (Call
11181                                              ("write'R",ATy(qTy,qTy),
11182                                               TP[Var("offset_addr",F32),
11183                                                  Var("n",F4)]),qVar"s"),
11184                                         qVar"s"))))))),qVar"s"))))
11185;
11186val dfn'LoadByteLiteral_def = Def
11187  ("dfn'LoadByteLiteral",
11188   TP[bVar"unsigned",bVar"add",Var("t",F4),Var("imm32",F32)],
11189   Close
11190     (qVar"state",
11191      Let(TP[bVar"v",qVar"s"],
11192          Apply
11193            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),LW(15,4)),
11194             qVar"state"),
11195          ITE(bVar"v",
11196              Let(TP[Var("v",F32),qVar"s"],
11197                  Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"),
11198                  Let(Var("v",F32),
11199                      Call("Align",F32,TP[Var("v",F32),LN 4]),
11200                      Let(TP[Var("v",F8),qVar"s"],
11201                          Apply
11202                            (Call
11203                               ("MemU",ATy(qTy,PTy(F8,qTy)),
11204                                TP[ITE(bVar"add",
11205                                       Bop(Add,Var("v",F32),
11206                                           Var("imm32",F32)),
11207                                       Bop(Sub,Var("v",F32),
11208                                           Var("imm32",F32))),LN 1]),
11209                             qVar"s"),
11210                          Apply
11211                            (Call("IncPC",ATy(qTy,qTy),LU),
11212                             Apply
11213                               (Call
11214                                  ("write'R",ATy(qTy,qTy),
11215                                   TP[Call
11216                                        ("Extend",F32,
11217                                         TP[bVar"unsigned",Var("v",F8)]),
11218                                      Var("t",F4)]),qVar"s"))))),qVar"s"))))
11219;
11220val dfn'LoadByteUnprivileged_def = Def
11221  ("dfn'LoadByteUnprivileged",
11222   TP[bVar"add",bVar"postindex",Var("t",F4),Var("n",F4),
11223      Var("m",CTy"offset1")],
11224   Close
11225     (qVar"state",
11226      Let(TP[bVar"v",qVar"s"],
11227          Apply
11228            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
11229             qVar"state"),
11230          ITE(bVar"v",
11231              Let(TP[Var("v",F32),qVar"s"],
11232                  Apply
11233                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
11234                  Let(TP[Var("v0",F32),qVar"s"],
11235                      CS(Var("m",CTy"offset1"),
11236                         [(Call
11237                             ("register_form1",CTy"offset1",
11238                              TP[Var("m",F4),Var("shift_t",CTy"SRType"),
11239                                 nVar"shift_n"]),
11240                           Let(TP[Var("v",F32),qVar"s"],
11241                               Apply
11242                                 (Call
11243                                    ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
11244                                  qVar"s"),
11245                               Apply
11246                                 (Call
11247                                    ("Shift",ATy(qTy,PTy(F32,qTy)),
11248                                     TP[Var("v",F32),
11249                                        Var("shift_t",CTy"SRType"),
11250                                        nVar"shift_n",
11251                                        Dest
11252                                          ("C",bTy,
11253                                           Dest("CPSR",CTy"PSR",qVar"s"))]),
11254                                  qVar"s"))),
11255                          (Call
11256                             ("immediate_form1",CTy"offset1",
11257                              Var("imm32",F32)),
11258                           TP[Var("imm32",F32),qVar"s"])]),
11259                      Let(Var("offset_addr",F32),
11260                          ITE(bVar"add",
11261                              Bop(Add,Var("v",F32),Var("v0",F32)),
11262                              Bop(Sub,Var("v",F32),Var("v0",F32))),
11263                          Let(TP[Var("v",F8),qVar"s"],
11264                              Apply
11265                                (Call
11266                                   ("MemU_unpriv",ATy(qTy,PTy(F8,qTy)),
11267                                    TP[ITE(bVar"postindex",Var("v",F32),
11268                                           Var("offset_addr",F32)),LN 1]),
11269                                 qVar"s"),
11270                              Let(qVar"s",
11271                                  Apply
11272                                    (Call
11273                                       ("write'R",ATy(qTy,qTy),
11274                                        TP[Mop(Cast F32,Var("v",F8)),
11275                                           Var("t",F4)]),qVar"s"),
11276                                  Apply
11277                                    (Call("IncPC",ATy(qTy,qTy),LU),
11278                                     ITE(bVar"postindex",
11279                                         Apply
11280                                           (Call
11281                                              ("write'R",ATy(qTy,qTy),
11282                                               TP[Var("offset_addr",F32),
11283                                                  Var("n",F4)]),qVar"s"),
11284                                         qVar"s"))))))),qVar"s"))))
11285;
11286val dfn'LoadSignedByteUnprivileged_def = Def
11287  ("dfn'LoadSignedByteUnprivileged",
11288   TP[bVar"add",bVar"postindex",Var("t",F4),Var("n",F4),
11289      Var("m",CTy"offset2")],
11290   Close
11291     (qVar"state",
11292      Let(TP[bVar"v",qVar"s"],
11293          Apply
11294            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
11295             qVar"state"),
11296          ITE(bVar"v",
11297              Let(TP[Var("v",F32),qVar"s"],
11298                  Apply
11299                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
11300                  Let(TP[Var("v0",F32),qVar"s"],
11301                      CS(Var("m",CTy"offset2"),
11302                         [(Call("register_form2",CTy"offset2",Var("m",F4)),
11303                           Apply
11304                             (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
11305                              qVar"s")),
11306                          (Call
11307                             ("immediate_form2",CTy"offset2",
11308                              Var("imm32",F32)),
11309                           TP[Var("imm32",F32),qVar"s"])]),
11310                      Let(Var("offset_addr",F32),
11311                          ITE(bVar"add",
11312                              Bop(Add,Var("v",F32),Var("v0",F32)),
11313                              Bop(Sub,Var("v",F32),Var("v0",F32))),
11314                          Let(TP[Var("v",F8),qVar"s"],
11315                              Apply
11316                                (Call
11317                                   ("MemU_unpriv",ATy(qTy,PTy(F8,qTy)),
11318                                    TP[ITE(bVar"postindex",Var("v",F32),
11319                                           Var("offset_addr",F32)),LN 1]),
11320                                 qVar"s"),
11321                              Let(qVar"s",
11322                                  Apply
11323                                    (Call
11324                                       ("write'R",ATy(qTy,qTy),
11325                                        TP[Mop(SE F32,Var("v",F8)),
11326                                           Var("t",F4)]),qVar"s"),
11327                                  Apply
11328                                    (Call("IncPC",ATy(qTy,qTy),LU),
11329                                     ITE(bVar"postindex",
11330                                         Apply
11331                                           (Call
11332                                              ("write'R",ATy(qTy,qTy),
11333                                               TP[Var("offset_addr",F32),
11334                                                  Var("n",F4)]),qVar"s"),
11335                                         qVar"s"))))))),qVar"s"))))
11336;
11337val dfn'LoadHalf_def = Def
11338  ("dfn'LoadHalf",
11339   TP[bVar"unsigned",bVar"add",bVar"index",bVar"wback",Var("t",F4),
11340      Var("n",F4),Var("m",CTy"offset1")],
11341   Close
11342     (qVar"state",
11343      Let(TP[bVar"v",qVar"s"],
11344          Apply
11345            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
11346             qVar"state"),
11347          ITE(bVar"v",
11348              Let(TP[Var("v",F32),qVar"s"],
11349                  Apply
11350                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
11351                  Let(TP[Var("v0",F32),qVar"s"],
11352                      CS(Var("m",CTy"offset1"),
11353                         [(Call
11354                             ("register_form1",CTy"offset1",
11355                              TP[Var("m",F4),Var("shift_t",CTy"SRType"),
11356                                 nVar"shift_n"]),
11357                           Let(TP[Var("v",F32),qVar"s"],
11358                               Apply
11359                                 (Call
11360                                    ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
11361                                  qVar"s"),
11362                               Apply
11363                                 (Call
11364                                    ("Shift",ATy(qTy,PTy(F32,qTy)),
11365                                     TP[Var("v",F32),
11366                                        Var("shift_t",CTy"SRType"),
11367                                        nVar"shift_n",
11368                                        Dest
11369                                          ("C",bTy,
11370                                           Dest("CPSR",CTy"PSR",qVar"s"))]),
11371                                  qVar"s"))),
11372                          (Call
11373                             ("immediate_form1",CTy"offset1",
11374                              Var("imm32",F32)),
11375                           TP[Var("imm32",F32),qVar"s"])]),
11376                      Let(Var("offset_addr",F32),
11377                          ITE(bVar"add",
11378                              Bop(Add,Var("v",F32),Var("v0",F32)),
11379                              Bop(Sub,Var("v",F32),Var("v0",F32))),
11380                          Let(Var("address",F32),
11381                              ITE(bVar"index",Var("offset_addr",F32),
11382                                  Var("v",F32)),
11383                              Let(TP[Var("v",F16),qVar"s"],
11384                                  Apply
11385                                    (Call
11386                                       ("MemU",ATy(qTy,PTy(F16,qTy)),
11387                                        TP[Var("address",F32),LN 2]),
11388                                     qVar"s"),
11389                                  Let(TP[bVar"v0",qVar"s"],
11390                                      Let(qVar"s0",
11391                                          ITE(bVar"wback",
11392                                              Apply
11393                                                (Call
11394                                                   ("write'R",
11395                                                    ATy(qTy,qTy),
11396                                                    TP[Var("offset_addr",
11397                                                           F32),
11398                                                       Var("n",F4)]),
11399                                                 qVar"s"),qVar"s"),
11400                                          TP[Apply
11401                                               (Call
11402                                                  ("UnalignedSupport",
11403                                                   ATy(qTy,bTy),LU),
11404                                                qVar"s0"),qVar"s0"]),
11405                                      Apply
11406                                        (Call("IncPC",ATy(qTy,qTy),LU),
11407                                         Apply
11408                                           (Call
11409                                              ("write'R",ATy(qTy,qTy),
11410                                               TP[ITE(Bop(Or,bVar"v0",
11411                                                          Call
11412                                                            ("Aligned",
11413                                                             bTy,
11414                                                             TP[Var("address",
11415                                                                    F32),
11416                                                                LN 2])),
11417                                                      Call
11418                                                        ("Extend",F32,
11419                                                         TP[bVar"unsigned",
11420                                                            Var("v",F16)]),
11421                                                      LX F32),Var("t",F4)]),
11422                                            qVar"s")))))))),qVar"s"))))
11423;
11424val dfn'LoadHalfLiteral_def = Def
11425  ("dfn'LoadHalfLiteral",
11426   TP[bVar"unsigned",bVar"add",Var("t",F4),Var("imm32",F32)],
11427   Close
11428     (qVar"state",
11429      Let(TP[bVar"v",qVar"s"],
11430          Apply
11431            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),LW(15,4)),
11432             qVar"state"),
11433          ITE(bVar"v",
11434              Let(TP[Var("v",F32),qVar"s"],
11435                  Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"),
11436                  Let(Var("v",F32),
11437                      Call("Align",F32,TP[Var("v",F32),LN 4]),
11438                      Let(Var("address",F32),
11439                          ITE(bVar"add",
11440                              Bop(Add,Var("v",F32),Var("imm32",F32)),
11441                              Bop(Sub,Var("v",F32),Var("imm32",F32))),
11442                          Let(TP[Var("v",F16),qVar"s"],
11443                              Apply
11444                                (Call
11445                                   ("MemU",ATy(qTy,PTy(F16,qTy)),
11446                                    TP[Var("address",F32),LN 2]),qVar"s"),
11447                              Apply
11448                                (Call("IncPC",ATy(qTy,qTy),LU),
11449                                 Apply
11450                                   (Call
11451                                      ("write'R",ATy(qTy,qTy),
11452                                       TP[ITE(Bop(Or,
11453                                                  Apply
11454                                                    (Call
11455                                                       ("UnalignedSupport",
11456                                                        ATy(qTy,bTy),LU),
11457                                                     qVar"s"),
11458                                                  Call
11459                                                    ("Aligned",bTy,
11460                                                     TP[Var("address",F32),
11461                                                        LN 2])),
11462                                              Call
11463                                                ("Extend",F32,
11464                                                 TP[bVar"unsigned",
11465                                                    Var("v",F16)]),LX F32),
11466                                          Var("t",F4)]),qVar"s")))))),
11467              qVar"s"))))
11468;
11469val dfn'LoadHalfUnprivileged_def = Def
11470  ("dfn'LoadHalfUnprivileged",
11471   TP[bVar"unsigned",bVar"add",bVar"postindex",Var("t",F4),Var("n",F4),
11472      Var("m",CTy"offset2")],
11473   Close
11474     (qVar"state",
11475      Let(TP[bVar"v",qVar"s"],
11476          Apply
11477            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
11478             qVar"state"),
11479          ITE(bVar"v",
11480              Let(TP[Var("v",F32),qVar"s"],
11481                  Apply
11482                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
11483                  Let(TP[Var("v0",F32),qVar"s"],
11484                      CS(Var("m",CTy"offset2"),
11485                         [(Call("register_form2",CTy"offset2",Var("m",F4)),
11486                           Apply
11487                             (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
11488                              qVar"s")),
11489                          (Call
11490                             ("immediate_form2",CTy"offset2",
11491                              Var("imm32",F32)),
11492                           TP[Var("imm32",F32),qVar"s"])]),
11493                      Let(Var("offset_addr",F32),
11494                          ITE(bVar"add",
11495                              Bop(Add,Var("v",F32),Var("v0",F32)),
11496                              Bop(Sub,Var("v",F32),Var("v0",F32))),
11497                          Let(Var("address",F32),
11498                              ITE(bVar"postindex",Var("v",F32),
11499                                  Var("offset_addr",F32)),
11500                              Let(TP[Var("v",F16),qVar"s"],
11501                                  Apply
11502                                    (Call
11503                                       ("MemU_unpriv",
11504                                        ATy(qTy,PTy(F16,qTy)),
11505                                        TP[Var("address",F32),LN 2]),
11506                                     qVar"s"),
11507                                  Let(TP[bVar"v0",qVar"s"],
11508                                      Let(qVar"s0",
11509                                          ITE(bVar"postindex",
11510                                              Apply
11511                                                (Call
11512                                                   ("write'R",
11513                                                    ATy(qTy,qTy),
11514                                                    TP[Var("offset_addr",
11515                                                           F32),
11516                                                       Var("n",F4)]),
11517                                                 qVar"s"),qVar"s"),
11518                                          TP[Apply
11519                                               (Call
11520                                                  ("UnalignedSupport",
11521                                                   ATy(qTy,bTy),LU),
11522                                                qVar"s0"),qVar"s0"]),
11523                                      Apply
11524                                        (Call("IncPC",ATy(qTy,qTy),LU),
11525                                         Apply
11526                                           (Call
11527                                              ("write'R",ATy(qTy,qTy),
11528                                               TP[ITE(Bop(Or,bVar"v0",
11529                                                          Call
11530                                                            ("Aligned",
11531                                                             bTy,
11532                                                             TP[Var("address",
11533                                                                    F32),
11534                                                                LN 2])),
11535                                                      Call
11536                                                        ("Extend",F32,
11537                                                         TP[bVar"unsigned",
11538                                                            Var("v",F16)]),
11539                                                      LX F32),Var("t",F4)]),
11540                                            qVar"s")))))))),qVar"s"))))
11541;
11542val dfn'LoadMultiple_def = Def
11543  ("dfn'LoadMultiple",
11544   TP[bVar"increment",bVar"index",bVar"wback",Var("n",F4),
11545      Var("registers",F16)],
11546   Close
11547     (qVar"state",
11548      Let(TP[bVar"v",qVar"s"],
11549          Apply
11550            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
11551             qVar"state"),
11552          ITE(bVar"v",
11553              Let(TP[Var("v",F32),qVar"s"],
11554                  Apply
11555                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
11556                  Let(Var("length",F32),
11557                      Bop(Mul,LW(4,32),
11558                          Mop(Cast F32,
11559                              Call("BitCount",nTy,Var("registers",F16)))),
11560                      Let(Var("s",PTy(F32,qTy)),
11561                          Mop(Snd,
11562                              Apply
11563                                (For(TP[LN 0,LN 14,
11564                                        Close
11565                                          (nVar"i",
11566                                           Close
11567                                             (Var("state",PTy(F32,qTy)),
11568                                              ITE(Bop(Bit,
11569                                                      Var("registers",F16),
11570                                                      nVar"i"),
11571                                                  Let(Var("s",PTy(F32,qTy)),
11572                                                      Let(TP[Var("v",
11573                                                                 PTy(F32,
11574                                                                     F4)),
11575                                                             Var("s",
11576                                                                 PTy(F32,
11577                                                                     qTy))],
11578                                                          Let(TP[Var("v",
11579                                                                     F32),
11580                                                                 Var("s",
11581                                                                     PTy(F32,
11582                                                                         qTy))],
11583                                                              CS(Apply
11584                                                                   (Call
11585                                                                      ("MemA",
11586                                                                       ATy(qTy,
11587                                                                           PTy(F32,
11588                                                                               qTy)),
11589                                                                       TP[Mop(Fst,
11590                                                                              Var("state",
11591                                                                                  PTy(F32,
11592                                                                                      qTy))),
11593                                                                          LN
11594                                                                           4]),
11595                                                                    Mop(Snd,
11596                                                                        Var("state",
11597                                                                            PTy(F32,
11598                                                                                qTy)))),
11599                                                                 [(TP[Var("v",
11600                                                                          F32),
11601                                                                      qVar"s3"],
11602                                                                   TP[Var("v",
11603                                                                          F32),
11604                                                                      Mop(Fst,
11605                                                                          Var("state",
11606                                                                              PTy(F32,
11607                                                                                  qTy))),
11608                                                                      qVar"s3"])]),
11609                                                              TP[TP[Var("v",
11610                                                                        F32),
11611                                                                    Mop(Cast
11612                                                                          F4,
11613                                                                        nVar"i")],
11614                                                                 Var("s",
11615                                                                     PTy(F32,
11616                                                                         qTy))]),
11617                                                          TP[Mop(Fst,
11618                                                                 Var("s",
11619                                                                     PTy(F32,
11620                                                                         qTy))),
11621                                                             Apply
11622                                                               (Call
11623                                                                  ("write'R",
11624                                                                   ATy(qTy,
11625                                                                       qTy),
11626                                                                   Var("v",
11627                                                                       PTy(F32,
11628                                                                           F4))),
11629                                                                Mop(Snd,
11630                                                                    Var("s",
11631                                                                        PTy(F32,
11632                                                                            qTy))))]),
11633                                                      TP[LU,
11634                                                         Bop(Add,
11635                                                             Mop(Fst,
11636                                                                 Var("s",
11637                                                                     PTy(F32,
11638                                                                         qTy))),
11639                                                             LW(4,32)),
11640                                                         Mop(Snd,
11641                                                             Var("s",
11642                                                                 PTy(F32,
11643                                                                     qTy)))]),
11644                                                  TP[LU,
11645                                                     Var("state",
11646                                                         PTy(F32,qTy))])))]),
11647                                 TP[ITB([(EQ(bVar"index",bVar"increment"),
11648                                          Bop(Add,
11649                                              ITE(bVar"increment",
11650                                                  Var("v",F32),
11651                                                  Bop(Sub,Var("v",F32),
11652                                                      Var("length",F32))),
11653                                              LW(4,32))),
11654                                         (bVar"increment",Var("v",F32))],
11655                                        Bop(Sub,Var("v",F32),
11656                                            Var("length",F32))),qVar"s"])),
11657                          Let(Var("s",PTy(F32,qTy)),
11658                              ITE(Bop(Bit,Var("registers",F16),LN 15),
11659                                  Let(TP[Var("v",F32),
11660                                         Var("s",PTy(F32,qTy))],
11661                                      CS(Apply
11662                                           (Call
11663                                              ("MemA",
11664                                               ATy(qTy,PTy(F32,qTy)),
11665                                               TP[Mop(Fst,
11666                                                      Var("s",PTy(F32,qTy))),
11667                                                  LN 4]),
11668                                            Mop(Snd,Var("s",PTy(F32,qTy)))),
11669                                         [(TP[Var("v",F32),qVar"s3"],
11670                                           TP[Var("v",F32),
11671                                              Mop(Fst,
11672                                                  Var("s",PTy(F32,qTy))),
11673                                              qVar"s3"])]),
11674                                      TP[Mop(Fst,Var("s",PTy(F32,qTy))),
11675                                         Apply
11676                                           (Call
11677                                              ("LoadWritePC",ATy(qTy,qTy),
11678                                               Var("v",F32)),
11679                                            Mop(Snd,Var("s",PTy(F32,qTy))))]),
11680                                  TP[Mop(Fst,Var("s",PTy(F32,qTy))),
11681                                     Apply
11682                                       (Call("IncPC",ATy(qTy,qTy),LU),
11683                                        Mop(Snd,Var("s",PTy(F32,qTy))))]),
11684                              ITE(bVar"wback",
11685                                  ITE(Bop(Bit,Var("registers",F16),
11686                                          Mop(Cast nTy,Var("n",F4))),
11687                                      Apply
11688                                        (Call
11689                                           ("write'R",ATy(qTy,qTy),
11690                                            TP[LX F32,Var("n",F4)]),
11691                                         Mop(Snd,Var("s",PTy(F32,qTy)))),
11692                                      Apply
11693                                        (Call
11694                                           ("write'R",ATy(qTy,qTy),
11695                                            TP[ITE(bVar"increment",
11696                                                   Bop(Add,Var("v",F32),
11697                                                       Var("length",F32)),
11698                                                   Bop(Sub,Var("v",F32),
11699                                                       Var("length",F32))),
11700                                               Var("n",F4)]),
11701                                         Mop(Snd,Var("s",PTy(F32,qTy))))),
11702                                  Mop(Snd,Var("s",PTy(F32,qTy)))))))),
11703              qVar"s"))))
11704;
11705val dfn'LoadMultipleExceptionReturn_def = Def
11706  ("dfn'LoadMultipleExceptionReturn",
11707   TP[bVar"increment",bVar"wordhigher",bVar"wback",Var("n",F4),
11708      Var("registers",FTy 15)],
11709   Close
11710     (qVar"state",
11711      Let(TP[bVar"v",qVar"s"],
11712          Apply
11713            (Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
11714          Let(TP[bVar"v",qVar"s"],
11715              Apply
11716                (Call
11717                   ("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)),LU),
11718                 ITE(bVar"v",
11719                     Apply
11720                       (Call("TakeUndefInstrException",ATy(qTy,qTy),LU),
11721                        qVar"s"),qVar"s")),
11722              Let(TP[Var("v",F32),qVar"s"],
11723                  Apply
11724                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
11725                     ITE(bVar"v",
11726                         Mop(Snd,
11727                             Apply
11728                               (Call
11729                                  ("raise'exception",
11730                                   ATy(qTy,PTy(uTy,qTy)),
11731                                   Call
11732                                     ("UNPREDICTABLE",CTy"exception",
11733                                      LS"LoadMultipleExceptionReturn")),
11734                                qVar"s")),qVar"s")),
11735                  Let(Var("length",F32),
11736                      Bop(Add,
11737                          Bop(Mul,LW(4,32),
11738                              Mop(Cast F32,
11739                                  Call
11740                                    ("BitCount",nTy,
11741                                     Var("registers",FTy 15)))),LW(4,32)),
11742                      Let(Var("s",PTy(F32,qTy)),
11743                          Mop(Snd,
11744                              Apply
11745                                (For(TP[LN 0,LN 14,
11746                                        Close
11747                                          (nVar"i",
11748                                           Close
11749                                             (Var("state",PTy(F32,qTy)),
11750                                              ITE(Bop(Bit,
11751                                                      Var("registers",
11752                                                          FTy 15),nVar"i"),
11753                                                  Let(Var("s",PTy(F32,qTy)),
11754                                                      Let(TP[Var("v",
11755                                                                 PTy(F32,
11756                                                                     F4)),
11757                                                             Var("s",
11758                                                                 PTy(F32,
11759                                                                     qTy))],
11760                                                          Let(TP[Var("v",
11761                                                                     F32),
11762                                                                 Var("s",
11763                                                                     PTy(F32,
11764                                                                         qTy))],
11765                                                              CS(Apply
11766                                                                   (Call
11767                                                                      ("MemA",
11768                                                                       ATy(qTy,
11769                                                                           PTy(F32,
11770                                                                               qTy)),
11771                                                                       TP[Mop(Fst,
11772                                                                              Var("state",
11773                                                                                  PTy(F32,
11774                                                                                      qTy))),
11775                                                                          LN
11776                                                                           4]),
11777                                                                    Mop(Snd,
11778                                                                        Var("state",
11779                                                                            PTy(F32,
11780                                                                                qTy)))),
11781                                                                 [(TP[Var("v",
11782                                                                          F32),
11783                                                                      qVar"s3"],
11784                                                                   TP[Var("v",
11785                                                                          F32),
11786                                                                      Mop(Fst,
11787                                                                          Var("state",
11788                                                                              PTy(F32,
11789                                                                                  qTy))),
11790                                                                      qVar"s3"])]),
11791                                                              TP[TP[Var("v",
11792                                                                        F32),
11793                                                                    Mop(Cast
11794                                                                          F4,
11795                                                                        nVar"i")],
11796                                                                 Var("s",
11797                                                                     PTy(F32,
11798                                                                         qTy))]),
11799                                                          TP[Mop(Fst,
11800                                                                 Var("s",
11801                                                                     PTy(F32,
11802                                                                         qTy))),
11803                                                             Apply
11804                                                               (Call
11805                                                                  ("write'R",
11806                                                                   ATy(qTy,
11807                                                                       qTy),
11808                                                                   Var("v",
11809                                                                       PTy(F32,
11810                                                                           F4))),
11811                                                                Mop(Snd,
11812                                                                    Var("s",
11813                                                                        PTy(F32,
11814                                                                            qTy))))]),
11815                                                      TP[LU,
11816                                                         Bop(Add,
11817                                                             Mop(Fst,
11818                                                                 Var("s",
11819                                                                     PTy(F32,
11820                                                                         qTy))),
11821                                                             LW(4,32)),
11822                                                         Mop(Snd,
11823                                                             Var("s",
11824                                                                 PTy(F32,
11825                                                                     qTy)))]),
11826                                                  TP[LU,
11827                                                     Var("state",
11828                                                         PTy(F32,qTy))])))]),
11829                                 TP[ITB([(bVar"wordhigher",
11830                                          Bop(Add,
11831                                              ITE(bVar"increment",
11832                                                  Var("v",F32),
11833                                                  Bop(Sub,Var("v",F32),
11834                                                      Var("length",F32))),
11835                                              LW(4,32))),
11836                                         (bVar"increment",Var("v",F32))],
11837                                        Bop(Sub,Var("v",F32),
11838                                            Var("length",F32))),qVar"s"])),
11839                          Let(TP[Var("v0",F32),Var("s",PTy(F32,qTy))],
11840                              CS(Apply
11841                                   (Call
11842                                      ("MemA",ATy(qTy,PTy(F32,qTy)),
11843                                       TP[Mop(Fst,Var("s",PTy(F32,qTy))),
11844                                          LN 4]),
11845                                    Mop(Snd,Var("s",PTy(F32,qTy)))),
11846                                 [(TP[Var("v",F32),qVar"s3"],
11847                                   TP[Var("v",F32),
11848                                      Mop(Fst,Var("s",PTy(F32,qTy))),
11849                                      qVar"s3"])]),
11850                              Let(Var("s",PTy(F32,qTy)),
11851                                  ITE(bVar"wback",
11852                                      TP[Mop(Fst,Var("s",PTy(F32,qTy))),
11853                                         ITE(Bop(Bit,
11854                                                 Var("registers",FTy 15),
11855                                                 Mop(Cast nTy,Var("n",F4))),
11856                                             Apply
11857                                               (Call
11858                                                  ("write'R",ATy(qTy,qTy),
11859                                                   TP[LX F32,Var("n",F4)]),
11860                                                Mop(Snd,
11861                                                    Var("s",PTy(F32,qTy)))),
11862                                             Apply
11863                                               (Call
11864                                                  ("write'R",ATy(qTy,qTy),
11865                                                   TP[ITE(bVar"increment",
11866                                                          Bop(Add,
11867                                                              Var("v",F32),
11868                                                              Var("length",
11869                                                                  F32)),
11870                                                          Bop(Sub,
11871                                                              Var("v",F32),
11872                                                              Var("length",
11873                                                                  F32))),
11874                                                      Var("n",F4)]),
11875                                                Mop(Snd,
11876                                                    Var("s",PTy(F32,qTy)))))],
11877                                      Var("s",PTy(F32,qTy))),
11878                                  Let(TP[Var("v1",CTy"PSR"),
11879                                         Var("s",PTy(F32,qTy))],
11880                                      Let(TP[Var("v",CTy"PSR"),qVar"s3"],
11881                                          Apply
11882                                            (Const
11883                                               ("SPSR",
11884                                                ATy(qTy,PTy(CTy"PSR",qTy))),
11885                                             Mop(Snd,Var("s",PTy(F32,qTy)))),
11886                                          TP[Var("v",CTy"PSR"),
11887                                             Mop(Fst,Var("s",PTy(F32,qTy))),
11888                                             qVar"s3"]),
11889                                      Apply
11890                                        (Call
11891                                           ("BranchWritePC",ATy(qTy,qTy),
11892                                            Var("v0",F32)),
11893                                         Apply
11894                                           (Call
11895                                              ("CPSRWriteByInstr",
11896                                               ATy(qTy,qTy),
11897                                               TP[Call
11898                                                    ("reg'PSR",F32,
11899                                                     Var("v1",CTy"PSR")),
11900                                                  LW(15,4),LT]),
11901                                            Mop(Snd,Var("s",PTy(F32,qTy)))))))))))))))
11902;
11903val dfn'LoadMultipleUserRegisters_def = Def
11904  ("dfn'LoadMultipleUserRegisters",
11905   TP[bVar"increment",bVar"wordhigher",Var("n",F4),Var("registers",FTy 15)],
11906   Close
11907     (qVar"state",
11908      Let(TP[bVar"v",qVar"s"],
11909          Apply
11910            (Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
11911          Let(TP[bVar"v",qVar"s"],
11912              Apply
11913                (Call
11914                   ("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)),LU),
11915                 ITE(bVar"v",
11916                     Apply
11917                       (Call("TakeUndefInstrException",ATy(qTy,qTy),LU),
11918                        qVar"s"),qVar"s")),
11919              Let(qVar"s",
11920                  ITE(bVar"v",
11921                      Mop(Snd,
11922                          Apply
11923                            (Call
11924                               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
11925                                Call
11926                                  ("UNPREDICTABLE",CTy"exception",
11927                                   LS"LoadMultipleUserRegisters")),qVar"s")),
11928                      qVar"s"),
11929                  Let(TP[Var("v",F32),qVar"s"],
11930                      ITE(bVar"increment",
11931                          Apply
11932                            (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
11933                             qVar"s"),
11934                          Let(TP[Var("v",F32),qVar"s"],
11935                              Apply
11936                                (Call
11937                                   ("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
11938                                 qVar"s"),
11939                              TP[Bop(Sub,Var("v",F32),
11940                                     Bop(Mul,LW(4,32),
11941                                         Mop(Cast F32,
11942                                             Call
11943                                               ("BitCount",nTy,
11944                                                Var("registers",FTy 15))))),
11945                                 qVar"s"])),
11946                      Apply
11947                        (Call("IncPC",ATy(qTy,qTy),LU),
11948                         Mop(Snd,
11949                             Mop(Snd,
11950                                 Apply
11951                                   (For(TP[LN 0,LN 14,
11952                                           Close
11953                                             (nVar"i",
11954                                              Close
11955                                                (Var("state",PTy(F32,qTy)),
11956                                                 ITE(Bop(Bit,
11957                                                         Var("registers",
11958                                                             FTy 15),
11959                                                         nVar"i"),
11960                                                     Let(Var("s",
11961                                                             PTy(F32,qTy)),
11962                                                         Let(TP[Var("v",
11963                                                                    PTy(F32,
11964                                                                        PTy(F4,
11965                                                                            FTy 5))),
11966                                                                Var("s",
11967                                                                    PTy(F32,
11968                                                                        qTy))],
11969                                                             Let(TP[Var("v",
11970                                                                        F32),
11971                                                                    Var("s",
11972                                                                        PTy(F32,
11973                                                                            qTy))],
11974                                                                 CS(Apply
11975                                                                      (Call
11976                                                                         ("MemA",
11977                                                                          ATy(qTy,
11978                                                                              PTy(F32,
11979                                                                                  qTy)),
11980                                                                          TP[Mop(Fst,
11981                                                                                 Var("state",
11982                                                                                     PTy(F32,
11983                                                                                         qTy))),
11984                                                                             LN
11985                                                                              4]),
11986                                                                       Mop(Snd,
11987                                                                           Var("state",
11988                                                                               PTy(F32,
11989                                                                                   qTy)))),
11990                                                                    [(TP[Var("v",
11991                                                                             F32),
11992                                                                         qVar"s3"],
11993                                                                      TP[Var("v",
11994                                                                             F32),
11995                                                                         Mop(Fst,
11996                                                                             Var("state",
11997                                                                                 PTy(F32,
11998                                                                                     qTy))),
11999                                                                         qVar"s3"])]),
12000                                                                 TP[TP[Var("v",
12001                                                                           F32),
12002                                                                       Mop(Cast
12003                                                                             F4,
12004                                                                           nVar"i"),
12005                                                                       LW(16,
12006                                                                          5)],
12007                                                                    Var("s",
12008                                                                        PTy(F32,
12009                                                                            qTy))]),
12010                                                             TP[Mop(Fst,
12011                                                                    Var("s",
12012                                                                        PTy(F32,
12013                                                                            qTy))),
12014                                                                Apply
12015                                                                  (Call
12016                                                                     ("write'Rmode",
12017                                                                      ATy(qTy,
12018                                                                          qTy),
12019                                                                      Var("v",
12020                                                                          PTy(F32,
12021                                                                              PTy(F4,
12022                                                                                  FTy 5)))),
12023                                                                   Mop(Snd,
12024                                                                       Var("s",
12025                                                                           PTy(F32,
12026                                                                               qTy))))]),
12027                                                         TP[LU,
12028                                                            Bop(Add,
12029                                                                Mop(Fst,
12030                                                                    Var("s",
12031                                                                        PTy(F32,
12032                                                                            qTy))),
12033                                                                LW(4,32)),
12034                                                            Mop(Snd,
12035                                                                Var("s",
12036                                                                    PTy(F32,
12037                                                                        qTy)))]),
12038                                                     TP[LU,
12039                                                        Var("state",
12040                                                            PTy(F32,qTy))])))]),
12041                                    TP[ITE(bVar"wordhigher",
12042                                           Bop(Add,Var("v",F32),LW(4,32)),
12043                                           Var("v",F32)),qVar"s"]))))))))))
12044;
12045val dfn'LoadDual_def = Def
12046  ("dfn'LoadDual",
12047   TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("t2",F4),
12048      Var("n",F4),Var("m",CTy"offset2")],
12049   Close
12050     (qVar"state",
12051      Let(TP[bVar"v",qVar"s"],
12052          Apply
12053            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
12054             qVar"state"),
12055          ITE(bVar"v",
12056              Let(TP[Var("v",F32),qVar"s"],
12057                  Apply
12058                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
12059                  Let(TP[Var("v0",F32),qVar"s"],
12060                      CS(Var("m",CTy"offset2"),
12061                         [(Call("register_form2",CTy"offset2",Var("m",F4)),
12062                           Apply
12063                             (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
12064                              qVar"s")),
12065                          (Call
12066                             ("immediate_form2",CTy"offset2",
12067                              Var("imm32",F32)),
12068                           TP[Var("imm32",F32),qVar"s"])]),
12069                      Let(Var("offset_addr",F32),
12070                          ITE(bVar"add",
12071                              Bop(Add,Var("v",F32),Var("v0",F32)),
12072                              Bop(Sub,Var("v",F32),Var("v0",F32))),
12073                          Let(Var("address",F32),
12074                              ITE(bVar"index",Var("offset_addr",F32),
12075                                  Var("v",F32)),
12076                              Let(TP[Var("v",F32),qVar"s"],
12077                                  Apply
12078                                    (Call
12079                                       ("MemA",ATy(qTy,PTy(F32,qTy)),
12080                                        TP[Var("address",F32),LN 4]),
12081                                     qVar"s"),
12082                                  Let(TP[Var("v",F32),qVar"s"],
12083                                      Apply
12084                                        (Call
12085                                           ("MemA",ATy(qTy,PTy(F32,qTy)),
12086                                            TP[Bop(Add,Var("address",F32),
12087                                                   LW(4,32)),LN 4]),
12088                                         Apply
12089                                           (Call
12090                                              ("write'R",ATy(qTy,qTy),
12091                                               TP[Var("v",F32),Var("t",F4)]),
12092                                            qVar"s")),
12093                                      Let(qVar"s",
12094                                          Apply
12095                                            (Call
12096                                               ("write'R",ATy(qTy,qTy),
12097                                                TP[Var("v",F32),
12098                                                   Var("t2",F4)]),qVar"s"),
12099                                          Apply
12100                                            (Call("IncPC",ATy(qTy,qTy),LU),
12101                                             ITE(bVar"wback",
12102                                                 Apply
12103                                                   (Call
12104                                                      ("write'R",
12105                                                       ATy(qTy,qTy),
12106                                                       TP[Var("offset_addr",
12107                                                              F32),
12108                                                          Var("n",F4)]),
12109                                                    qVar"s"),qVar"s"))))))))),
12110              qVar"s"))))
12111;
12112val dfn'LoadDualLiteral_def = Def
12113  ("dfn'LoadDualLiteral",
12114   TP[bVar"add",Var("t",F4),Var("t2",F4),Var("imm32",F32)],
12115   Close
12116     (qVar"state",
12117      Let(TP[bVar"v",qVar"s"],
12118          Apply
12119            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),LW(15,4)),
12120             qVar"state"),
12121          ITE(bVar"v",
12122              Let(TP[Var("v",F32),qVar"s"],
12123                  ITE(bVar"add",
12124                      Let(TP[Var("v",F32),qVar"s"],
12125                          Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"),
12126                          TP[Bop(Add,
12127                                 Call("Align",F32,TP[Var("v",F32),LN 4]),
12128                                 Var("imm32",F32)),qVar"s"]),
12129                      Let(TP[Var("v",F32),qVar"s"],
12130                          Apply(Const("PC",ATy(qTy,PTy(F32,qTy))),qVar"s"),
12131                          TP[Bop(Sub,
12132                                 Call("Align",F32,TP[Var("v",F32),LN 4]),
12133                                 Var("imm32",F32)),qVar"s"])),
12134                  Let(TP[Var("v0",F32),qVar"s"],
12135                      Apply
12136                        (Call
12137                           ("MemA",ATy(qTy,PTy(F32,qTy)),
12138                            TP[Var("v",F32),LN 4]),qVar"s"),
12139                      Let(TP[Var("v",F32),qVar"s"],
12140                          Apply
12141                            (Call
12142                               ("MemA",ATy(qTy,PTy(F32,qTy)),
12143                                TP[Bop(Add,Var("v",F32),LW(4,32)),LN 4]),
12144                             Apply
12145                               (Call
12146                                  ("write'R",ATy(qTy,qTy),
12147                                   TP[Var("v0",F32),Var("t",F4)]),qVar"s")),
12148                          Apply
12149                            (Call("IncPC",ATy(qTy,qTy),LU),
12150                             Apply
12151                               (Call
12152                                  ("write'R",ATy(qTy,qTy),
12153                                   TP[Var("v",F32),Var("t2",F4)]),qVar"s"))))),
12154              qVar"s"))))
12155;
12156val dfn'LoadExclusive_def = Def
12157  ("dfn'LoadExclusive",TP[Var("t",F4),Var("n",F4),Var("imm32",F32)],
12158   Close
12159     (qVar"state",
12160      Let(TP[bVar"v",qVar"s"],
12161          Apply
12162            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
12163             qVar"state"),
12164          ITE(bVar"v",
12165              Let(TP[Var("v",F32),qVar"s"],
12166                  Apply
12167                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
12168                  Let(TP[Var("v",F32),qVar"s"],
12169                      Apply
12170                        (Call
12171                           ("MemA",ATy(qTy,PTy(F32,qTy)),
12172                            TP[Bop(Add,Var("v",F32),Var("imm32",F32)),LN 4]),
12173                         qVar"s"),
12174                      Apply
12175                        (Call("IncPC",ATy(qTy,qTy),LU),
12176                         Apply
12177                           (Call
12178                              ("write'R",ATy(qTy,qTy),
12179                               TP[Var("v",F32),Var("t",F4)]),qVar"s")))),
12180              qVar"s"))))
12181;
12182val dfn'LoadExclusiveByte_def = Def
12183  ("dfn'LoadExclusiveByte",TP[Var("t",F4),Var("n",F4)],
12184   Close
12185     (qVar"state",
12186      Let(TP[bVar"v",qVar"s"],
12187          Apply
12188            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
12189             qVar"state"),
12190          ITE(bVar"v",
12191              Let(TP[Var("v",F32),qVar"s"],
12192                  Apply
12193                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
12194                  Let(TP[Var("v",F8),qVar"s"],
12195                      Apply
12196                        (Call
12197                           ("MemA",ATy(qTy,PTy(F8,qTy)),
12198                            TP[Var("v",F32),LN 1]),qVar"s"),
12199                      Apply
12200                        (Call("IncPC",ATy(qTy,qTy),LU),
12201                         Apply
12202                           (Call
12203                              ("write'R",ATy(qTy,qTy),
12204                               TP[Mop(Cast F32,Var("v",F8)),Var("t",F4)]),
12205                            qVar"s")))),qVar"s"))))
12206;
12207val dfn'LoadExclusiveHalf_def = Def
12208  ("dfn'LoadExclusiveHalf",TP[Var("t",F4),Var("n",F4)],
12209   Close
12210     (qVar"state",
12211      Let(TP[bVar"v",qVar"s"],
12212          Apply
12213            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
12214             qVar"state"),
12215          ITE(bVar"v",
12216              Let(TP[Var("v",F32),qVar"s"],
12217                  Apply
12218                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
12219                  Let(TP[Var("v",F16),qVar"s"],
12220                      Apply
12221                        (Call
12222                           ("MemA",ATy(qTy,PTy(F16,qTy)),
12223                            TP[Var("v",F32),LN 2]),qVar"s"),
12224                      Apply
12225                        (Call("IncPC",ATy(qTy,qTy),LU),
12226                         Apply
12227                           (Call
12228                              ("write'R",ATy(qTy,qTy),
12229                               TP[Mop(Cast F32,Var("v",F16)),Var("t",F4)]),
12230                            qVar"s")))),qVar"s"))))
12231;
12232val dfn'LoadExclusiveDoubleword_def = Def
12233  ("dfn'LoadExclusiveDoubleword",TP[Var("t",F4),Var("t2",F4),Var("n",F4)],
12234   Close
12235     (qVar"state",
12236      Let(TP[bVar"v",qVar"s"],
12237          Apply
12238            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
12239             qVar"state"),
12240          ITE(bVar"v",
12241              Let(TP[Var("v",F32),qVar"s"],
12242                  Apply
12243                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
12244                  Let(TP[Var("v",F64),qVar"s"],
12245                      Apply
12246                        (Call
12247                           ("MemA",ATy(qTy,PTy(F64,qTy)),
12248                            TP[Var("v",F32),LN 8]),qVar"s"),
12249                      Let(TP[bVar"v0",qVar"s"],
12250                          Let(qVar"s0",
12251                              Apply
12252                                (Call
12253                                   ("write'R",ATy(qTy,qTy),
12254                                    TP[ITE(Apply
12255                                             (Call
12256                                                ("BigEndian",ATy(qTy,bTy),
12257                                                 LU),qVar"s"),
12258                                           EX(Var("v",F64),LN 63,LN 32,F32),
12259                                           EX(Var("v",F64),LN 31,LN 0,F32)),
12260                                       Var("t",F4)]),qVar"s"),
12261                              TP[Apply
12262                                   (Call("BigEndian",ATy(qTy,bTy),LU),
12263                                    qVar"s0"),qVar"s0"]),
12264                          Apply
12265                            (Call("IncPC",ATy(qTy,qTy),LU),
12266                             Apply
12267                               (Call
12268                                  ("write'R",ATy(qTy,qTy),
12269                                   TP[ITE(bVar"v0",
12270                                          EX(Var("v",F64),LN 31,LN 0,F32),
12271                                          EX(Var("v",F64),LN 63,LN 32,F32)),
12272                                      Var("t2",F4)]),qVar"s"))))),qVar"s"))))
12273;
12274val dfn'StoreWord_def = Def
12275  ("dfn'StoreWord",
12276   TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4),
12277      Var("m",CTy"offset1")],
12278   Close
12279     (qVar"state",
12280      Let(TP[bVar"v",qVar"s"],
12281          Apply
12282            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
12283             qVar"state"),
12284          ITE(bVar"v",
12285              Let(TP[Var("v",F32),qVar"s"],
12286                  Apply
12287                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
12288                  Let(TP[Var("v0",F32),qVar"s"],
12289                      CS(Var("m",CTy"offset1"),
12290                         [(Call
12291                             ("register_form1",CTy"offset1",
12292                              TP[Var("m",F4),Var("shift_t",CTy"SRType"),
12293                                 nVar"shift_n"]),
12294                           Let(TP[Var("v",F32),qVar"s"],
12295                               Apply
12296                                 (Call
12297                                    ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
12298                                  qVar"s"),
12299                               Apply
12300                                 (Call
12301                                    ("Shift",ATy(qTy,PTy(F32,qTy)),
12302                                     TP[Var("v",F32),
12303                                        Var("shift_t",CTy"SRType"),
12304                                        nVar"shift_n",
12305                                        Dest
12306                                          ("C",bTy,
12307                                           Dest("CPSR",CTy"PSR",qVar"s"))]),
12308                                  qVar"s"))),
12309                          (Call
12310                             ("immediate_form1",CTy"offset1",
12311                              Var("imm32",F32)),
12312                           TP[Var("imm32",F32),qVar"s"])]),
12313                      Let(Var("offset_addr",F32),
12314                          ITE(bVar"add",
12315                              Bop(Add,Var("v",F32),Var("v0",F32)),
12316                              Bop(Sub,Var("v",F32),Var("v0",F32))),
12317                          Let(Var("address",F32),
12318                              ITE(bVar"index",Var("offset_addr",F32),
12319                                  Var("v",F32)),
12320                              Let(TP[Var("v",F32),qVar"s"],
12321                                  ITE(EQ(Var("t",F4),LW(15,4)),
12322                                      Apply
12323                                        (Call
12324                                           ("PCStoreValue",
12325                                            ATy(qTy,PTy(F32,qTy)),LU),
12326                                         qVar"s"),
12327                                      Apply
12328                                        (Call
12329                                           ("R",ATy(qTy,PTy(F32,qTy)),
12330                                            Var("t",F4)),qVar"s")),
12331                                  Let(qVar"s",
12332                                      ITE(Bop(Or,
12333                                              Apply
12334                                                (Call
12335                                                   ("UnalignedSupport",
12336                                                    ATy(qTy,bTy),LU),
12337                                                 qVar"s"),
12338                                              Bop(Or,
12339                                                  Call
12340                                                    ("Aligned",bTy,
12341                                                     TP[Var("address",F32),
12342                                                        LN 4]),
12343                                                  EQ(Apply
12344                                                       (Call
12345                                                          ("CurrentInstrSet",
12346                                                           ATy(qTy,
12347                                                               CTy"InstrSet"),
12348                                                           LU),qVar"s"),
12349                                                     LC("InstrSet_ARM",
12350                                                        CTy"InstrSet")))),
12351                                          Apply
12352                                            (Call
12353                                               ("write'MemU",ATy(qTy,qTy),
12354                                                TP[Var("v",F32),
12355                                                   Var("address",F32),LN 4]),
12356                                             qVar"s"),
12357                                          Apply
12358                                            (Call
12359                                               ("write'MemU",ATy(qTy,qTy),
12360                                                TP[LX F32,
12361                                                   Var("address",F32),LN 4]),
12362                                             qVar"s")),
12363                                      Apply
12364                                        (Call("IncPC",ATy(qTy,qTy),LU),
12365                                         ITE(bVar"wback",
12366                                             Apply
12367                                               (Call
12368                                                  ("write'R",ATy(qTy,qTy),
12369                                                   TP[Var("offset_addr",
12370                                                          F32),Var("n",F4)]),
12371                                                qVar"s"),qVar"s")))))))),
12372              qVar"s"))))
12373;
12374val dfn'StoreUnprivileged_def = Def
12375  ("dfn'StoreUnprivileged",
12376   TP[bVar"add",bVar"postindex",Var("t",F4),Var("n",F4),
12377      Var("m",CTy"offset1")],
12378   Close
12379     (qVar"state",
12380      Let(TP[bVar"v",qVar"s"],
12381          Apply
12382            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
12383             qVar"state"),
12384          ITE(bVar"v",
12385              Let(TP[Var("v",F32),qVar"s"],
12386                  Apply
12387                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
12388                  Let(TP[Var("v0",F32),qVar"s"],
12389                      CS(Var("m",CTy"offset1"),
12390                         [(Call
12391                             ("register_form1",CTy"offset1",
12392                              TP[Var("m",F4),Var("shift_t",CTy"SRType"),
12393                                 nVar"shift_n"]),
12394                           Let(TP[Var("v",F32),qVar"s"],
12395                               Apply
12396                                 (Call
12397                                    ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
12398                                  qVar"s"),
12399                               Apply
12400                                 (Call
12401                                    ("Shift",ATy(qTy,PTy(F32,qTy)),
12402                                     TP[Var("v",F32),
12403                                        Var("shift_t",CTy"SRType"),
12404                                        nVar"shift_n",
12405                                        Dest
12406                                          ("C",bTy,
12407                                           Dest("CPSR",CTy"PSR",qVar"s"))]),
12408                                  qVar"s"))),
12409                          (Call
12410                             ("immediate_form1",CTy"offset1",
12411                              Var("imm32",F32)),
12412                           TP[Var("imm32",F32),qVar"s"])]),
12413                      Let(Var("offset_addr",F32),
12414                          ITE(bVar"add",
12415                              Bop(Add,Var("v",F32),Var("v0",F32)),
12416                              Bop(Sub,Var("v",F32),Var("v0",F32))),
12417                          Let(Var("address",F32),
12418                              ITE(bVar"postindex",Var("v",F32),
12419                                  Var("offset_addr",F32)),
12420                              Let(TP[Var("v",F32),qVar"s"],
12421                                  ITE(EQ(Var("t",F4),LW(15,4)),
12422                                      Apply
12423                                        (Call
12424                                           ("PCStoreValue",
12425                                            ATy(qTy,PTy(F32,qTy)),LU),
12426                                         qVar"s"),
12427                                      Apply
12428                                        (Call
12429                                           ("R",ATy(qTy,PTy(F32,qTy)),
12430                                            Var("t",F4)),qVar"s")),
12431                                  Let(qVar"s",
12432                                      ITE(Bop(Or,
12433                                              Apply
12434                                                (Call
12435                                                   ("UnalignedSupport",
12436                                                    ATy(qTy,bTy),LU),
12437                                                 qVar"s"),
12438                                              Bop(Or,
12439                                                  Call
12440                                                    ("Aligned",bTy,
12441                                                     TP[Var("address",F32),
12442                                                        LN 4]),
12443                                                  EQ(Apply
12444                                                       (Call
12445                                                          ("CurrentInstrSet",
12446                                                           ATy(qTy,
12447                                                               CTy"InstrSet"),
12448                                                           LU),qVar"s"),
12449                                                     LC("InstrSet_ARM",
12450                                                        CTy"InstrSet")))),
12451                                          Apply
12452                                            (Call
12453                                               ("write'MemU_unpriv",
12454                                                ATy(qTy,qTy),
12455                                                TP[Var("v",F32),
12456                                                   Var("address",F32),LN 4]),
12457                                             qVar"s"),
12458                                          Apply
12459                                            (Call
12460                                               ("write'MemU_unpriv",
12461                                                ATy(qTy,qTy),
12462                                                TP[LX F32,
12463                                                   Var("address",F32),LN 4]),
12464                                             qVar"s")),
12465                                      Apply
12466                                        (Call("IncPC",ATy(qTy,qTy),LU),
12467                                         ITE(bVar"postindex",
12468                                             Apply
12469                                               (Call
12470                                                  ("write'R",ATy(qTy,qTy),
12471                                                   TP[Var("offset_addr",
12472                                                          F32),Var("n",F4)]),
12473                                                qVar"s"),qVar"s")))))))),
12474              qVar"s"))))
12475;
12476val dfn'StoreByte_def = Def
12477  ("dfn'StoreByte",
12478   TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4),
12479      Var("m",CTy"offset1")],
12480   Close
12481     (qVar"state",
12482      Let(TP[bVar"v",qVar"s"],
12483          Apply
12484            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
12485             qVar"state"),
12486          ITE(bVar"v",
12487              Let(TP[Var("v",F32),qVar"s"],
12488                  Apply
12489                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
12490                  Let(TP[Var("v0",F32),qVar"s"],
12491                      CS(Var("m",CTy"offset1"),
12492                         [(Call
12493                             ("register_form1",CTy"offset1",
12494                              TP[Var("m",F4),Var("shift_t",CTy"SRType"),
12495                                 nVar"shift_n"]),
12496                           Let(TP[Var("v",F32),qVar"s"],
12497                               Apply
12498                                 (Call
12499                                    ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
12500                                  qVar"s"),
12501                               Apply
12502                                 (Call
12503                                    ("Shift",ATy(qTy,PTy(F32,qTy)),
12504                                     TP[Var("v",F32),
12505                                        Var("shift_t",CTy"SRType"),
12506                                        nVar"shift_n",
12507                                        Dest
12508                                          ("C",bTy,
12509                                           Dest("CPSR",CTy"PSR",qVar"s"))]),
12510                                  qVar"s"))),
12511                          (Call
12512                             ("immediate_form1",CTy"offset1",
12513                              Var("imm32",F32)),
12514                           TP[Var("imm32",F32),qVar"s"])]),
12515                      Let(Var("offset_addr",F32),
12516                          ITE(bVar"add",
12517                              Bop(Add,Var("v",F32),Var("v0",F32)),
12518                              Bop(Sub,Var("v",F32),Var("v0",F32))),
12519                          Let(qVar"s",
12520                              Let(TP[Var("v0",F32),qVar"s"],
12521                                  Apply
12522                                    (Call
12523                                       ("R",ATy(qTy,PTy(F32,qTy)),
12524                                        Var("t",F4)),qVar"s"),
12525                                  Apply
12526                                    (Call
12527                                       ("write'MemU",ATy(qTy,qTy),
12528                                        TP[EX(Var("v0",F32),LN 7,LN 0,F8),
12529                                           ITE(bVar"index",
12530                                               Var("offset_addr",F32),
12531                                               Var("v",F32)),LN 1]),
12532                                     qVar"s")),
12533                              Apply
12534                                (Call("IncPC",ATy(qTy,qTy),LU),
12535                                 ITE(bVar"wback",
12536                                     Apply
12537                                       (Call
12538                                          ("write'R",ATy(qTy,qTy),
12539                                           TP[Var("offset_addr",F32),
12540                                              Var("n",F4)]),qVar"s"),
12541                                     qVar"s")))))),qVar"s"))))
12542;
12543val dfn'StoreByteUnprivileged_def = Def
12544  ("dfn'StoreByteUnprivileged",
12545   TP[bVar"add",bVar"postindex",Var("t",F4),Var("n",F4),
12546      Var("m",CTy"offset1")],
12547   Close
12548     (qVar"state",
12549      Let(TP[bVar"v",qVar"s"],
12550          Apply
12551            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
12552             qVar"state"),
12553          ITE(bVar"v",
12554              Let(TP[Var("v",F32),qVar"s"],
12555                  Apply
12556                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
12557                  Let(TP[Var("v0",F32),qVar"s"],
12558                      CS(Var("m",CTy"offset1"),
12559                         [(Call
12560                             ("register_form1",CTy"offset1",
12561                              TP[Var("m",F4),Var("shift_t",CTy"SRType"),
12562                                 nVar"shift_n"]),
12563                           Let(TP[Var("v",F32),qVar"s"],
12564                               Apply
12565                                 (Call
12566                                    ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
12567                                  qVar"s"),
12568                               Apply
12569                                 (Call
12570                                    ("Shift",ATy(qTy,PTy(F32,qTy)),
12571                                     TP[Var("v",F32),
12572                                        Var("shift_t",CTy"SRType"),
12573                                        nVar"shift_n",
12574                                        Dest
12575                                          ("C",bTy,
12576                                           Dest("CPSR",CTy"PSR",qVar"s"))]),
12577                                  qVar"s"))),
12578                          (Call
12579                             ("immediate_form1",CTy"offset1",
12580                              Var("imm32",F32)),
12581                           TP[Var("imm32",F32),qVar"s"])]),
12582                      Let(Var("offset_addr",F32),
12583                          ITE(bVar"add",
12584                              Bop(Add,Var("v",F32),Var("v0",F32)),
12585                              Bop(Sub,Var("v",F32),Var("v0",F32))),
12586                          Let(qVar"s",
12587                              Let(TP[Var("v0",F32),qVar"s"],
12588                                  Apply
12589                                    (Call
12590                                       ("R",ATy(qTy,PTy(F32,qTy)),
12591                                        Var("t",F4)),qVar"s"),
12592                                  Apply
12593                                    (Call
12594                                       ("write'MemU_unpriv",ATy(qTy,qTy),
12595                                        TP[EX(Var("v0",F32),LN 7,LN 0,F8),
12596                                           ITE(bVar"postindex",
12597                                               Var("v",F32),
12598                                               Var("offset_addr",F32)),
12599                                           LN 1]),qVar"s")),
12600                              Apply
12601                                (Call("IncPC",ATy(qTy,qTy),LU),
12602                                 ITE(bVar"postindex",
12603                                     Apply
12604                                       (Call
12605                                          ("write'R",ATy(qTy,qTy),
12606                                           TP[Var("offset_addr",F32),
12607                                              Var("n",F4)]),qVar"s"),
12608                                     qVar"s")))))),qVar"s"))))
12609;
12610val dfn'StoreHalf_def = Def
12611  ("dfn'StoreHalf",
12612   TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4),
12613      Var("m",CTy"offset1")],
12614   Close
12615     (qVar"state",
12616      Let(TP[bVar"v",qVar"s"],
12617          Apply
12618            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
12619             qVar"state"),
12620          ITE(bVar"v",
12621              Let(TP[Var("v",F32),qVar"s"],
12622                  Apply
12623                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
12624                  Let(TP[Var("v0",F32),qVar"s"],
12625                      CS(Var("m",CTy"offset1"),
12626                         [(Call
12627                             ("register_form1",CTy"offset1",
12628                              TP[Var("m",F4),Var("shift_t",CTy"SRType"),
12629                                 nVar"shift_n"]),
12630                           Let(TP[Var("v",F32),qVar"s"],
12631                               Apply
12632                                 (Call
12633                                    ("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
12634                                  qVar"s"),
12635                               Apply
12636                                 (Call
12637                                    ("Shift",ATy(qTy,PTy(F32,qTy)),
12638                                     TP[Var("v",F32),
12639                                        Var("shift_t",CTy"SRType"),
12640                                        nVar"shift_n",
12641                                        Dest
12642                                          ("C",bTy,
12643                                           Dest("CPSR",CTy"PSR",qVar"s"))]),
12644                                  qVar"s"))),
12645                          (Call
12646                             ("immediate_form1",CTy"offset1",
12647                              Var("imm32",F32)),
12648                           TP[Var("imm32",F32),qVar"s"])]),
12649                      Let(Var("offset_addr",F32),
12650                          ITE(bVar"add",
12651                              Bop(Add,Var("v",F32),Var("v0",F32)),
12652                              Bop(Sub,Var("v",F32),Var("v0",F32))),
12653                          Let(Var("address",F32),
12654                              ITE(bVar"index",Var("offset_addr",F32),
12655                                  Var("v",F32)),
12656                              Let(qVar"s",
12657                                  ITE(Bop(Or,
12658                                          Apply
12659                                            (Call
12660                                               ("UnalignedSupport",
12661                                                ATy(qTy,bTy),LU),qVar"s"),
12662                                          Call
12663                                            ("Aligned",bTy,
12664                                             TP[Var("address",F32),LN 2])),
12665                                      Let(TP[Var("v",F32),qVar"s"],
12666                                          Apply
12667                                            (Call
12668                                               ("R",ATy(qTy,PTy(F32,qTy)),
12669                                                Var("t",F4)),qVar"s"),
12670                                          Apply
12671                                            (Call
12672                                               ("write'MemU",ATy(qTy,qTy),
12673                                                TP[EX(Var("v",F32),LN 15,
12674                                                      LN 0,F16),
12675                                                   Var("address",F32),LN 2]),
12676                                             qVar"s")),
12677                                      Apply
12678                                        (Call
12679                                           ("write'MemU",ATy(qTy,qTy),
12680                                            TP[LX F16,Var("address",F32),
12681                                               LN 2]),qVar"s")),
12682                                  Apply
12683                                    (Call("IncPC",ATy(qTy,qTy),LU),
12684                                     ITE(bVar"wback",
12685                                         Apply
12686                                           (Call
12687                                              ("write'R",ATy(qTy,qTy),
12688                                               TP[Var("offset_addr",F32),
12689                                                  Var("n",F4)]),qVar"s"),
12690                                         qVar"s"))))))),qVar"s"))))
12691;
12692val dfn'StoreHalfUnprivileged_def = Def
12693  ("dfn'StoreHalfUnprivileged",
12694   TP[bVar"add",bVar"postindex",Var("t",F4),Var("n",F4),
12695      Var("m",CTy"offset2")],
12696   Close
12697     (qVar"state",
12698      Let(TP[bVar"v",qVar"s"],
12699          Apply
12700            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
12701             qVar"state"),
12702          ITE(bVar"v",
12703              Let(TP[Var("v",F32),qVar"s"],
12704                  Apply
12705                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
12706                  Let(TP[Var("v0",F32),qVar"s"],
12707                      CS(Var("m",CTy"offset2"),
12708                         [(Call("register_form2",CTy"offset2",Var("m",F4)),
12709                           Apply
12710                             (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
12711                              qVar"s")),
12712                          (Call
12713                             ("immediate_form2",CTy"offset2",
12714                              Var("imm32",F32)),
12715                           TP[Var("imm32",F32),qVar"s"])]),
12716                      Let(Var("offset_addr",F32),
12717                          ITE(bVar"add",
12718                              Bop(Add,Var("v",F32),Var("v0",F32)),
12719                              Bop(Sub,Var("v",F32),Var("v0",F32))),
12720                          Let(Var("address",F32),
12721                              ITE(bVar"postindex",Var("v",F32),
12722                                  Var("offset_addr",F32)),
12723                              Let(qVar"s",
12724                                  ITE(Bop(Or,
12725                                          Apply
12726                                            (Call
12727                                               ("UnalignedSupport",
12728                                                ATy(qTy,bTy),LU),qVar"s"),
12729                                          Call
12730                                            ("Aligned",bTy,
12731                                             TP[Var("address",F32),LN 2])),
12732                                      Let(TP[Var("v",F32),qVar"s"],
12733                                          Apply
12734                                            (Call
12735                                               ("R",ATy(qTy,PTy(F32,qTy)),
12736                                                Var("t",F4)),qVar"s"),
12737                                          Apply
12738                                            (Call
12739                                               ("write'MemU_unpriv",
12740                                                ATy(qTy,qTy),
12741                                                TP[EX(Var("v",F32),LN 15,
12742                                                      LN 0,F16),
12743                                                   Var("address",F32),LN 2]),
12744                                             qVar"s")),
12745                                      Apply
12746                                        (Call
12747                                           ("write'MemU_unpriv",
12748                                            ATy(qTy,qTy),
12749                                            TP[LX F16,Var("address",F32),
12750                                               LN 2]),qVar"s")),
12751                                  Apply
12752                                    (Call("IncPC",ATy(qTy,qTy),LU),
12753                                     ITE(bVar"postindex",
12754                                         Apply
12755                                           (Call
12756                                              ("write'R",ATy(qTy,qTy),
12757                                               TP[Var("offset_addr",F32),
12758                                                  Var("n",F4)]),qVar"s"),
12759                                         qVar"s"))))))),qVar"s"))))
12760;
12761val dfn'StoreMultiple_def = Def
12762  ("dfn'StoreMultiple",
12763   TP[bVar"increment",bVar"index",bVar"wback",Var("n",F4),
12764      Var("registers",F16)],
12765   Close
12766     (qVar"state",
12767      Let(TP[bVar"v",qVar"s"],
12768          Apply
12769            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
12770             qVar"state"),
12771          ITE(bVar"v",
12772              Let(TP[Var("v",F32),qVar"s"],
12773                  Apply
12774                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
12775                  Let(Var("length",F32),
12776                      Bop(Mul,LW(4,32),
12777                          Mop(Cast F32,
12778                              Call("BitCount",nTy,Var("registers",F16)))),
12779                      Let(Var("s",PTy(F32,qTy)),
12780                          Mop(Snd,
12781                              Apply
12782                                (For(TP[LN 0,LN 14,
12783                                        Close
12784                                          (nVar"i",
12785                                           Close
12786                                             (Var("state",PTy(F32,qTy)),
12787                                              ITE(Bop(Bit,
12788                                                      Var("registers",F16),
12789                                                      nVar"i"),
12790                                                  Let(Var("s",PTy(F32,qTy)),
12791                                                      ITE(Bop(And,
12792                                                              EQ(Mop(Cast
12793                                                                       F4,
12794                                                                     nVar"i"),
12795                                                                 Var("n",
12796                                                                     F4)),
12797                                                              Bop(And,
12798                                                                  bVar"wback",
12799                                                                  Mop(Not,
12800                                                                      EQ(nVar"i",
12801                                                                         Call
12802                                                                           ("LowestSetBit",
12803                                                                            nTy,
12804                                                                            Var("registers",
12805                                                                                F16)))))),
12806                                                          TP[Mop(Fst,
12807                                                                 Var("state",
12808                                                                     PTy(F32,
12809                                                                         qTy))),
12810                                                             Apply
12811                                                               (Call
12812                                                                  ("write'MemA",
12813                                                                   ATy(qTy,
12814                                                                       qTy),
12815                                                                   TP[LX F32,
12816                                                                      Mop(Fst,
12817                                                                          Var("state",
12818                                                                              PTy(F32,
12819                                                                                  qTy))),
12820                                                                      LN 4]),
12821                                                                Mop(Snd,
12822                                                                    Var("state",
12823                                                                        PTy(F32,
12824                                                                            qTy))))],
12825                                                          Let(TP[Var("v0",
12826                                                                     F32),
12827                                                                 Var("s",
12828                                                                     PTy(F32,
12829                                                                         qTy))],
12830                                                              CS(Apply
12831                                                                   (Call
12832                                                                      ("R",
12833                                                                       ATy(qTy,
12834                                                                           PTy(F32,
12835                                                                               qTy)),
12836                                                                       Mop(Cast
12837                                                                             F4,
12838                                                                           nVar"i")),
12839                                                                    Mop(Snd,
12840                                                                        Var("state",
12841                                                                            PTy(F32,
12842                                                                                qTy)))),
12843                                                                 [(TP[Var("v",
12844                                                                          F32),
12845                                                                      qVar"s3"],
12846                                                                   TP[Var("v",
12847                                                                          F32),
12848                                                                      Mop(Fst,
12849                                                                          Var("state",
12850                                                                              PTy(F32,
12851                                                                                  qTy))),
12852                                                                      qVar"s3"])]),
12853                                                              TP[Mop(Fst,
12854                                                                     Var("s",
12855                                                                         PTy(F32,
12856                                                                             qTy))),
12857                                                                 Apply
12858                                                                   (Call
12859                                                                      ("write'MemA",
12860                                                                       ATy(qTy,
12861                                                                           qTy),
12862                                                                       TP[Var("v0",
12863                                                                              F32),
12864                                                                          Mop(Fst,
12865                                                                              Var("state",
12866                                                                                  PTy(F32,
12867                                                                                      qTy))),
12868                                                                          LN
12869                                                                           4]),
12870                                                                    Mop(Snd,
12871                                                                        Var("s",
12872                                                                            PTy(F32,
12873                                                                                qTy))))])),
12874                                                      TP[LU,
12875                                                         Bop(Add,
12876                                                             Mop(Fst,
12877                                                                 Var("s",
12878                                                                     PTy(F32,
12879                                                                         qTy))),
12880                                                             LW(4,32)),
12881                                                         Mop(Snd,
12882                                                             Var("s",
12883                                                                 PTy(F32,
12884                                                                     qTy)))]),
12885                                                  TP[LU,
12886                                                     Var("state",
12887                                                         PTy(F32,qTy))])))]),
12888                                 TP[ITB([(EQ(bVar"index",bVar"increment"),
12889                                          Bop(Add,
12890                                              ITE(bVar"increment",
12891                                                  Var("v",F32),
12892                                                  Bop(Sub,Var("v",F32),
12893                                                      Var("length",F32))),
12894                                              LW(4,32))),
12895                                         (bVar"increment",Var("v",F32))],
12896                                        Bop(Sub,Var("v",F32),
12897                                            Var("length",F32))),qVar"s"])),
12898                          Let(Var("s",PTy(F32,qTy)),
12899                              ITE(Bop(Bit,Var("registers",F16),LN 15),
12900                                  Let(TP[Var("v0",F32),
12901                                         Var("s0",PTy(F32,qTy))],
12902                                      CS(Apply
12903                                           (Call
12904                                              ("PCStoreValue",
12905                                               ATy(qTy,PTy(F32,qTy)),LU),
12906                                            Mop(Snd,Var("s",PTy(F32,qTy)))),
12907                                         [(TP[Var("v",F32),qVar"s3"],
12908                                           TP[Var("v",F32),
12909                                              Mop(Fst,
12910                                                  Var("s",PTy(F32,qTy))),
12911                                              qVar"s3"])]),
12912                                      TP[Mop(Fst,Var("s0",PTy(F32,qTy))),
12913                                         Apply
12914                                           (Call
12915                                              ("write'MemA",ATy(qTy,qTy),
12916                                               TP[Var("v0",F32),
12917                                                  Mop(Fst,
12918                                                      Var("s",PTy(F32,qTy))),
12919                                                  LN 4]),
12920                                            Mop(Snd,Var("s0",PTy(F32,qTy))))]),
12921                                  Var("s",PTy(F32,qTy))),
12922                              Apply
12923                                (Call("IncPC",ATy(qTy,qTy),LU),
12924                                 ITE(bVar"wback",
12925                                     Apply
12926                                       (Call
12927                                          ("write'R",ATy(qTy,qTy),
12928                                           TP[ITE(bVar"increment",
12929                                                  Bop(Add,Var("v",F32),
12930                                                      Var("length",F32)),
12931                                                  Bop(Sub,Var("v",F32),
12932                                                      Var("length",F32))),
12933                                              Var("n",F4)]),
12934                                        Mop(Snd,Var("s",PTy(F32,qTy)))),
12935                                     Mop(Snd,Var("s",PTy(F32,qTy))))))))),
12936              qVar"s"))))
12937;
12938val dfn'StoreMultipleUserRegisters_def = Def
12939  ("dfn'StoreMultipleUserRegisters",
12940   TP[bVar"increment",bVar"wordhigher",Var("n",F4),Var("registers",F16)],
12941   Close
12942     (qVar"state",
12943      Let(TP[bVar"v",qVar"s"],
12944          Apply
12945            (Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
12946          Let(TP[bVar"v",qVar"s"],
12947              Apply
12948                (Call
12949                   ("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)),LU),
12950                 ITE(bVar"v",
12951                     Apply
12952                       (Call("TakeUndefInstrException",ATy(qTy,qTy),LU),
12953                        qVar"s"),qVar"s")),
12954              Let(qVar"s",
12955                  ITE(bVar"v",
12956                      Mop(Snd,
12957                          Apply
12958                            (Call
12959                               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
12960                                Call
12961                                  ("UNPREDICTABLE",CTy"exception",
12962                                   LS"StoreMultipleUserRegisters")),
12963                             qVar"s")),qVar"s"),
12964                  Let(TP[Var("v",F32),qVar"s"],
12965                      ITE(bVar"increment",
12966                          Apply
12967                            (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
12968                             qVar"s"),
12969                          Let(TP[Var("v",F32),qVar"s"],
12970                              Apply
12971                                (Call
12972                                   ("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
12973                                 qVar"s"),
12974                              TP[Bop(Sub,Var("v",F32),
12975                                     Bop(Mul,LW(4,32),
12976                                         Mop(Cast F32,
12977                                             Call
12978                                               ("BitCount",nTy,
12979                                                Var("registers",F16))))),
12980                                 qVar"s"])),
12981                      Let(Var("s",PTy(F32,qTy)),
12982                          Mop(Snd,
12983                              Apply
12984                                (For(TP[LN 0,LN 14,
12985                                        Close
12986                                          (nVar"i",
12987                                           Close
12988                                             (Var("state",PTy(F32,qTy)),
12989                                              ITE(Bop(Bit,
12990                                                      Var("registers",F16),
12991                                                      nVar"i"),
12992                                                  Let(Var("s",PTy(F32,qTy)),
12993                                                      Let(TP[Var("v0",F32),
12994                                                             Var("s",
12995                                                                 PTy(F32,
12996                                                                     qTy))],
12997                                                          CS(Apply
12998                                                               (Call
12999                                                                  ("Rmode",
13000                                                                   ATy(qTy,
13001                                                                       PTy(F32,
13002                                                                           qTy)),
13003                                                                   TP[Mop(Cast
13004                                                                            F4,
13005                                                                          nVar"i"),
13006                                                                      LW(16,
13007                                                                         5)]),
13008                                                                Mop(Snd,
13009                                                                    Var("state",
13010                                                                        PTy(F32,
13011                                                                            qTy)))),
13012                                                             [(TP[Var("v",
13013                                                                      F32),
13014                                                                  qVar"s3"],
13015                                                               TP[Var("v",
13016                                                                      F32),
13017                                                                  Mop(Fst,
13018                                                                      Var("state",
13019                                                                          PTy(F32,
13020                                                                              qTy))),
13021                                                                  qVar"s3"])]),
13022                                                          TP[Mop(Fst,
13023                                                                 Var("s",
13024                                                                     PTy(F32,
13025                                                                         qTy))),
13026                                                             Apply
13027                                                               (Call
13028                                                                  ("write'MemA",
13029                                                                   ATy(qTy,
13030                                                                       qTy),
13031                                                                   TP[Var("v0",
13032                                                                          F32),
13033                                                                      Mop(Fst,
13034                                                                          Var("state",
13035                                                                              PTy(F32,
13036                                                                                  qTy))),
13037                                                                      LN 4]),
13038                                                                Mop(Snd,
13039                                                                    Var("s",
13040                                                                        PTy(F32,
13041                                                                            qTy))))]),
13042                                                      TP[LU,
13043                                                         Bop(Add,
13044                                                             Mop(Fst,
13045                                                                 Var("s",
13046                                                                     PTy(F32,
13047                                                                         qTy))),
13048                                                             LW(4,32)),
13049                                                         Mop(Snd,
13050                                                             Var("s",
13051                                                                 PTy(F32,
13052                                                                     qTy)))]),
13053                                                  TP[LU,
13054                                                     Var("state",
13055                                                         PTy(F32,qTy))])))]),
13056                                 TP[ITE(bVar"wordhigher",
13057                                        Bop(Add,Var("v",F32),LW(4,32)),
13058                                        Var("v",F32)),qVar"s"])),
13059                          Apply
13060                            (Call("IncPC",ATy(qTy,qTy),LU),
13061                             ITE(Bop(Bit,Var("registers",F16),LN 15),
13062                                 Let(TP[Var("v0",F32),
13063                                        Var("s0",PTy(F32,qTy))],
13064                                     CS(Apply
13065                                          (Call
13066                                             ("PCStoreValue",
13067                                              ATy(qTy,PTy(F32,qTy)),LU),
13068                                           Mop(Snd,Var("s",PTy(F32,qTy)))),
13069                                        [(TP[Var("v",F32),qVar"s3"],
13070                                          TP[Var("v",F32),
13071                                             Mop(Fst,Var("s",PTy(F32,qTy))),
13072                                             qVar"s3"])]),
13073                                     Apply
13074                                       (Call
13075                                          ("write'MemA",ATy(qTy,qTy),
13076                                           TP[Var("v0",F32),
13077                                              Mop(Fst,
13078                                                  Var("s",PTy(F32,qTy))),
13079                                              LN 4]),
13080                                        Mop(Snd,Var("s0",PTy(F32,qTy))))),
13081                                 Mop(Snd,Var("s",PTy(F32,qTy))))))))))))
13082;
13083val dfn'StoreDual_def = Def
13084  ("dfn'StoreDual",
13085   TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("t2",F4),
13086      Var("n",F4),Var("m",CTy"offset2")],
13087   Close
13088     (qVar"state",
13089      Let(TP[bVar"v",qVar"s"],
13090          Apply
13091            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
13092             qVar"state"),
13093          ITE(bVar"v",
13094              Let(TP[Var("v",F32),qVar"s"],
13095                  Apply
13096                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
13097                  Let(TP[Var("v0",F32),qVar"s"],
13098                      CS(Var("m",CTy"offset2"),
13099                         [(Call("register_form2",CTy"offset2",Var("m",F4)),
13100                           Apply
13101                             (Call("R",ATy(qTy,PTy(F32,qTy)),Var("m",F4)),
13102                              qVar"s")),
13103                          (Call
13104                             ("immediate_form2",CTy"offset2",
13105                              Var("imm32",F32)),
13106                           TP[Var("imm32",F32),qVar"s"])]),
13107                      Let(Var("offset_addr",F32),
13108                          ITE(bVar"add",
13109                              Bop(Add,Var("v",F32),Var("v0",F32)),
13110                              Bop(Sub,Var("v",F32),Var("v0",F32))),
13111                          Let(Var("address",F32),
13112                              ITE(bVar"index",Var("offset_addr",F32),
13113                                  Var("v",F32)),
13114                              Let(qVar"s",
13115                                  Let(TP[Var("v",F32),qVar"s"],
13116                                      Apply
13117                                        (Call
13118                                           ("R",ATy(qTy,PTy(F32,qTy)),
13119                                            Var("t2",F4)),
13120                                         Let(TP[Var("v",F32),qVar"s"],
13121                                             Apply
13122                                               (Call
13123                                                  ("R",
13124                                                   ATy(qTy,PTy(F32,qTy)),
13125                                                   Var("t",F4)),qVar"s"),
13126                                             Apply
13127                                               (Call
13128                                                  ("write'MemA",
13129                                                   ATy(qTy,qTy),
13130                                                   TP[Var("v",F32),
13131                                                      Var("address",F32),
13132                                                      LN 4]),qVar"s"))),
13133                                      Apply
13134                                        (Call
13135                                           ("write'MemA",ATy(qTy,qTy),
13136                                            TP[Var("v",F32),
13137                                               Bop(Add,Var("address",F32),
13138                                                   LW(4,32)),LN 4]),
13139                                         qVar"s")),
13140                                  Apply
13141                                    (Call("IncPC",ATy(qTy,qTy),LU),
13142                                     ITE(bVar"wback",
13143                                         Apply
13144                                           (Call
13145                                              ("write'R",ATy(qTy,qTy),
13146                                               TP[Var("offset_addr",F32),
13147                                                  Var("n",F4)]),qVar"s"),
13148                                         qVar"s"))))))),qVar"s"))))
13149;
13150val dfn'StoreExclusive_def = Def
13151  ("dfn'StoreExclusive",
13152   TP[Var("d",F4),Var("t",F4),Var("n",F4),Var("imm32",F32)],
13153   Close
13154     (qVar"state",
13155      Let(TP[bVar"v",qVar"s"],
13156          Apply
13157            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
13158             qVar"state"),
13159          ITE(bVar"v",
13160              Let(TP[Var("v",F32),qVar"s"],
13161                  Apply
13162                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
13163                  Let(Var("v",F32),Bop(Add,Var("v",F32),Var("imm32",F32)),
13164                      Apply
13165                        (Call("IncPC",ATy(qTy,qTy),LU),
13166                         ITE(Call
13167                               ("ExclusiveMonitorsPass",bTy,
13168                                TP[Var("v",F32),LN 4]),
13169                             Apply
13170                               (Call
13171                                  ("write'R",ATy(qTy,qTy),
13172                                   TP[LW(0,32),Var("d",F4)]),
13173                                Let(TP[Var("v0",F32),qVar"s"],
13174                                    Apply
13175                                      (Call
13176                                         ("R",ATy(qTy,PTy(F32,qTy)),
13177                                          Var("t",F4)),qVar"s"),
13178                                    Apply
13179                                      (Call
13180                                         ("write'MemA",ATy(qTy,qTy),
13181                                          TP[Var("v0",F32),Var("v",F32),
13182                                             LN 4]),qVar"s"))),
13183                             Apply
13184                               (Call
13185                                  ("write'R",ATy(qTy,qTy),
13186                                   TP[LW(1,32),Var("d",F4)]),qVar"s"))))),
13187              qVar"s"))))
13188;
13189val dfn'StoreExclusiveByte_def = Def
13190  ("dfn'StoreExclusiveByte",TP[Var("d",F4),Var("t",F4),Var("n",F4)],
13191   Close
13192     (qVar"state",
13193      Let(TP[bVar"v",qVar"s"],
13194          Apply
13195            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
13196             qVar"state"),
13197          ITE(bVar"v",
13198              Let(TP[Var("v",F32),qVar"s"],
13199                  Apply
13200                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
13201                  Apply
13202                    (Call("IncPC",ATy(qTy,qTy),LU),
13203                     ITE(Call
13204                           ("ExclusiveMonitorsPass",bTy,
13205                            TP[Var("v",F32),LN 1]),
13206                         Apply
13207                           (Call
13208                              ("write'R",ATy(qTy,qTy),
13209                               TP[LW(0,32),Var("d",F4)]),
13210                            Let(TP[Var("v0",F32),qVar"s"],
13211                                Apply
13212                                  (Call
13213                                     ("R",ATy(qTy,PTy(F32,qTy)),
13214                                      Var("t",F4)),qVar"s"),
13215                                Apply
13216                                  (Call
13217                                     ("write'MemA",ATy(qTy,qTy),
13218                                      TP[EX(Var("v0",F32),LN 7,LN 0,F8),
13219                                         Var("v",F32),LN 1]),qVar"s"))),
13220                         Apply
13221                           (Call
13222                              ("write'R",ATy(qTy,qTy),
13223                               TP[LW(1,32),Var("d",F4)]),qVar"s")))),
13224              qVar"s"))))
13225;
13226val dfn'StoreExclusiveHalf_def = Def
13227  ("dfn'StoreExclusiveHalf",TP[Var("d",F4),Var("t",F4),Var("n",F4)],
13228   Close
13229     (qVar"state",
13230      Let(TP[bVar"v",qVar"s"],
13231          Apply
13232            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
13233             qVar"state"),
13234          ITE(bVar"v",
13235              Let(TP[Var("v",F32),qVar"s"],
13236                  Apply
13237                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
13238                  Apply
13239                    (Call("IncPC",ATy(qTy,qTy),LU),
13240                     ITE(Call
13241                           ("ExclusiveMonitorsPass",bTy,
13242                            TP[Var("v",F32),LN 2]),
13243                         Apply
13244                           (Call
13245                              ("write'R",ATy(qTy,qTy),
13246                               TP[LW(0,32),Var("d",F4)]),
13247                            Let(TP[Var("v0",F32),qVar"s"],
13248                                Apply
13249                                  (Call
13250                                     ("R",ATy(qTy,PTy(F32,qTy)),
13251                                      Var("t",F4)),qVar"s"),
13252                                Apply
13253                                  (Call
13254                                     ("write'MemA",ATy(qTy,qTy),
13255                                      TP[EX(Var("v0",F32),LN 15,LN 0,F16),
13256                                         Var("v",F32),LN 2]),qVar"s"))),
13257                         Apply
13258                           (Call
13259                              ("write'R",ATy(qTy,qTy),
13260                               TP[LW(1,32),Var("d",F4)]),qVar"s")))),
13261              qVar"s"))))
13262;
13263val dfn'StoreExclusiveDoubleword_def = Def
13264  ("dfn'StoreExclusiveDoubleword",
13265   TP[Var("d",F4),Var("t",F4),Var("t2",F4),Var("n",F4)],
13266   Close
13267     (qVar"state",
13268      Let(TP[bVar"v",qVar"s"],
13269          Apply
13270            (Call("NullCheckIfThumbEE",ATy(qTy,PTy(bTy,qTy)),Var("n",F4)),
13271             qVar"state"),
13272          ITE(bVar"v",
13273              Let(TP[Var("v",F32),qVar"s"],
13274                  Apply
13275                    (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"s"),
13276                  Let(TP[Var("v0",F64),qVar"s"],
13277                      ITE(Apply(Call("BigEndian",ATy(qTy,bTy),LU),qVar"s"),
13278                          Let(TP[Var("v",F32),qVar"s"],
13279                              Apply
13280                                (Call
13281                                   ("R",ATy(qTy,PTy(F32,qTy)),Var("t",F4)),
13282                                 qVar"s"),
13283                              Let(TP[Var("v0",F32),qVar"s"],
13284                                  Apply
13285                                    (Call
13286                                       ("R",ATy(qTy,PTy(F32,qTy)),
13287                                        Var("t2",F4)),qVar"s"),
13288                                  TP[CC[Var("v",F32),Var("v0",F32)],
13289                                     qVar"s"])),
13290                          Let(TP[Var("v",F32),qVar"s"],
13291                              Apply
13292                                (Call
13293                                   ("R",ATy(qTy,PTy(F32,qTy)),Var("t2",F4)),
13294                                 qVar"s"),
13295                              Let(TP[Var("v0",F32),qVar"s"],
13296                                  Apply
13297                                    (Call
13298                                       ("R",ATy(qTy,PTy(F32,qTy)),
13299                                        Var("t",F4)),qVar"s"),
13300                                  TP[CC[Var("v",F32),Var("v0",F32)],
13301                                     qVar"s"]))),
13302                      Apply
13303                        (Call("IncPC",ATy(qTy,qTy),LU),
13304                         ITE(Call
13305                               ("ExclusiveMonitorsPass",bTy,
13306                                TP[Var("v",F32),LN 8]),
13307                             Apply
13308                               (Call
13309                                  ("write'R",ATy(qTy,qTy),
13310                                   TP[LW(0,32),Var("d",F4)]),
13311                                Apply
13312                                  (Call
13313                                     ("write'MemA",ATy(qTy,qTy),
13314                                      TP[Var("v0",F64),Var("v",F32),LN 8]),
13315                                   qVar"s")),
13316                             Apply
13317                               (Call
13318                                  ("write'R",ATy(qTy,qTy),
13319                                   TP[LW(1,32),Var("d",F4)]),qVar"s"))))),
13320              qVar"s"))))
13321;
13322val dfn'ClearExclusive_def = Def
13323  ("dfn'ClearExclusive",qVar"state",
13324   Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state"))
13325;
13326val dfn'Swap_def = Def
13327  ("dfn'Swap",TP[bVar"b",Var("t",F4),Var("t2",F4),Var("n",F4)],
13328   Close
13329     (qVar"state",
13330      Let(TP[Var("v",F32),qVar"s"],
13331          Apply(Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),qVar"state"),
13332          Apply
13333            (Call("IncPC",ATy(qTy,qTy),LU),
13334             ITE(bVar"b",
13335                 Let(TP[Var("v0",F8),qVar"s"],
13336                     Apply
13337                       (Call
13338                          ("MemA",ATy(qTy,PTy(F8,qTy)),
13339                           TP[Var("v",F32),LN 1]),qVar"s"),
13340                     Apply
13341                       (Call
13342                          ("write'R",ATy(qTy,qTy),
13343                           TP[Mop(Cast F32,Var("v0",F8)),Var("t",F4)]),
13344                        Let(TP[Var("v0",F32),qVar"s"],
13345                            Apply
13346                              (Call
13347                                 ("R",ATy(qTy,PTy(F32,qTy)),Var("t2",F4)),
13348                               qVar"s"),
13349                            Apply
13350                              (Call
13351                                 ("write'MemA",ATy(qTy,qTy),
13352                                  TP[EX(Var("v0",F32),LN 7,LN 0,F8),
13353                                     Var("v",F32),LN 1]),qVar"s")))),
13354                 Let(TP[Var("v0",F32),qVar"s"],
13355                     Apply
13356                       (Call
13357                          ("MemA",ATy(qTy,PTy(F32,qTy)),
13358                           TP[Var("v",F32),LN 4]),qVar"s"),
13359                     Let(TP[Var("v",F32),qVar"s"],
13360                         Apply
13361                           (Call
13362                              ("ROR",ATy(qTy,PTy(F32,qTy)),
13363                               TP[Var("v0",F32),
13364                                  Bop(Mul,LN 8,
13365                                      Mop(Cast nTy,
13366                                          EX(Var("v",F32),LN 1,LN 0,FTy 2)))]),
13367                            Let(TP[Var("v0",F32),qVar"s"],
13368                                Apply
13369                                  (Call
13370                                     ("R",ATy(qTy,PTy(F32,qTy)),
13371                                      Var("t2",F4)),qVar"s"),
13372                                Apply
13373                                  (Call
13374                                     ("write'MemA",ATy(qTy,qTy),
13375                                      TP[Var("v0",F32),Var("v",F32),LN 4]),
13376                                   qVar"s"))),
13377                         Apply
13378                           (Call
13379                              ("write'R",ATy(qTy,qTy),
13380                               TP[Var("v",F32),Var("t",F4)]),qVar"s"))))))))
13381;
13382val dfn'ChangeProcessorState_def = Def
13383  ("dfn'ChangeProcessorState",
13384   TP[bVar"enable",bVar"disable",bVar"affectA",bVar"affectI",
13385      bVar"affectF",Var("changemode",OTy(FTy 5))],
13386   Close
13387     (qVar"state",
13388      Let(TP[bVar"v",qVar"s"],
13389          Apply
13390            (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
13391             qVar"state"),
13392          Apply
13393            (Call("IncPC",ATy(qTy,qTy),LU),
13394             ITE(bVar"v",
13395                 Let(Var("v",CTy"PSR"),Dest("CPSR",CTy"PSR",qVar"s"),
13396                     Let(Var("s",PTy(CTy"PSR",qTy)),
13397                         ITE(bVar"enable",
13398                             Let(Var("s0",CTy"PSR"),
13399                                 ITE(bVar"affectA",
13400                                     Rupd("A",TP[Var("v",CTy"PSR"),LF]),
13401                                     Var("v",CTy"PSR")),
13402                                 Let(Var("s0",CTy"PSR"),
13403                                     ITE(bVar"affectI",
13404                                         Rupd
13405                                           ("I",TP[Var("s0",CTy"PSR"),LF]),
13406                                         Var("s0",CTy"PSR")),
13407                                     TP[ITE(bVar"affectF",
13408                                            Rupd
13409                                              ("F",
13410                                               TP[Var("s0",CTy"PSR"),LF]),
13411                                            Var("s0",CTy"PSR")),qVar"s"])),
13412                             TP[Var("v",CTy"PSR"),qVar"s"]),
13413                         Let(Var("s",PTy(CTy"PSR",qTy)),
13414                             ITE(bVar"disable",
13415                                 Let(Var("s",PTy(CTy"PSR",qTy)),
13416                                     ITE(bVar"affectA",
13417                                         TP[Rupd
13418                                              ("A",
13419                                               TP[Mop(Fst,
13420                                                      Var("s",
13421                                                          PTy(CTy"PSR",qTy))),
13422                                                  LT]),
13423                                            Mop(Snd,
13424                                                Var("s",PTy(CTy"PSR",qTy)))],
13425                                         Var("s",PTy(CTy"PSR",qTy))),
13426                                     Let(Var("s",PTy(CTy"PSR",qTy)),
13427                                         ITE(bVar"affectI",
13428                                             TP[Rupd
13429                                                  ("I",
13430                                                   TP[Mop(Fst,
13431                                                          Var("s",
13432                                                              PTy(CTy"PSR",
13433                                                                  qTy))),
13434                                                      LT]),
13435                                                Mop(Snd,
13436                                                    Var("s",
13437                                                        PTy(CTy"PSR",qTy)))],
13438                                             Var("s",PTy(CTy"PSR",qTy))),
13439                                         ITE(bVar"affectF",
13440                                             TP[Rupd
13441                                                  ("F",
13442                                                   TP[Mop(Fst,
13443                                                          Var("s",
13444                                                              PTy(CTy"PSR",
13445                                                                  qTy))),
13446                                                      LT]),
13447                                                Mop(Snd,
13448                                                    Var("s",
13449                                                        PTy(CTy"PSR",qTy)))],
13450                                             Var("s",PTy(CTy"PSR",qTy))))),
13451                                 Var("s",PTy(CTy"PSR",qTy))),
13452                             Let(Var("s",PTy(CTy"PSR",qTy)),
13453                                 CS(Var("changemode",OTy(FTy 5)),
13454                                    [(Mop(Some,Var("mode",FTy 5)),
13455                                      TP[Rupd
13456                                           ("M",
13457                                            TP[Mop(Fst,
13458                                                   Var("s",
13459                                                       PTy(CTy"PSR",qTy))),
13460                                               Var("mode",FTy 5)]),
13461                                         Mop(Snd,
13462                                             Var("s",PTy(CTy"PSR",qTy)))]),
13463                                     (LO(FTy 5),Var("s",PTy(CTy"PSR",qTy)))]),
13464                                 Let(qVar"s1",
13465                                     Apply
13466                                       (Call
13467                                          ("CPSRWriteByInstr",
13468                                           ATy(qTy,qTy),
13469                                           TP[Call
13470                                                ("reg'PSR",F32,
13471                                                 Mop(Fst,
13472                                                     Var("s",
13473                                                         PTy(CTy"PSR",qTy)))),
13474                                              LW(15,4),LF]),
13475                                        Mop(Snd,Var("s",PTy(CTy"PSR",qTy)))),
13476                                     ITE(Bop(And,
13477                                             EQ(Dest
13478                                                  ("M",FTy 5,
13479                                                   Dest
13480                                                     ("CPSR",CTy"PSR",
13481                                                      qVar"s1")),LW(26,5)),
13482                                             EQ(Apply
13483                                                  (Call
13484                                                     ("CurrentInstrSet",
13485                                                      ATy(qTy,
13486                                                          CTy"InstrSet"),
13487                                                      LU),qVar"s1"),
13488                                                LC("InstrSet_ThumbEE",
13489                                                   CTy"InstrSet"))),
13490                                         Mop(Snd,
13491                                             Apply
13492                                               (Call
13493                                                  ("raise'exception",
13494                                                   ATy(qTy,PTy(uTy,qTy)),
13495                                                   Call
13496                                                     ("UNPREDICTABLE",
13497                                                      CTy"exception",
13498                                                      LS
13499                                                       "ChangeProcessorState")),
13500                                                qVar"s1")),qVar"s1")))))),
13501                 qVar"s")))))
13502;
13503val dfn'ExceptionReturn_def = Def
13504  ("dfn'ExceptionReturn",qVar"state",
13505   Let(TP[bVar"v",qVar"s"],
13506       Apply
13507         (Call("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)),LU),
13508          qVar"state"),
13509       ITE(Bop(Or,bVar"v",
13510               EQ(Apply
13511                    (Call("CurrentInstrSet",ATy(qTy,CTy"InstrSet"),LU),
13512                     qVar"s"),LC("InstrSet_ThumbEE",CTy"InstrSet"))),
13513           Mop(Snd,
13514               Apply
13515                 (Call
13516                    ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13517                     Call
13518                       ("UNPREDICTABLE",CTy"exception",LS"ExceptionReturn")),
13519                  qVar"s")),
13520           Let(TP[bVar"v",qVar"s"],
13521               Apply
13522                 (Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),
13523                  qVar"s"),
13524               Let(TP[Var("v",F32),qVar"s"],
13525                   ITE(bVar"v",TP[Dest("ELR_hyp",F32,qVar"s"),qVar"s"],
13526                       Apply
13527                         (Call("R",ATy(qTy,PTy(F32,qTy)),LW(14,4)),qVar"s")),
13528                   Let(TP[Var("v0",CTy"PSR"),qVar"s"],
13529                       Apply
13530                         (Const("SPSR",ATy(qTy,PTy(CTy"PSR",qTy))),qVar"s"),
13531                       Let(qVar"s",
13532                           Apply
13533                             (Call
13534                                ("CPSRWriteByInstr",ATy(qTy,qTy),
13535                                 TP[Call("reg'PSR",F32,Var("v0",CTy"PSR")),
13536                                    LW(15,4),LT]),qVar"s"),
13537                           ITE(Bop(And,
13538                                   EQ(Dest
13539                                        ("M",FTy 5,
13540                                         Dest("CPSR",CTy"PSR",qVar"s")),
13541                                      LW(26,5)),
13542                                   EQ(Apply
13543                                        (Call
13544                                           ("CurrentInstrSet",
13545                                            ATy(qTy,CTy"InstrSet"),LU),
13546                                         qVar"s"),
13547                                      LC("InstrSet_ThumbEE",CTy"InstrSet"))),
13548                               Mop(Snd,
13549                                   Apply
13550                                     (Call
13551                                        ("raise'exception",
13552                                         ATy(qTy,PTy(uTy,qTy)),
13553                                         Call
13554                                           ("UNPREDICTABLE",
13555                                            CTy"exception",
13556                                            LS"ExceptionReturn")),qVar"s")),
13557                               Apply
13558                                 (Call
13559                                    ("BranchWritePC",ATy(qTy,qTy),
13560                                     Var("v",F32)),qVar"s")))))))))
13561;
13562val dfn'HypervisorCall_def = Def
13563  ("dfn'HypervisorCall",Var("imm16",F16),
13564   Close
13565     (qVar"state",
13566      Let(TP[bVar"v",qVar"s"],
13567          ITB([(Mop(Not,
13568                    Apply(Call("HaveVirtExt",ATy(qTy,bTy),LU),qVar"state")),
13569                TP[LT,qVar"state"]),
13570               (Apply(Call("IsSecure",ATy(qTy,bTy),LU),qVar"state"),
13571                TP[LT,qVar"state"])],
13572              Let(TP[bVar"v",qVar"s"],
13573                  Apply
13574                    (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
13575                     qVar"state"),TP[Mop(Not,bVar"v"),qVar"s"])),
13576          ITB([(bVar"v",
13577                Mop(Snd,
13578                    Apply
13579                      (Call
13580                         ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13581                          Call
13582                            ("UNPREDICTABLE",CTy"exception",
13583                             LS"HypervisorCall")),qVar"s"))),
13584               (Mop(Not,
13585                    Dest
13586                      ("HCE",bTy,
13587                       Dest("SCR",CTy"SCR",Dest("CP15",CTy"CP15",qVar"s")))),
13588                Let(TP[bVar"v",qVar"s"],
13589                    Apply
13590                      (Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),
13591                       qVar"s"),
13592                    ITE(bVar"v",
13593                        Mop(Snd,
13594                            Apply
13595                              (Call
13596                                 ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13597                                  Call
13598                                    ("UNPREDICTABLE",CTy"exception",
13599                                     LS"HypervisorCall")),qVar"s")),
13600                        Apply
13601                          (Call("TakeUndefInstrException",ATy(qTy,qTy),LU),
13602                           qVar"s"))))],
13603              Apply
13604                (Call("CallHypervisor",ATy(qTy,qTy),Var("imm16",F16)),
13605                 qVar"s")))))
13606;
13607val dfn'MoveToRegisterFromSpecial_def = Def
13608  ("dfn'MoveToRegisterFromSpecial",TP[bVar"read_spsr",Var("d",F4)],
13609   Close
13610     (qVar"state",
13611      Apply
13612        (Call("IncPC",ATy(qTy,qTy),LU),
13613         ITE(bVar"read_spsr",
13614             Let(TP[bVar"v",qVar"s"],
13615                 Apply
13616                   (Call
13617                      ("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)),
13618                       LU),qVar"state"),
13619                 ITE(bVar"v",
13620                     Mop(Snd,
13621                         Apply
13622                           (Call
13623                              ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13624                               Call
13625                                 ("UNPREDICTABLE",CTy"exception",
13626                                  LS"MoveToRegisterFromSpecial")),qVar"s")),
13627                     Let(TP[Var("v",CTy"PSR"),qVar"s"],
13628                         Apply
13629                           (Const("SPSR",ATy(qTy,PTy(CTy"PSR",qTy))),
13630                            qVar"s"),
13631                         Apply
13632                           (Call
13633                              ("write'R",ATy(qTy,qTy),
13634                               TP[Call("reg'PSR",F32,Var("v",CTy"PSR")),
13635                                  Var("d",F4)]),qVar"s")))),
13636             Apply
13637               (Call
13638                  ("write'R",ATy(qTy,qTy),
13639                   TP[Bop(BAnd,
13640                          Call
13641                            ("reg'PSR",F32,
13642                             Dest("CPSR",CTy"PSR",qVar"state")),
13643                          LW(4177462239,32)),Var("d",F4)]),qVar"state")))))
13644;
13645val dfn'MoveToRegisterFromBankedOrSpecial_def = Def
13646  ("dfn'MoveToRegisterFromBankedOrSpecial",
13647   TP[bVar"read_spsr",Var("SYSm",FTy 5),Var("d",F4)],
13648   Close
13649     (qVar"state",
13650      Let(TP[bVar"v",qVar"s"],
13651          Apply
13652            (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
13653             qVar"state"),
13654          ITE(Mop(Not,bVar"v"),
13655              Mop(Snd,
13656                  Apply
13657                    (Call
13658                       ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13659                        Call
13660                          ("UNPREDICTABLE",CTy"exception",
13661                           LS"MoveToRegisterFromBankedOrSpecial")),qVar"s")),
13662              Let(Var("v",FTy 5),
13663                  Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")),
13664                  Apply
13665                    (Call("IncPC",ATy(qTy,qTy),LU),
13666                     ITE(bVar"read_spsr",
13667                         Let(qVar"s",
13668                             Apply
13669                               (Call
13670                                  ("SPSRAccessValid",ATy(qTy,qTy),
13671                                   TP[Var("SYSm",FTy 5),Var("v",FTy 5)]),
13672                                qVar"s"),
13673                             CS(Var("SYSm",FTy 5),
13674                                [(LW(14,5),
13675                                  Apply
13676                                    (Call
13677                                       ("write'R",ATy(qTy,qTy),
13678                                        TP[Call
13679                                             ("reg'PSR",F32,
13680                                              Dest
13681                                                ("SPSR_fiq",CTy"PSR",
13682                                                 qVar"s")),Var("d",F4)]),
13683                                     qVar"s")),
13684                                 (LW(16,5),
13685                                  Apply
13686                                    (Call
13687                                       ("write'R",ATy(qTy,qTy),
13688                                        TP[Call
13689                                             ("reg'PSR",F32,
13690                                              Dest
13691                                                ("SPSR_irq",CTy"PSR",
13692                                                 qVar"s")),Var("d",F4)]),
13693                                     qVar"s")),
13694                                 (LW(18,5),
13695                                  Apply
13696                                    (Call
13697                                       ("write'R",ATy(qTy,qTy),
13698                                        TP[Call
13699                                             ("reg'PSR",F32,
13700                                              Dest
13701                                                ("SPSR_svc",CTy"PSR",
13702                                                 qVar"s")),Var("d",F4)]),
13703                                     qVar"s")),
13704                                 (LW(20,5),
13705                                  Apply
13706                                    (Call
13707                                       ("write'R",ATy(qTy,qTy),
13708                                        TP[Call
13709                                             ("reg'PSR",F32,
13710                                              Dest
13711                                                ("SPSR_abt",CTy"PSR",
13712                                                 qVar"s")),Var("d",F4)]),
13713                                     qVar"s")),
13714                                 (LW(22,5),
13715                                  Apply
13716                                    (Call
13717                                       ("write'R",ATy(qTy,qTy),
13718                                        TP[Call
13719                                             ("reg'PSR",F32,
13720                                              Dest
13721                                                ("SPSR_und",CTy"PSR",
13722                                                 qVar"s")),Var("d",F4)]),
13723                                     qVar"s")),
13724                                 (LW(28,5),
13725                                  Apply
13726                                    (Call
13727                                       ("write'R",ATy(qTy,qTy),
13728                                        TP[Call
13729                                             ("reg'PSR",F32,
13730                                              Dest
13731                                                ("SPSR_mon",CTy"PSR",
13732                                                 qVar"s")),Var("d",F4)]),
13733                                     qVar"s")),
13734                                 (LW(30,5),
13735                                  Apply
13736                                    (Call
13737                                       ("write'R",ATy(qTy,qTy),
13738                                        TP[Call
13739                                             ("reg'PSR",F32,
13740                                              Dest
13741                                                ("SPSR_hyp",CTy"PSR",
13742                                                 qVar"s")),Var("d",F4)]),
13743                                     qVar"s")),(AVar(FTy 5),qVar"s")])),
13744                         Let(qVar"s",
13745                             Apply
13746                               (Call
13747                                  ("BankedRegisterAccessValid",
13748                                   ATy(qTy,qTy),
13749                                   TP[Var("SYSm",FTy 5),Var("v",FTy 5)]),
13750                                qVar"s"),
13751                             ITB([(EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2),
13752                                      LW(0,2)),
13753                                   Let(TP[Var("v",F32),qVar"s"],
13754                                       Apply
13755                                         (Call
13756                                            ("Rmode",
13757                                             ATy(qTy,PTy(F32,qTy)),
13758                                             TP[Bop(Add,
13759                                                    Mop(Cast F4,
13760                                                        EX(Var("SYSm",
13761                                                               FTy 5),
13762                                                           LN 2,LN 0,FTy 3)),
13763                                                    LW(8,4)),LW(16,5)]),
13764                                          qVar"s"),
13765                                       Apply
13766                                         (Call
13767                                            ("write'R",ATy(qTy,qTy),
13768                                             TP[Var("v",F32),Var("d",F4)]),
13769                                          qVar"s"))),
13770                                  (EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2),
13771                                      LW(1,2)),
13772                                   Let(TP[Var("v",F32),qVar"s"],
13773                                       Apply
13774                                         (Call
13775                                            ("Rmode",
13776                                             ATy(qTy,PTy(F32,qTy)),
13777                                             TP[Bop(Add,
13778                                                    Mop(Cast F4,
13779                                                        EX(Var("SYSm",
13780                                                               FTy 5),
13781                                                           LN 2,LN 0,FTy 3)),
13782                                                    LW(8,4)),LW(17,5)]),
13783                                          qVar"s"),
13784                                       Apply
13785                                         (Call
13786                                            ("write'R",ATy(qTy,qTy),
13787                                             TP[Var("v",F32),Var("d",F4)]),
13788                                          qVar"s"))),
13789                                  (EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2),
13790                                      LW(3,2)),
13791                                   ITB([(Mop(Not,
13792                                             Bop(Bit,Var("SYSm",FTy 5),
13793                                                 LN 1)),
13794                                         Let(TP[Var("v",F32),qVar"s"],
13795                                             Apply
13796                                               (Call
13797                                                  ("Rmode",
13798                                                   ATy(qTy,PTy(F32,qTy)),
13799                                                   TP[Bop(Sub,LW(14,4),
13800                                                          Mop(Cast F4,
13801                                                              Bop(Bit,
13802                                                                  Var("SYSm",
13803                                                                      FTy 5),
13804                                                                  LN 0))),
13805                                                      LW(22,5)]),qVar"s"),
13806                                             Apply
13807                                               (Call
13808                                                  ("write'R",ATy(qTy,qTy),
13809                                                   TP[Var("v",F32),
13810                                                      Var("d",F4)]),
13811                                                qVar"s"))),
13812                                        (Bop(Bit,Var("SYSm",FTy 5),LN 0),
13813                                         Let(TP[Var("v",F32),qVar"s"],
13814                                             Apply
13815                                               (Call
13816                                                  ("Rmode",
13817                                                   ATy(qTy,PTy(F32,qTy)),
13818                                                   TP[LW(13,4),LW(26,5)]),
13819                                                qVar"s"),
13820                                             Apply
13821                                               (Call
13822                                                  ("write'R",ATy(qTy,qTy),
13823                                                   TP[Var("v",F32),
13824                                                      Var("d",F4)]),
13825                                                qVar"s")))],
13826                                       Apply
13827                                         (Call
13828                                            ("write'R",ATy(qTy,qTy),
13829                                             TP[Dest
13830                                                  ("ELR_hyp",F32,qVar"s"),
13831                                                Var("d",F4)]),qVar"s")))],
13832                                 Let(Var("s0",FTy 5),
13833                                     BFI(LN 4,LN 4,Mop(Cast F1,LT),
13834                                         BFI(LN 3,LN 3,
13835                                             Mop(Cast F1,
13836                                                 Bop(And,
13837                                                     Bop(Bit,
13838                                                         Var("SYSm",FTy 5),
13839                                                         LN 2),
13840                                                     Bop(Bit,
13841                                                         Var("SYSm",FTy 5),
13842                                                         LN 1))),
13843                                             BFI(LN 2,LN 2,
13844                                                 Mop(Cast F1,
13845                                                     Bop(And,
13846                                                         Bop(Bit,
13847                                                             Var("SYSm",
13848                                                                 FTy 5),
13849                                                             LN 2),
13850                                                         Mop(Not,
13851                                                             Bop(Bit,
13852                                                                 Var("SYSm",
13853                                                                     FTy 5),
13854                                                                 LN 1)))),
13855                                                 BFI(LN 1,LN 1,
13856                                                     Mop(Cast F1,LT),
13857                                                     BFI(LN 0,LN 0,
13858                                                         Mop(Cast F1,
13859                                                             Bop(Or,
13860                                                                 Bop(Bit,
13861                                                                     Var("SYSm",
13862                                                                         FTy 5),
13863                                                                     LN 2),
13864                                                                 Bop(Bit,
13865                                                                     Var("SYSm",
13866                                                                         FTy 5),
13867                                                                     LN 1))),
13868                                                         LX(FTy 5)))))),
13869                                     ITE(EQ(Var("v",FTy 5),Var("s0",FTy 5)),
13870                                         Mop(Snd,
13871                                             Apply
13872                                               (Call
13873                                                  ("raise'exception",
13874                                                   ATy(qTy,PTy(uTy,qTy)),
13875                                                   Call
13876                                                     ("UNPREDICTABLE",
13877                                                      CTy"exception",
13878                                                      LS
13879                                                       "MoveToRegisterFromBankedOrSpecial")),
13880                                                qVar"s")),
13881                                         Let(TP[Var("v",PTy(F32,F4)),
13882                                                Var("s",PTy(FTy 5,qTy))],
13883                                             Let(TP[Var("v",F32),
13884                                                    Var("s",PTy(FTy 5,qTy))],
13885                                                 Let(TP[Var("v",F32),
13886                                                        qVar"s3"],
13887                                                     Apply
13888                                                       (Call
13889                                                          ("Rmode",
13890                                                           ATy(qTy,
13891                                                               PTy(F32,qTy)),
13892                                                           TP[Bop(Sub,
13893                                                                  LW(14,4),
13894                                                                  Mop(Cast
13895                                                                        F4,
13896                                                                      Bop(Bit,
13897                                                                          Var("SYSm",
13898                                                                              FTy 5),
13899                                                                          LN
13900                                                                           0))),
13901                                                              Var("s0",
13902                                                                  FTy 5)]),
13903                                                        qVar"s"),
13904                                                     TP[Var("v",F32),
13905                                                        Var("s0",FTy 5),
13906                                                        qVar"s3"]),
13907                                                 TP[TP[Var("v",F32),
13908                                                       Var("d",F4)],
13909                                                    Var("s",PTy(FTy 5,qTy))]),
13910                                             Apply
13911                                               (Call
13912                                                  ("write'R",ATy(qTy,qTy),
13913                                                   Var("v",PTy(F32,F4))),
13914                                                Mop(Snd,
13915                                                    Var("s",PTy(FTy 5,qTy))))))))))))))))
13916;
13917val dfn'MoveToSpecialFromImmediate_def = Def
13918  ("dfn'MoveToSpecialFromImmediate",
13919   TP[bVar"write_spsr",Var("imm32",F32),Var("mask",F4)],
13920   Close
13921     (qVar"state",
13922      Apply
13923        (Call("IncPC",ATy(qTy,qTy),LU),
13924         ITE(bVar"write_spsr",
13925             Apply
13926               (Call
13927                  ("SPSRWriteByInstr",ATy(qTy,qTy),
13928                   TP[Var("imm32",F32),Var("mask",F4)]),qVar"state"),
13929             Let(qVar"s",
13930                 Apply
13931                   (Call
13932                      ("CPSRWriteByInstr",ATy(qTy,qTy),
13933                       TP[Var("imm32",F32),Var("mask",F4),LF]),qVar"state"),
13934                 ITE(Bop(And,
13935                         EQ(Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")),
13936                            LW(26,5)),
13937                         EQ(Apply
13938                              (Call
13939                                 ("CurrentInstrSet",
13940                                  ATy(qTy,CTy"InstrSet"),LU),qVar"s"),
13941                            LC("InstrSet_ThumbEE",CTy"InstrSet"))),
13942                     Mop(Snd,
13943                         Apply
13944                           (Call
13945                              ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
13946                               Call
13947                                 ("UNPREDICTABLE",CTy"exception",
13948                                  LS"MoveToSpecialFromImmediate")),qVar"s")),
13949                     qVar"s"))))))
13950;
13951val dfn'MoveToSpecialFromRegister_def = Def
13952  ("dfn'MoveToSpecialFromRegister",
13953   TP[bVar"write_spsr",Var("n",F4),Var("mask",F4)],
13954   Close
13955     (qVar"state",
13956      Apply
13957        (Call("IncPC",ATy(qTy,qTy),LU),
13958         ITE(bVar"write_spsr",
13959             Let(TP[Var("v",F32),qVar"s"],
13960                 Apply
13961                   (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
13962                    qVar"state"),
13963                 Apply
13964                   (Call
13965                      ("SPSRWriteByInstr",ATy(qTy,qTy),
13966                       TP[Var("v",F32),Var("mask",F4)]),qVar"s")),
13967             Let(TP[Var("v",F32),qVar"s"],
13968                 Apply
13969                   (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
13970                    qVar"state"),
13971                 Let(qVar"s",
13972                     Apply
13973                       (Call
13974                          ("CPSRWriteByInstr",ATy(qTy,qTy),
13975                           TP[Var("v",F32),Var("mask",F4),LF]),qVar"s"),
13976                     ITE(Bop(And,
13977                             EQ(Dest
13978                                  ("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")),
13979                                LW(26,5)),
13980                             EQ(Apply
13981                                  (Call
13982                                     ("CurrentInstrSet",
13983                                      ATy(qTy,CTy"InstrSet"),LU),qVar"s"),
13984                                LC("InstrSet_ThumbEE",CTy"InstrSet"))),
13985                         Mop(Snd,
13986                             Apply
13987                               (Call
13988                                  ("raise'exception",
13989                                   ATy(qTy,PTy(uTy,qTy)),
13990                                   Call
13991                                     ("UNPREDICTABLE",CTy"exception",
13992                                      LS"MoveToSpecialFromRegister")),
13993                                qVar"s")),qVar"s")))))))
13994;
13995val dfn'MoveToBankedOrSpecialRegister_def = Def
13996  ("dfn'MoveToBankedOrSpecialRegister",
13997   TP[bVar"write_spsr",Var("SYSm",FTy 5),Var("n",F4)],
13998   Close
13999     (qVar"state",
14000      Let(TP[bVar"v",qVar"s"],
14001          Apply
14002            (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
14003             qVar"state"),
14004          ITE(Mop(Not,bVar"v"),
14005              Mop(Snd,
14006                  Apply
14007                    (Call
14008                       ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
14009                        Call
14010                          ("UNPREDICTABLE",CTy"exception",
14011                           LS"MoveToBankedOrSpecialRegister")),qVar"s")),
14012              Let(Var("v",FTy 5),
14013                  Dest("M",FTy 5,Dest("CPSR",CTy"PSR",qVar"s")),
14014                  Apply
14015                    (Call("IncPC",ATy(qTy,qTy),LU),
14016                     ITE(bVar"write_spsr",
14017                         Let(qVar"s",
14018                             Apply
14019                               (Call
14020                                  ("SPSRAccessValid",ATy(qTy,qTy),
14021                                   TP[Var("SYSm",FTy 5),Var("v",FTy 5)]),
14022                                qVar"s"),
14023                             CS(Var("SYSm",FTy 5),
14024                                [(LW(14,5),
14025                                  Let(TP[Var("v",CTy"PSR"),qVar"s"],
14026                                      Let(TP[Var("v",PTy(CTy"PSR",F32)),
14027                                             qVar"s"],
14028                                          Let(TP[Var("v0",F32),qVar"s0"],
14029                                              Apply
14030                                                (Call
14031                                                   ("R",
14032                                                    ATy(qTy,PTy(F32,qTy)),
14033                                                    Var("n",F4)),qVar"s"),
14034                                              TP[TP[Dest
14035                                                      ("SPSR_fiq",
14036                                                       CTy"PSR",qVar"s"),
14037                                                    Var("v0",F32)],
14038                                                 qVar"s0"]),
14039                                          TP[Call
14040                                               ("write'reg'PSR",CTy"PSR",
14041                                                Var("v",PTy(CTy"PSR",F32))),
14042                                             qVar"s"]),
14043                                      Rupd
14044                                        ("SPSR_fiq",
14045                                         TP[qVar"s",Var("v",CTy"PSR")]))),
14046                                 (LW(16,5),
14047                                  Let(TP[Var("v",CTy"PSR"),qVar"s"],
14048                                      Let(TP[Var("v",PTy(CTy"PSR",F32)),
14049                                             qVar"s"],
14050                                          Let(TP[Var("v0",F32),qVar"s0"],
14051                                              Apply
14052                                                (Call
14053                                                   ("R",
14054                                                    ATy(qTy,PTy(F32,qTy)),
14055                                                    Var("n",F4)),qVar"s"),
14056                                              TP[TP[Dest
14057                                                      ("SPSR_irq",
14058                                                       CTy"PSR",qVar"s"),
14059                                                    Var("v0",F32)],
14060                                                 qVar"s0"]),
14061                                          TP[Call
14062                                               ("write'reg'PSR",CTy"PSR",
14063                                                Var("v",PTy(CTy"PSR",F32))),
14064                                             qVar"s"]),
14065                                      Rupd
14066                                        ("SPSR_irq",
14067                                         TP[qVar"s",Var("v",CTy"PSR")]))),
14068                                 (LW(18,5),
14069                                  Let(TP[Var("v",CTy"PSR"),qVar"s"],
14070                                      Let(TP[Var("v",PTy(CTy"PSR",F32)),
14071                                             qVar"s"],
14072                                          Let(TP[Var("v0",F32),qVar"s0"],
14073                                              Apply
14074                                                (Call
14075                                                   ("R",
14076                                                    ATy(qTy,PTy(F32,qTy)),
14077                                                    Var("n",F4)),qVar"s"),
14078                                              TP[TP[Dest
14079                                                      ("SPSR_svc",
14080                                                       CTy"PSR",qVar"s"),
14081                                                    Var("v0",F32)],
14082                                                 qVar"s0"]),
14083                                          TP[Call
14084                                               ("write'reg'PSR",CTy"PSR",
14085                                                Var("v",PTy(CTy"PSR",F32))),
14086                                             qVar"s"]),
14087                                      Rupd
14088                                        ("SPSR_svc",
14089                                         TP[qVar"s",Var("v",CTy"PSR")]))),
14090                                 (LW(20,5),
14091                                  Let(TP[Var("v",CTy"PSR"),qVar"s"],
14092                                      Let(TP[Var("v",PTy(CTy"PSR",F32)),
14093                                             qVar"s"],
14094                                          Let(TP[Var("v0",F32),qVar"s0"],
14095                                              Apply
14096                                                (Call
14097                                                   ("R",
14098                                                    ATy(qTy,PTy(F32,qTy)),
14099                                                    Var("n",F4)),qVar"s"),
14100                                              TP[TP[Dest
14101                                                      ("SPSR_abt",
14102                                                       CTy"PSR",qVar"s"),
14103                                                    Var("v0",F32)],
14104                                                 qVar"s0"]),
14105                                          TP[Call
14106                                               ("write'reg'PSR",CTy"PSR",
14107                                                Var("v",PTy(CTy"PSR",F32))),
14108                                             qVar"s"]),
14109                                      Rupd
14110                                        ("SPSR_abt",
14111                                         TP[qVar"s",Var("v",CTy"PSR")]))),
14112                                 (LW(22,5),
14113                                  Let(TP[Var("v",CTy"PSR"),qVar"s"],
14114                                      Let(TP[Var("v",PTy(CTy"PSR",F32)),
14115                                             qVar"s"],
14116                                          Let(TP[Var("v0",F32),qVar"s0"],
14117                                              Apply
14118                                                (Call
14119                                                   ("R",
14120                                                    ATy(qTy,PTy(F32,qTy)),
14121                                                    Var("n",F4)),qVar"s"),
14122                                              TP[TP[Dest
14123                                                      ("SPSR_und",
14124                                                       CTy"PSR",qVar"s"),
14125                                                    Var("v0",F32)],
14126                                                 qVar"s0"]),
14127                                          TP[Call
14128                                               ("write'reg'PSR",CTy"PSR",
14129                                                Var("v",PTy(CTy"PSR",F32))),
14130                                             qVar"s"]),
14131                                      Rupd
14132                                        ("SPSR_und",
14133                                         TP[qVar"s",Var("v",CTy"PSR")]))),
14134                                 (LW(28,5),
14135                                  Let(TP[Var("v",CTy"PSR"),qVar"s"],
14136                                      Let(TP[Var("v",PTy(CTy"PSR",F32)),
14137                                             qVar"s"],
14138                                          Let(TP[Var("v0",F32),qVar"s0"],
14139                                              Apply
14140                                                (Call
14141                                                   ("R",
14142                                                    ATy(qTy,PTy(F32,qTy)),
14143                                                    Var("n",F4)),qVar"s"),
14144                                              TP[TP[Dest
14145                                                      ("SPSR_mon",
14146                                                       CTy"PSR",qVar"s"),
14147                                                    Var("v0",F32)],
14148                                                 qVar"s0"]),
14149                                          TP[Call
14150                                               ("write'reg'PSR",CTy"PSR",
14151                                                Var("v",PTy(CTy"PSR",F32))),
14152                                             qVar"s"]),
14153                                      Rupd
14154                                        ("SPSR_mon",
14155                                         TP[qVar"s",Var("v",CTy"PSR")]))),
14156                                 (LW(30,5),
14157                                  Let(TP[Var("v",CTy"PSR"),qVar"s"],
14158                                      Let(TP[Var("v",PTy(CTy"PSR",F32)),
14159                                             qVar"s"],
14160                                          Let(TP[Var("v0",F32),qVar"s0"],
14161                                              Apply
14162                                                (Call
14163                                                   ("R",
14164                                                    ATy(qTy,PTy(F32,qTy)),
14165                                                    Var("n",F4)),qVar"s"),
14166                                              TP[TP[Dest
14167                                                      ("SPSR_hyp",
14168                                                       CTy"PSR",qVar"s"),
14169                                                    Var("v0",F32)],
14170                                                 qVar"s0"]),
14171                                          TP[Call
14172                                               ("write'reg'PSR",CTy"PSR",
14173                                                Var("v",PTy(CTy"PSR",F32))),
14174                                             qVar"s"]),
14175                                      Rupd
14176                                        ("SPSR_hyp",
14177                                         TP[qVar"s",Var("v",CTy"PSR")]))),
14178                                 (AVar(FTy 5),qVar"s")])),
14179                         Let(qVar"s",
14180                             Apply
14181                               (Call
14182                                  ("BankedRegisterAccessValid",
14183                                   ATy(qTy,qTy),
14184                                   TP[Var("SYSm",FTy 5),Var("v",FTy 5)]),
14185                                qVar"s"),
14186                             ITB([(EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2),
14187                                      LW(0,2)),
14188                                   Let(TP[Var("v",F32),qVar"s"],
14189                                       Apply
14190                                         (Call
14191                                            ("R",ATy(qTy,PTy(F32,qTy)),
14192                                             Var("n",F4)),qVar"s"),
14193                                       Apply
14194                                         (Call
14195                                            ("write'Rmode",ATy(qTy,qTy),
14196                                             TP[Var("v",F32),
14197                                                Bop(Add,
14198                                                    Mop(Cast F4,
14199                                                        EX(Var("SYSm",
14200                                                               FTy 5),
14201                                                           LN 2,LN 0,FTy 3)),
14202                                                    LW(8,4)),LW(16,5)]),
14203                                          qVar"s"))),
14204                                  (EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2),
14205                                      LW(1,2)),
14206                                   Let(TP[Var("v",F32),qVar"s"],
14207                                       Apply
14208                                         (Call
14209                                            ("R",ATy(qTy,PTy(F32,qTy)),
14210                                             Var("n",F4)),qVar"s"),
14211                                       Apply
14212                                         (Call
14213                                            ("write'Rmode",ATy(qTy,qTy),
14214                                             TP[Var("v",F32),
14215                                                Bop(Add,
14216                                                    Mop(Cast F4,
14217                                                        EX(Var("SYSm",
14218                                                               FTy 5),
14219                                                           LN 2,LN 0,FTy 3)),
14220                                                    LW(8,4)),LW(17,5)]),
14221                                          qVar"s"))),
14222                                  (EQ(EX(Var("SYSm",FTy 5),LN 4,LN 3,FTy 2),
14223                                      LW(3,2)),
14224                                   ITB([(Mop(Not,
14225                                             Bop(Bit,Var("SYSm",FTy 5),
14226                                                 LN 1)),
14227                                         Let(TP[Var("v",F32),qVar"s"],
14228                                             Apply
14229                                               (Call
14230                                                  ("R",
14231                                                   ATy(qTy,PTy(F32,qTy)),
14232                                                   Var("n",F4)),qVar"s"),
14233                                             Apply
14234                                               (Call
14235                                                  ("write'Rmode",
14236                                                   ATy(qTy,qTy),
14237                                                   TP[Var("v",F32),
14238                                                      Bop(Sub,LW(14,4),
14239                                                          Mop(Cast F4,
14240                                                              Bop(Bit,
14241                                                                  Var("SYSm",
14242                                                                      FTy 5),
14243                                                                  LN 0))),
14244                                                      LW(22,5)]),qVar"s"))),
14245                                        (Bop(Bit,Var("SYSm",FTy 5),LN 0),
14246                                         Let(TP[Var("v",F32),qVar"s"],
14247                                             Apply
14248                                               (Call
14249                                                  ("R",
14250                                                   ATy(qTy,PTy(F32,qTy)),
14251                                                   Var("n",F4)),qVar"s"),
14252                                             Apply
14253                                               (Call
14254                                                  ("write'Rmode",
14255                                                   ATy(qTy,qTy),
14256                                                   TP[Var("v",F32),
14257                                                      LW(13,4),LW(26,5)]),
14258                                                qVar"s")))],
14259                                       Let(TP[Var("v",F32),qVar"s"],
14260                                           Apply
14261                                             (Call
14262                                                ("R",
14263                                                 ATy(qTy,PTy(F32,qTy)),
14264                                                 Var("n",F4)),qVar"s"),
14265                                           Rupd
14266                                             ("ELR_hyp",
14267                                              TP[qVar"s",Var("v",F32)]))))],
14268                                 Let(Var("s0",FTy 5),
14269                                     BFI(LN 4,LN 4,Mop(Cast F1,LT),
14270                                         BFI(LN 3,LN 3,
14271                                             Mop(Cast F1,
14272                                                 Bop(And,
14273                                                     Bop(Bit,
14274                                                         Var("SYSm",FTy 5),
14275                                                         LN 2),
14276                                                     Bop(Bit,
14277                                                         Var("SYSm",FTy 5),
14278                                                         LN 1))),
14279                                             BFI(LN 2,LN 2,
14280                                                 Mop(Cast F1,
14281                                                     Bop(And,
14282                                                         Bop(Bit,
14283                                                             Var("SYSm",
14284                                                                 FTy 5),
14285                                                             LN 2),
14286                                                         Mop(Not,
14287                                                             Bop(Bit,
14288                                                                 Var("SYSm",
14289                                                                     FTy 5),
14290                                                                 LN 1)))),
14291                                                 BFI(LN 1,LN 1,
14292                                                     Mop(Cast F1,LT),
14293                                                     BFI(LN 0,LN 0,
14294                                                         Mop(Cast F1,
14295                                                             Bop(Or,
14296                                                                 Bop(Bit,
14297                                                                     Var("SYSm",
14298                                                                         FTy 5),
14299                                                                     LN 2),
14300                                                                 Bop(Bit,
14301                                                                     Var("SYSm",
14302                                                                         FTy 5),
14303                                                                     LN 1))),
14304                                                         LX(FTy 5)))))),
14305                                     ITE(EQ(Var("v",FTy 5),Var("s0",FTy 5)),
14306                                         Mop(Snd,
14307                                             Apply
14308                                               (Call
14309                                                  ("raise'exception",
14310                                                   ATy(qTy,PTy(uTy,qTy)),
14311                                                   Call
14312                                                     ("UNPREDICTABLE",
14313                                                      CTy"exception",
14314                                                      LS
14315                                                       "MoveToBankedOrSpecialRegister")),
14316                                                qVar"s")),
14317                                         Let(TP[Var("v0",F32),
14318                                                Var("s2",PTy(FTy 5,qTy))],
14319                                             Let(TP[Var("v",F32),qVar"s3"],
14320                                                 Apply
14321                                                   (Call
14322                                                      ("R",
14323                                                       ATy(qTy,
14324                                                           PTy(F32,qTy)),
14325                                                       Var("n",F4)),
14326                                                    qVar"s"),
14327                                                 TP[Var("v",F32),
14328                                                    Var("s0",FTy 5),
14329                                                    qVar"s3"]),
14330                                             Apply
14331                                               (Call
14332                                                  ("write'Rmode",
14333                                                   ATy(qTy,qTy),
14334                                                   TP[Var("v0",F32),
14335                                                      Bop(Sub,LW(14,4),
14336                                                          Mop(Cast F4,
14337                                                              Bop(Bit,
14338                                                                  Var("SYSm",
14339                                                                      FTy 5),
14340                                                                  LN 0))),
14341                                                      Var("s0",FTy 5)]),
14342                                                Mop(Snd,
14343                                                    Var("s2",
14344                                                        PTy(FTy 5,qTy))))))))))))))))
14345;
14346val dfn'ReturnFromException_def = Def
14347  ("dfn'ReturnFromException",
14348   TP[bVar"increment",bVar"wordhigher",bVar"wback",Var("n",F4)],
14349   Close
14350     (qVar"state",
14351      Let(TP[bVar"v",qVar"s"],
14352          Apply
14353            (Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
14354          ITE(bVar"v",
14355              Apply
14356                (Call("TakeUndefInstrException",ATy(qTy,qTy),LU),qVar"s"),
14357              Let(TP[bVar"v",qVar"s"],
14358                  Apply
14359                    (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
14360                     qVar"s"),
14361                  ITE(Bop(Or,Mop(Not,bVar"v"),
14362                          EQ(Apply
14363                               (Call
14364                                  ("CurrentInstrSet",
14365                                   ATy(qTy,CTy"InstrSet"),LU),qVar"s"),
14366                             LC("InstrSet_ThumbEE",CTy"InstrSet"))),
14367                      Mop(Snd,
14368                          Apply
14369                            (Call
14370                               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
14371                                Call
14372                                  ("UNPREDICTABLE",CTy"exception",
14373                                   LS"ReturnFromException")),qVar"s")),
14374                      Let(TP[Var("v",F32),qVar"s"],
14375                          Apply
14376                            (Call("R",ATy(qTy,PTy(F32,qTy)),Var("n",F4)),
14377                             qVar"s"),
14378                          Let(Var("address",F32),
14379                              ITE(bVar"increment",Var("v",F32),
14380                                  Bop(Sub,Var("v",F32),LW(8,32))),
14381                              Let(Var("address",F32),
14382                                  ITE(bVar"wordhigher",
14383                                      Bop(Add,Var("address",F32),LW(4,32)),
14384                                      Var("address",F32)),
14385                                  Let(TP[Var("v",F32),qVar"s"],
14386                                      Apply
14387                                        (Call
14388                                           ("MemA",ATy(qTy,PTy(F32,qTy)),
14389                                            TP[Var("address",F32),LN 4]),
14390                                         ITE(bVar"wback",
14391                                             Apply
14392                                               (Call
14393                                                  ("write'R",ATy(qTy,qTy),
14394                                                   TP[ITE(bVar"increment",
14395                                                          Bop(Add,
14396                                                              Var("v",F32),
14397                                                              LW(8,32)),
14398                                                          Bop(Sub,
14399                                                              Var("v",F32),
14400                                                              LW(8,32))),
14401                                                      Var("n",F4)]),
14402                                                qVar"s"),qVar"s")),
14403                                      Let(TP[Var("v0",F32),qVar"s"],
14404                                          Apply
14405                                            (Call
14406                                               ("MemA",
14407                                                ATy(qTy,PTy(F32,qTy)),
14408                                                TP[Bop(Add,
14409                                                       Var("address",F32),
14410                                                       LW(4,32)),LN 4]),
14411                                             qVar"s"),
14412                                          Let(qVar"s",
14413                                              Apply
14414                                                (Call
14415                                                   ("CPSRWriteByInstr",
14416                                                    ATy(qTy,qTy),
14417                                                    TP[Var("v0",F32),
14418                                                       LW(15,4),LT]),
14419                                                 qVar"s"),
14420                                              ITE(Bop(And,
14421                                                      EQ(Dest
14422                                                           ("M",FTy 5,
14423                                                            Dest
14424                                                              ("CPSR",
14425                                                               CTy"PSR",
14426                                                               qVar"s")),
14427                                                         LW(26,5)),
14428                                                      Bop(And,
14429                                                          Dest
14430                                                            ("J",bTy,
14431                                                             Dest
14432                                                               ("CPSR",
14433                                                                CTy"PSR",
14434                                                                qVar"s")),
14435                                                          Dest
14436                                                            ("T",bTy,
14437                                                             Dest
14438                                                               ("CPSR",
14439                                                                CTy"PSR",
14440                                                                qVar"s")))),
14441                                                  Mop(Snd,
14442                                                      Apply
14443                                                        (Call
14444                                                           ("raise'exception",
14445                                                            ATy(qTy,
14446                                                                PTy(uTy,
14447                                                                    qTy)),
14448                                                            Call
14449                                                              ("UNPREDICTABLE",
14450                                                               CTy"exception",
14451                                                               LS
14452                                                                "ReturnFromException")),
14453                                                         qVar"s")),
14454                                                  Apply
14455                                                    (Call
14456                                                       ("BranchWritePC",
14457                                                        ATy(qTy,qTy),
14458                                                        Var("v",F32)),
14459                                                     qVar"s"))))))))))))))
14460;
14461val dfn'SecureMonitorCall_def = Def
14462  ("dfn'SecureMonitorCall",Var("imm4",F4),
14463   Close
14464     (qVar"state",
14465      Let(TP[bVar"v",qVar"s"],
14466          ITE(Apply(Call("HaveSecurityExt",ATy(qTy,bTy),LU),qVar"state"),
14467              Apply
14468                (Call("CurrentModeIsNotUser",ATy(qTy,PTy(bTy,qTy)),LU),
14469                 qVar"state"),TP[LF,qVar"state"]),
14470          ITE(bVar"v",
14471              Let(TP[bVar"v",qVar"s"],
14472                  ITE(Apply(Call("HaveVirtExt",ATy(qTy,bTy),LU),qVar"s"),
14473                      ITE(Mop(Not,
14474                              Apply
14475                                (Call("IsSecure",ATy(qTy,bTy),LU),qVar"s")),
14476                          Let(TP[bVar"v",qVar"s"],
14477                              Apply
14478                                (Call
14479                                   ("CurrentModeIsHyp",
14480                                    ATy(qTy,PTy(bTy,qTy)),LU),qVar"s"),
14481                              TP[Bop(And,Mop(Not,bVar"v"),
14482                                     Dest
14483                                       ("TSC",bTy,
14484                                        Dest
14485                                          ("HCR",CTy"HCR",
14486                                           Dest("CP15",CTy"CP15",qVar"s")))),
14487                                 qVar"s"]),TP[LF,qVar"s"]),TP[LF,qVar"s"]),
14488                  ITB([(bVar"v",
14489                        Apply
14490                          (Call("TakeHypTrapException",ATy(qTy,qTy),LU),
14491                           Apply
14492                             (Call
14493                                ("WriteHSR",ATy(qTy,qTy),
14494                                 TP[LW(19,6),LW(0,25)]),qVar"s"))),
14495                       (Dest
14496                          ("SCD",bTy,
14497                           Dest
14498                             ("SCR",CTy"SCR",
14499                              Dest("CP15",CTy"CP15",qVar"s"))),
14500                        ITE(Apply
14501                              (Call("IsSecure",ATy(qTy,bTy),LU),qVar"s"),
14502                            Mop(Snd,
14503                                Apply
14504                                  (Call
14505                                     ("raise'exception",
14506                                      ATy(qTy,PTy(uTy,qTy)),
14507                                      Call
14508                                        ("UNPREDICTABLE",CTy"exception",
14509                                         LS"SecureMonitorCall")),qVar"s")),
14510                            Apply
14511                              (Call
14512                                 ("TakeUndefInstrException",ATy(qTy,qTy),
14513                                  LU),qVar"s")))],
14514                      Apply
14515                        (Call("TakeSMCException",ATy(qTy,qTy),LU),qVar"s"))),
14516              Apply
14517                (Call("TakeUndefInstrException",ATy(qTy,qTy),LU),qVar"s")))))
14518;
14519val dfn'SupervisorCall_def = Def
14520  ("dfn'SupervisorCall",Var("imm32",F32),
14521   Close
14522     (qVar"state",
14523      Apply
14524        (Call
14525           ("CallSupervisor",ATy(qTy,qTy),
14526            EX(Var("imm32",F32),LN 15,LN 0,F16)),qVar"state")))
14527;
14528val dfn'StoreReturnState_def = Def
14529  ("dfn'StoreReturnState",
14530   TP[bVar"increment",bVar"wordhigher",bVar"wback",Var("mode",FTy 5)],
14531   Close
14532     (qVar"state",
14533      Let(TP[bVar"v",qVar"s"],
14534          Apply
14535            (Call("CurrentModeIsHyp",ATy(qTy,PTy(bTy,qTy)),LU),qVar"state"),
14536          ITE(bVar"v",
14537              Apply
14538                (Call("TakeUndefInstrException",ATy(qTy,qTy),LU),qVar"s"),
14539              Let(TP[bVar"v",qVar"s"],
14540                  Apply
14541                    (Call
14542                       ("CurrentModeIsUserOrSystem",ATy(qTy,PTy(bTy,qTy)),
14543                        LU),qVar"s"),
14544                  ITB([(Bop(Or,bVar"v",
14545                            EQ(Apply
14546                                 (Call
14547                                    ("CurrentInstrSet",
14548                                     ATy(qTy,CTy"InstrSet"),LU),qVar"s"),
14549                               LC("InstrSet_ThumbEE",CTy"InstrSet"))),
14550                        Mop(Snd,
14551                            Apply
14552                              (Call
14553                                 ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
14554                                  Call
14555                                    ("UNPREDICTABLE",CTy"exception",
14556                                     LS"StoreReturnState")),qVar"s"))),
14557                       (EQ(Var("mode",FTy 5),LW(26,5)),
14558                        Mop(Snd,
14559                            Apply
14560                              (Call
14561                                 ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
14562                                  Call
14563                                    ("UNPREDICTABLE",CTy"exception",
14564                                     LS"StoreReturnState")),qVar"s")))],
14565                      Let(TP[Var("v",F32),qVar"s"],
14566                          Apply
14567                            (Call
14568                               ("Rmode",ATy(qTy,PTy(F32,qTy)),
14569                                TP[LW(13,4),Var("mode",FTy 5)]),
14570                             ITE(Mop(Not,
14571                                     Apply
14572                                       (Call("IsSecure",ATy(qTy,bTy),LU),
14573                                        qVar"s")),
14574                                 ITE(Bop(Or,
14575                                         EQ(Var("mode",FTy 5),LW(22,5)),
14576                                         Bop(And,
14577                                             EQ(Var("mode",FTy 5),LW(17,5)),
14578                                             Dest
14579                                               ("RFR",bTy,
14580                                                Dest
14581                                                  ("NSACR",CTy"NSACR",
14582                                                   Dest
14583                                                     ("CP15",CTy"CP15",
14584                                                      qVar"s"))))),
14585                                     Mop(Snd,
14586                                         Apply
14587                                           (Call
14588                                              ("raise'exception",
14589                                               ATy(qTy,PTy(uTy,qTy)),
14590                                               Call
14591                                                 ("UNPREDICTABLE",
14592                                                  CTy"exception",
14593                                                  LS"StoreReturnState")),
14594                                            qVar"s")),qVar"s"),qVar"s")),
14595                          Let(Var("address",F32),
14596                              ITE(bVar"increment",Var("v",F32),
14597                                  Bop(Sub,Var("v",F32),LW(8,32))),
14598                              Let(Var("address",F32),
14599                                  ITE(bVar"wordhigher",
14600                                      Bop(Add,Var("address",F32),LW(4,32)),
14601                                      Var("address",F32)),
14602                                  Let(qVar"s",
14603                                      Let(TP[Var("v",CTy"PSR"),qVar"s"],
14604                                          Apply
14605                                            (Const
14606                                               ("SPSR",
14607                                                ATy(qTy,PTy(CTy"PSR",qTy))),
14608                                             Let(TP[Var("v",F32),qVar"s"],
14609                                                 Apply
14610                                                   (Const
14611                                                      ("LR",
14612                                                       ATy(qTy,
14613                                                           PTy(F32,qTy))),
14614                                                    qVar"s"),
14615                                                 Apply
14616                                                   (Call
14617                                                      ("write'MemA",
14618                                                       ATy(qTy,qTy),
14619                                                       TP[Var("v",F32),
14620                                                          Var("address",
14621                                                              F32),LN 4]),
14622                                                    qVar"s"))),
14623                                          Apply
14624                                            (Call
14625                                               ("write'MemA",ATy(qTy,qTy),
14626                                                TP[Call
14627                                                     ("reg'PSR",F32,
14628                                                      Var("v",CTy"PSR")),
14629                                                   Bop(Add,
14630                                                       Var("address",F32),
14631                                                       LW(4,32)),LN 4]),
14632                                             qVar"s")),
14633                                      Apply
14634                                        (Call("IncPC",ATy(qTy,qTy),LU),
14635                                         ITE(bVar"wback",
14636                                             Apply
14637                                               (Call
14638                                                  ("write'Rmode",
14639                                                   ATy(qTy,qTy),
14640                                                   TP[ITE(bVar"increment",
14641                                                          Bop(Add,
14642                                                              Var("v",F32),
14643                                                              LW(8,32)),
14644                                                          Bop(Sub,
14645                                                              Var("v",F32),
14646                                                              LW(8,32))),
14647                                                      LW(13,4),
14648                                                      Var("mode",FTy 5)]),
14649                                                qVar"s"),qVar"s"))))))))))))
14650;
14651val dfn'Setend_def = Def
14652  ("dfn'Setend",bVar"set_bigend",
14653   Close
14654     (qVar"state",
14655      Apply
14656        (Call("IncPC",ATy(qTy,qTy),LU),
14657         Rupd
14658           ("CPSR",
14659            TP[qVar"state",
14660               Rupd
14661                 ("E",
14662                  TP[Dest("CPSR",CTy"PSR",qVar"state"),bVar"set_bigend"])]))))
14663;
14664val dfn'Undefined_def = Def
14665  ("dfn'Undefined",Var("imm32",F32),
14666   Close
14667     (qVar"state",
14668      Apply(Call("TakeUndefInstrException",ATy(qTy,qTy),LU),qVar"state")))
14669;
14670val dfn'NoOperation_def = Def
14671  ("dfn'NoOperation",qVar"state",
14672   Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state"))
14673;
14674val dfn'Breakpoint_def = Def
14675  ("dfn'Breakpoint",Var("imm32",F32),
14676   Close(qVar"state",Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state")))
14677;
14678val dfn'Debug_def = Def
14679  ("dfn'Debug",Var("option",F4),
14680   Close(qVar"state",Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state")))
14681;
14682val dfn'DataMemoryBarrier_def = Def
14683  ("dfn'DataMemoryBarrier",Var("option",F4),
14684   Close(qVar"state",Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state")))
14685;
14686val dfn'DataSynchronizationBarrier_def = Def
14687  ("dfn'DataSynchronizationBarrier",Var("option",F4),
14688   Close(qVar"state",Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state")))
14689;
14690val dfn'InstructionSynchronizationBarrier_def = Def
14691  ("dfn'InstructionSynchronizationBarrier",Var("option",F4),
14692   Close(qVar"state",Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state")))
14693;
14694val dfn'PreloadData_def = Def
14695  ("dfn'PreloadData",
14696   TP[bVar"add",bVar"is_pldw",Var("n",F4),Var("m",CTy"offset1")],
14697   Close(qVar"state",Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state")))
14698;
14699val dfn'PreloadDataLiteral_def = Def
14700  ("dfn'PreloadDataLiteral",TP[bVar"add",Var("imm32",F32)],
14701   Close(qVar"state",Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state")))
14702;
14703val dfn'PreloadInstruction_def = Def
14704  ("dfn'PreloadInstruction",
14705   TP[bVar"add",Var("n",F4),Var("m",CTy"offset1")],
14706   Close(qVar"state",Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state")))
14707;
14708val dfn'SendEvent_def = Def
14709  ("dfn'SendEvent",qVar"state",
14710   Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state"))
14711;
14712val dfn'WaitForEvent_def = Def
14713  ("dfn'WaitForEvent",qVar"state",
14714   Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state"))
14715;
14716val dfn'WaitForInterrupt_def = Def
14717  ("dfn'WaitForInterrupt",qVar"state",
14718   Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state"))
14719;
14720val dfn'Yield_def = Def
14721  ("dfn'Yield",qVar"state",
14722   Apply(Call("IncPC",ATy(qTy,qTy),LU),qVar"state"))
14723;
14724val Run_def = Def
14725  ("Run",Var("v0",CTy"instruction"),
14726   Close
14727     (qVar"state",
14728      CS(Var("v0",CTy"instruction"),
14729         [(Const("ClearExclusive",CTy"instruction"),
14730           Apply(Const("dfn'ClearExclusive",ATy(qTy,qTy)),qVar"state")),
14731          (Const("NoOperation",CTy"instruction"),
14732           Apply(Const("dfn'NoOperation",ATy(qTy,qTy)),qVar"state")),
14733          (Call
14734             ("Divide",CTy"instruction",
14735              Var("v152",PTy(bTy,PTy(F4,PTy(F4,F4))))),
14736           Apply
14737             (Call
14738                ("dfn'Divide",ATy(qTy,qTy),
14739                 Var("v152",PTy(bTy,PTy(F4,PTy(F4,F4))))),qVar"state")),
14740          (Call("IfThen",CTy"instruction",Var("v153",PTy(F4,F4))),
14741           Apply
14742             (Call("dfn'IfThen",ATy(qTy,qTy),Var("v153",PTy(F4,F4))),
14743              qVar"state")),
14744          (Call
14745             ("Swap",CTy"instruction",
14746              Var("v154",PTy(bTy,PTy(F4,PTy(F4,F4))))),
14747           Apply
14748             (Call
14749                ("dfn'Swap",ATy(qTy,qTy),
14750                 Var("v154",PTy(bTy,PTy(F4,PTy(F4,F4))))),qVar"state")),
14751          (Call("Undefined",CTy"instruction",Var("v155",F32)),
14752           Apply
14753             (Call("dfn'Undefined",ATy(qTy,qTy),Var("v155",F32)),
14754              qVar"state")),
14755          (Call("Branch",CTy"instruction",Var("v1",CTy"Branch")),
14756           CS(Var("v1",CTy"Branch"),
14757              [(Call("BranchExchange",CTy"Branch",Var("v2",F4)),
14758                Apply
14759                  (Call("dfn'BranchExchange",ATy(qTy,qTy),Var("v2",F4)),
14760                   qVar"state")),
14761               (Call
14762                  ("BranchLinkExchangeImmediate",CTy"Branch",
14763                   Var("v3",PTy(CTy"InstrSet",F32))),
14764                Apply
14765                  (Call
14766                     ("dfn'BranchLinkExchangeImmediate",ATy(qTy,qTy),
14767                      Var("v3",PTy(CTy"InstrSet",F32))),qVar"state")),
14768               (Call
14769                  ("BranchLinkExchangeRegister",CTy"Branch",Var("v4",F4)),
14770                Apply
14771                  (Call
14772                     ("dfn'BranchLinkExchangeRegister",ATy(qTy,qTy),
14773                      Var("v4",F4)),qVar"state")),
14774               (Call("BranchTarget",CTy"Branch",Var("v5",F32)),
14775                Apply
14776                  (Call("dfn'BranchTarget",ATy(qTy,qTy),Var("v5",F32)),
14777                   qVar"state")),
14778               (Call("CheckArray",CTy"Branch",Var("v6",PTy(F4,F4))),
14779                Apply
14780                  (Call
14781                     ("dfn'CheckArray",ATy(qTy,qTy),Var("v6",PTy(F4,F4))),
14782                   qVar"state")),
14783               (Call
14784                  ("CompareBranch",CTy"Branch",
14785                   Var("v7",PTy(bTy,PTy(F4,F32)))),
14786                Apply
14787                  (Call
14788                     ("dfn'CompareBranch",ATy(qTy,qTy),
14789                      Var("v7",PTy(bTy,PTy(F4,F32)))),qVar"state")),
14790               (Call
14791                  ("HandlerBranchLink",CTy"Branch",Var("v8",PTy(bTy,F32))),
14792                Apply
14793                  (Call
14794                     ("dfn'HandlerBranchLink",ATy(qTy,qTy),
14795                      Var("v8",PTy(bTy,F32))),qVar"state")),
14796               (Call
14797                  ("HandlerBranchLinkParameter",CTy"Branch",
14798                   Var("v9",PTy(F32,F32))),
14799                Apply
14800                  (Call
14801                     ("dfn'HandlerBranchLinkParameter",ATy(qTy,qTy),
14802                      Var("v9",PTy(F32,F32))),qVar"state")),
14803               (Call
14804                  ("HandlerBranchParameter",CTy"Branch",
14805                   Var("v10",PTy(F32,F32))),
14806                Apply
14807                  (Call
14808                     ("dfn'HandlerBranchParameter",ATy(qTy,qTy),
14809                      Var("v10",PTy(F32,F32))),qVar"state")),
14810               (Call
14811                  ("TableBranchByte",CTy"Branch",
14812                   Var("v11",PTy(bTy,PTy(F4,F4)))),
14813                Apply
14814                  (Call
14815                     ("dfn'TableBranchByte",ATy(qTy,qTy),
14816                      Var("v11",PTy(bTy,PTy(F4,F4)))),qVar"state"))])),
14817          (Call("Data",CTy"instruction",Var("v12",CTy"Data")),
14818           CS(Var("v12",CTy"Data"),
14819              [(Call
14820                  ("AddSub",CTy"Data",
14821                   Var("v13",PTy(bTy,PTy(F4,PTy(F4,FTy 12))))),
14822                Apply
14823                  (Call
14824                     ("dfn'AddSub",ATy(qTy,qTy),
14825                      Var("v13",PTy(bTy,PTy(F4,PTy(F4,FTy 12))))),
14826                   qVar"state")),
14827               (Call
14828                  ("ArithLogicImmediate",CTy"Data",
14829                   Var("v14",PTy(F4,PTy(bTy,PTy(F4,PTy(F4,FTy 12)))))),
14830                Apply
14831                  (Call
14832                     ("dfn'ArithLogicImmediate",ATy(qTy,qTy),
14833                      Var("v14",PTy(F4,PTy(bTy,PTy(F4,PTy(F4,FTy 12)))))),
14834                   qVar"state")),
14835               (Call("CountLeadingZeroes",CTy"Data",Var("v15",PTy(F4,F4))),
14836                Apply
14837                  (Call
14838                     ("dfn'CountLeadingZeroes",ATy(qTy,qTy),
14839                      Var("v15",PTy(F4,F4))),qVar"state")),
14840               (Call
14841                  ("Move",CTy"Data",
14842                   Var("v16",PTy(bTy,PTy(bTy,PTy(F4,FTy 12))))),
14843                Apply
14844                  (Call
14845                     ("dfn'Move",ATy(qTy,qTy),
14846                      Var("v16",PTy(bTy,PTy(bTy,PTy(F4,FTy 12))))),
14847                   qVar"state")),
14848               (Call
14849                  ("MoveHalfword",CTy"Data",
14850                   Var("v17",PTy(bTy,PTy(F4,F16)))),
14851                Apply
14852                  (Call
14853                     ("dfn'MoveHalfword",ATy(qTy,qTy),
14854                      Var("v17",PTy(bTy,PTy(F4,F16)))),qVar"state")),
14855               (Call
14856                  ("Register",CTy"Data",
14857                   Var("v18",
14858                       PTy(F4,
14859                           PTy(bTy,
14860                               PTy(F4,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy)))))))),
14861                Apply
14862                  (Call
14863                     ("dfn'Register",ATy(qTy,qTy),
14864                      Var("v18",
14865                          PTy(F4,
14866                              PTy(bTy,
14867                                  PTy(F4,
14868                                      PTy(F4,PTy(F4,PTy(CTy"SRType",nTy)))))))),
14869                   qVar"state")),
14870               (Call
14871                  ("RegisterShiftedRegister",CTy"Data",
14872                   Var("v19",
14873                       PTy(F4,
14874                           PTy(bTy,
14875                               PTy(F4,PTy(F4,PTy(F4,PTy(CTy"SRType",F4)))))))),
14876                Apply
14877                  (Call
14878                     ("dfn'RegisterShiftedRegister",ATy(qTy,qTy),
14879                      Var("v19",
14880                          PTy(F4,
14881                              PTy(bTy,
14882                                  PTy(F4,
14883                                      PTy(F4,PTy(F4,PTy(CTy"SRType",F4)))))))),
14884                   qVar"state")),
14885               (Call
14886                  ("ShiftImmediate",CTy"Data",
14887                   Var("v20",
14888                       PTy(bTy,
14889                           PTy(bTy,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy))))))),
14890                Apply
14891                  (Call
14892                     ("dfn'ShiftImmediate",ATy(qTy,qTy),
14893                      Var("v20",
14894                          PTy(bTy,
14895                              PTy(bTy,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy))))))),
14896                   qVar"state")),
14897               (Call
14898                  ("ShiftRegister",CTy"Data",
14899                   Var("v21",
14900                       PTy(bTy,
14901                           PTy(bTy,PTy(F4,PTy(F4,PTy(CTy"SRType",F4))))))),
14902                Apply
14903                  (Call
14904                     ("dfn'ShiftRegister",ATy(qTy,qTy),
14905                      Var("v21",
14906                          PTy(bTy,
14907                              PTy(bTy,PTy(F4,PTy(F4,PTy(CTy"SRType",F4))))))),
14908                   qVar"state")),
14909               (Call
14910                  ("TestCompareImmediate",CTy"Data",
14911                   Var("v22",PTy(FTy 2,PTy(F4,FTy 12)))),
14912                Apply
14913                  (Call
14914                     ("dfn'TestCompareImmediate",ATy(qTy,qTy),
14915                      Var("v22",PTy(FTy 2,PTy(F4,FTy 12)))),qVar"state")),
14916               (Call
14917                  ("TestCompareRegister",CTy"Data",
14918                   Var("v23",
14919                       PTy(FTy 2,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy)))))),
14920                Apply
14921                  (Call
14922                     ("dfn'TestCompareRegister",ATy(qTy,qTy),
14923                      Var("v23",
14924                          PTy(FTy 2,PTy(F4,PTy(F4,PTy(CTy"SRType",nTy)))))),
14925                   qVar"state"))])),
14926          (Call("Hint",CTy"instruction",Var("v24",CTy"Hint")),
14927           CS(Var("v24",CTy"Hint"),
14928              [(Const("SendEvent",CTy"Hint"),
14929                Apply(Const("dfn'SendEvent",ATy(qTy,qTy)),qVar"state")),
14930               (Const("WaitForEvent",CTy"Hint"),
14931                Apply(Const("dfn'WaitForEvent",ATy(qTy,qTy)),qVar"state")),
14932               (Const("WaitForInterrupt",CTy"Hint"),
14933                Apply
14934                  (Const("dfn'WaitForInterrupt",ATy(qTy,qTy)),qVar"state")),
14935               (Const("Yield",CTy"Hint"),
14936                Apply(Const("dfn'Yield",ATy(qTy,qTy)),qVar"state")),
14937               (Call("Breakpoint",CTy"Hint",Var("v25",F32)),
14938                Apply
14939                  (Call("dfn'Breakpoint",ATy(qTy,qTy),Var("v25",F32)),
14940                   qVar"state")),
14941               (Call("DataMemoryBarrier",CTy"Hint",Var("v26",F4)),
14942                Apply
14943                  (Call
14944                     ("dfn'DataMemoryBarrier",ATy(qTy,qTy),Var("v26",F4)),
14945                   qVar"state")),
14946               (Call("DataSynchronizationBarrier",CTy"Hint",Var("v27",F4)),
14947                Apply
14948                  (Call
14949                     ("dfn'DataSynchronizationBarrier",ATy(qTy,qTy),
14950                      Var("v27",F4)),qVar"state")),
14951               (Call("Debug",CTy"Hint",Var("v28",F4)),
14952                Apply
14953                  (Call("dfn'Debug",ATy(qTy,qTy),Var("v28",F4)),
14954                   qVar"state")),
14955               (Call
14956                  ("InstructionSynchronizationBarrier",CTy"Hint",
14957                   Var("v29",F4)),
14958                Apply
14959                  (Call
14960                     ("dfn'InstructionSynchronizationBarrier",
14961                      ATy(qTy,qTy),Var("v29",F4)),qVar"state")),
14962               (Call
14963                  ("PreloadData",CTy"Hint",
14964                   Var("v30",PTy(bTy,PTy(bTy,PTy(F4,CTy"offset1"))))),
14965                Apply
14966                  (Call
14967                     ("dfn'PreloadData",ATy(qTy,qTy),
14968                      Var("v30",PTy(bTy,PTy(bTy,PTy(F4,CTy"offset1"))))),
14969                   qVar"state")),
14970               (Call
14971                  ("PreloadDataLiteral",CTy"Hint",Var("v31",PTy(bTy,F32))),
14972                Apply
14973                  (Call
14974                     ("dfn'PreloadDataLiteral",ATy(qTy,qTy),
14975                      Var("v31",PTy(bTy,F32))),qVar"state")),
14976               (Call
14977                  ("PreloadInstruction",CTy"Hint",
14978                   Var("v32",PTy(bTy,PTy(F4,CTy"offset1")))),
14979                Apply
14980                  (Call
14981                     ("dfn'PreloadInstruction",ATy(qTy,qTy),
14982                      Var("v32",PTy(bTy,PTy(F4,CTy"offset1")))),
14983                   qVar"state"))])),
14984          (Call("Load",CTy"instruction",Var("v33",CTy"Load")),
14985           CS(Var("v33",CTy"Load"),
14986              [(Call
14987                  ("LoadByte",CTy"Load",
14988                   Var("v34",
14989                       PTy(bTy,
14990                           PTy(bTy,
14991                               PTy(bTy,
14992                                   PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))))),
14993                Apply
14994                  (Call
14995                     ("dfn'LoadByte",ATy(qTy,qTy),
14996                      Var("v34",
14997                          PTy(bTy,
14998                              PTy(bTy,
14999                                  PTy(bTy,
15000                                      PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))))),
15001                   qVar"state")),
15002               (Call
15003                  ("LoadByteLiteral",CTy"Load",
15004                   Var("v35",PTy(bTy,PTy(bTy,PTy(F4,F32))))),
15005                Apply
15006                  (Call
15007                     ("dfn'LoadByteLiteral",ATy(qTy,qTy),
15008                      Var("v35",PTy(bTy,PTy(bTy,PTy(F4,F32))))),
15009                   qVar"state")),
15010               (Call
15011                  ("LoadByteUnprivileged",CTy"Load",
15012                   Var("v36",
15013                       PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))),
15014                Apply
15015                  (Call
15016                     ("dfn'LoadByteUnprivileged",ATy(qTy,qTy),
15017                      Var("v36",
15018                          PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))),
15019                   qVar"state")),
15020               (Call
15021                  ("LoadDual",CTy"Load",
15022                   Var("v37",
15023                       PTy(bTy,
15024                           PTy(bTy,
15025                               PTy(bTy,
15026                                   PTy(F4,PTy(F4,PTy(F4,CTy"offset2")))))))),
15027                Apply
15028                  (Call
15029                     ("dfn'LoadDual",ATy(qTy,qTy),
15030                      Var("v37",
15031                          PTy(bTy,
15032                              PTy(bTy,
15033                                  PTy(bTy,
15034                                      PTy(F4,PTy(F4,PTy(F4,CTy"offset2")))))))),
15035                   qVar"state")),
15036               (Call
15037                  ("LoadDualLiteral",CTy"Load",
15038                   Var("v38",PTy(bTy,PTy(F4,PTy(F4,F32))))),
15039                Apply
15040                  (Call
15041                     ("dfn'LoadDualLiteral",ATy(qTy,qTy),
15042                      Var("v38",PTy(bTy,PTy(F4,PTy(F4,F32))))),qVar"state")),
15043               (Call
15044                  ("LoadExclusive",CTy"Load",
15045                   Var("v39",PTy(F4,PTy(F4,F32)))),
15046                Apply
15047                  (Call
15048                     ("dfn'LoadExclusive",ATy(qTy,qTy),
15049                      Var("v39",PTy(F4,PTy(F4,F32)))),qVar"state")),
15050               (Call("LoadExclusiveByte",CTy"Load",Var("v40",PTy(F4,F4))),
15051                Apply
15052                  (Call
15053                     ("dfn'LoadExclusiveByte",ATy(qTy,qTy),
15054                      Var("v40",PTy(F4,F4))),qVar"state")),
15055               (Call
15056                  ("LoadExclusiveDoubleword",CTy"Load",
15057                   Var("v41",PTy(F4,PTy(F4,F4)))),
15058                Apply
15059                  (Call
15060                     ("dfn'LoadExclusiveDoubleword",ATy(qTy,qTy),
15061                      Var("v41",PTy(F4,PTy(F4,F4)))),qVar"state")),
15062               (Call("LoadExclusiveHalf",CTy"Load",Var("v42",PTy(F4,F4))),
15063                Apply
15064                  (Call
15065                     ("dfn'LoadExclusiveHalf",ATy(qTy,qTy),
15066                      Var("v42",PTy(F4,F4))),qVar"state")),
15067               (Call
15068                  ("LoadHalf",CTy"Load",
15069                   Var("v43",
15070                       PTy(bTy,
15071                           PTy(bTy,
15072                               PTy(bTy,
15073                                   PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))))),
15074                Apply
15075                  (Call
15076                     ("dfn'LoadHalf",ATy(qTy,qTy),
15077                      Var("v43",
15078                          PTy(bTy,
15079                              PTy(bTy,
15080                                  PTy(bTy,
15081                                      PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))))),
15082                   qVar"state")),
15083               (Call
15084                  ("LoadHalfLiteral",CTy"Load",
15085                   Var("v44",PTy(bTy,PTy(bTy,PTy(F4,F32))))),
15086                Apply
15087                  (Call
15088                     ("dfn'LoadHalfLiteral",ATy(qTy,qTy),
15089                      Var("v44",PTy(bTy,PTy(bTy,PTy(F4,F32))))),
15090                   qVar"state")),
15091               (Call
15092                  ("LoadHalfUnprivileged",CTy"Load",
15093                   Var("v45",
15094                       PTy(bTy,
15095                           PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2"))))))),
15096                Apply
15097                  (Call
15098                     ("dfn'LoadHalfUnprivileged",ATy(qTy,qTy),
15099                      Var("v45",
15100                          PTy(bTy,
15101                              PTy(bTy,
15102                                  PTy(bTy,PTy(F4,PTy(F4,CTy"offset2"))))))),
15103                   qVar"state")),
15104               (Call
15105                  ("LoadLiteral",CTy"Load",Var("v46",PTy(bTy,PTy(F4,F32)))),
15106                Apply
15107                  (Call
15108                     ("dfn'LoadLiteral",ATy(qTy,qTy),
15109                      Var("v46",PTy(bTy,PTy(F4,F32)))),qVar"state")),
15110               (Call
15111                  ("LoadMultiple",CTy"Load",
15112                   Var("v47",PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,F16)))))),
15113                Apply
15114                  (Call
15115                     ("dfn'LoadMultiple",ATy(qTy,qTy),
15116                      Var("v47",PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,F16)))))),
15117                   qVar"state")),
15118               (Call
15119                  ("LoadMultipleExceptionReturn",CTy"Load",
15120                   Var("v48",PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,FTy 15)))))),
15121                Apply
15122                  (Call
15123                     ("dfn'LoadMultipleExceptionReturn",ATy(qTy,qTy),
15124                      Var("v48",PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,FTy 15)))))),
15125                   qVar"state")),
15126               (Call
15127                  ("LoadMultipleUserRegisters",CTy"Load",
15128                   Var("v49",PTy(bTy,PTy(bTy,PTy(F4,FTy 15))))),
15129                Apply
15130                  (Call
15131                     ("dfn'LoadMultipleUserRegisters",ATy(qTy,qTy),
15132                      Var("v49",PTy(bTy,PTy(bTy,PTy(F4,FTy 15))))),
15133                   qVar"state")),
15134               (Call
15135                  ("LoadSignedByteUnprivileged",CTy"Load",
15136                   Var("v50",
15137                       PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2")))))),
15138                Apply
15139                  (Call
15140                     ("dfn'LoadSignedByteUnprivileged",ATy(qTy,qTy),
15141                      Var("v50",
15142                          PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2")))))),
15143                   qVar"state")),
15144               (Call
15145                  ("LoadUnprivileged",CTy"Load",
15146                   Var("v51",
15147                       PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))),
15148                Apply
15149                  (Call
15150                     ("dfn'LoadUnprivileged",ATy(qTy,qTy),
15151                      Var("v51",
15152                          PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))),
15153                   qVar"state")),
15154               (Call
15155                  ("LoadWord",CTy"Load",
15156                   Var("v52",
15157                       PTy(bTy,
15158                           PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))),
15159                Apply
15160                  (Call
15161                     ("dfn'LoadWord",ATy(qTy,qTy),
15162                      Var("v52",
15163                          PTy(bTy,
15164                              PTy(bTy,
15165                                  PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))),
15166                   qVar"state"))])),
15167          (Call("Media",CTy"instruction",Var("v53",CTy"Media")),
15168           CS(Var("v53",CTy"Media"),
15169              [(Call
15170                  ("BitFieldClearOrInsert",CTy"Media",
15171                   Var("v54",PTy(F4,PTy(F4,PTy(nTy,nTy))))),
15172                Apply
15173                  (Call
15174                     ("dfn'BitFieldClearOrInsert",ATy(qTy,qTy),
15175                      Var("v54",PTy(F4,PTy(F4,PTy(nTy,nTy))))),qVar"state")),
15176               (Call
15177                  ("BitFieldExtract",CTy"Media",
15178                   Var("v55",PTy(bTy,PTy(F4,PTy(F4,PTy(nTy,nTy)))))),
15179                Apply
15180                  (Call
15181                     ("dfn'BitFieldExtract",ATy(qTy,qTy),
15182                      Var("v55",PTy(bTy,PTy(F4,PTy(F4,PTy(nTy,nTy)))))),
15183                   qVar"state")),
15184               (Call("ByteReverse",CTy"Media",Var("v56",PTy(F4,F4))),
15185                Apply
15186                  (Call
15187                     ("dfn'ByteReverse",ATy(qTy,qTy),Var("v56",PTy(F4,F4))),
15188                   qVar"state")),
15189               (Call
15190                  ("ByteReversePackedHalfword",CTy"Media",
15191                   Var("v57",PTy(F4,F4))),
15192                Apply
15193                  (Call
15194                     ("dfn'ByteReversePackedHalfword",ATy(qTy,qTy),
15195                      Var("v57",PTy(F4,F4))),qVar"state")),
15196               (Call
15197                  ("ByteReverseSignedHalfword",CTy"Media",
15198                   Var("v58",PTy(F4,F4))),
15199                Apply
15200                  (Call
15201                     ("dfn'ByteReverseSignedHalfword",ATy(qTy,qTy),
15202                      Var("v58",PTy(F4,F4))),qVar"state")),
15203               (Call
15204                  ("ExtendByte",CTy"Media",
15205                   Var("v59",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy)))))),
15206                Apply
15207                  (Call
15208                     ("dfn'ExtendByte",ATy(qTy,qTy),
15209                      Var("v59",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy)))))),
15210                   qVar"state")),
15211               (Call
15212                  ("ExtendByte16",CTy"Media",
15213                   Var("v60",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy)))))),
15214                Apply
15215                  (Call
15216                     ("dfn'ExtendByte16",ATy(qTy,qTy),
15217                      Var("v60",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy)))))),
15218                   qVar"state")),
15219               (Call
15220                  ("ExtendHalfword",CTy"Media",
15221                   Var("v61",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy)))))),
15222                Apply
15223                  (Call
15224                     ("dfn'ExtendHalfword",ATy(qTy,qTy),
15225                      Var("v61",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,nTy)))))),
15226                   qVar"state")),
15227               (Call
15228                  ("PackHalfword",CTy"Media",
15229                   Var("v62",
15230                       PTy(CTy"SRType",
15231                           PTy(nTy,PTy(bTy,PTy(F4,PTy(F4,F4))))))),
15232                Apply
15233                  (Call
15234                     ("dfn'PackHalfword",ATy(qTy,qTy),
15235                      Var("v62",
15236                          PTy(CTy"SRType",
15237                              PTy(nTy,PTy(bTy,PTy(F4,PTy(F4,F4))))))),
15238                   qVar"state")),
15239               (Call("ReverseBits",CTy"Media",Var("v63",PTy(F4,F4))),
15240                Apply
15241                  (Call
15242                     ("dfn'ReverseBits",ATy(qTy,qTy),Var("v63",PTy(F4,F4))),
15243                   qVar"state")),
15244               (Call
15245                  ("Saturate",CTy"Media",
15246                   Var("v64",
15247                       PTy(CTy"SRType",
15248                           PTy(nTy,PTy(nTy,PTy(bTy,PTy(F4,F4))))))),
15249                Apply
15250                  (Call
15251                     ("dfn'Saturate",ATy(qTy,qTy),
15252                      Var("v64",
15253                          PTy(CTy"SRType",
15254                              PTy(nTy,PTy(nTy,PTy(bTy,PTy(F4,F4))))))),
15255                   qVar"state")),
15256               (Call
15257                  ("Saturate16",CTy"Media",
15258                   Var("v65",PTy(nTy,PTy(bTy,PTy(F4,F4))))),
15259                Apply
15260                  (Call
15261                     ("dfn'Saturate16",ATy(qTy,qTy),
15262                      Var("v65",PTy(nTy,PTy(bTy,PTy(F4,F4))))),qVar"state")),
15263               (Call
15264                  ("SaturatingAddSubtract",CTy"Media",
15265                   Var("v66",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
15266                Apply
15267                  (Call
15268                     ("dfn'SaturatingAddSubtract",ATy(qTy,qTy),
15269                      Var("v66",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
15270                   qVar"state")),
15271               (Call
15272                  ("SelectBytes",CTy"Media",Var("v67",PTy(F4,PTy(F4,F4)))),
15273                Apply
15274                  (Call
15275                     ("dfn'SelectBytes",ATy(qTy,qTy),
15276                      Var("v67",PTy(F4,PTy(F4,F4)))),qVar"state"))])),
15277          (Call("Multiply",CTy"instruction",Var("v68",CTy"Multiply")),
15278           CS(Var("v68",CTy"Multiply"),
15279              [(Call
15280                  ("Multiply32",CTy"Multiply",
15281                   Var("v69",PTy(bTy,PTy(F4,PTy(F4,F4))))),
15282                Apply
15283                  (Call
15284                     ("dfn'Multiply32",ATy(qTy,qTy),
15285                      Var("v69",PTy(bTy,PTy(F4,PTy(F4,F4))))),qVar"state")),
15286               (Call
15287                  ("MultiplyAccumulate",CTy"Multiply",
15288                   Var("v70",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))),
15289                Apply
15290                  (Call
15291                     ("dfn'MultiplyAccumulate",ATy(qTy,qTy),
15292                      Var("v70",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))),
15293                   qVar"state")),
15294               (Call
15295                  ("MultiplyAccumulateAccumulate",CTy"Multiply",
15296                   Var("v71",PTy(F4,PTy(F4,PTy(F4,F4))))),
15297                Apply
15298                  (Call
15299                     ("dfn'MultiplyAccumulateAccumulate",ATy(qTy,qTy),
15300                      Var("v71",PTy(F4,PTy(F4,PTy(F4,F4))))),qVar"state")),
15301               (Call
15302                  ("MultiplyLong",CTy"Multiply",
15303                   Var("v72",
15304                       PTy(bTy,
15305                           PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))))),
15306                Apply
15307                  (Call
15308                     ("dfn'MultiplyLong",ATy(qTy,qTy),
15309                      Var("v72",
15310                          PTy(bTy,
15311                              PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))))),
15312                   qVar"state")),
15313               (Call
15314                  ("MultiplySubtract",CTy"Multiply",
15315                   Var("v73",PTy(F4,PTy(F4,PTy(F4,F4))))),
15316                Apply
15317                  (Call
15318                     ("dfn'MultiplySubtract",ATy(qTy,qTy),
15319                      Var("v73",PTy(F4,PTy(F4,PTy(F4,F4))))),qVar"state")),
15320               (Call
15321                  ("Signed16Multiply32Accumulate",CTy"Multiply",
15322                   Var("v74",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))),
15323                Apply
15324                  (Call
15325                     ("dfn'Signed16Multiply32Accumulate",ATy(qTy,qTy),
15326                      Var("v74",
15327                          PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))),
15328                   qVar"state")),
15329               (Call
15330                  ("Signed16Multiply32Result",CTy"Multiply",
15331                   Var("v75",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,F4)))))),
15332                Apply
15333                  (Call
15334                     ("dfn'Signed16Multiply32Result",ATy(qTy,qTy),
15335                      Var("v75",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,F4)))))),
15336                   qVar"state")),
15337               (Call
15338                  ("Signed16Multiply64Accumulate",CTy"Multiply",
15339                   Var("v76",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))),
15340                Apply
15341                  (Call
15342                     ("dfn'Signed16Multiply64Accumulate",ATy(qTy,qTy),
15343                      Var("v76",
15344                          PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))),
15345                   qVar"state")),
15346               (Call
15347                  ("Signed16x32Multiply32Accumulate",CTy"Multiply",
15348                   Var("v77",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))),
15349                Apply
15350                  (Call
15351                     ("dfn'Signed16x32Multiply32Accumulate",ATy(qTy,qTy),
15352                      Var("v77",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))),
15353                   qVar"state")),
15354               (Call
15355                  ("Signed16x32Multiply32Result",CTy"Multiply",
15356                   Var("v78",PTy(bTy,PTy(F4,PTy(F4,F4))))),
15357                Apply
15358                  (Call
15359                     ("dfn'Signed16x32Multiply32Result",ATy(qTy,qTy),
15360                      Var("v78",PTy(bTy,PTy(F4,PTy(F4,F4))))),qVar"state")),
15361               (Call
15362                  ("SignedMostSignificantMultiply",CTy"Multiply",
15363                   Var("v79",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))),
15364                Apply
15365                  (Call
15366                     ("dfn'SignedMostSignificantMultiply",ATy(qTy,qTy),
15367                      Var("v79",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))),
15368                   qVar"state")),
15369               (Call
15370                  ("SignedMostSignificantMultiplySubtract",CTy"Multiply",
15371                   Var("v80",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))),
15372                Apply
15373                  (Call
15374                     ("dfn'SignedMostSignificantMultiplySubtract",
15375                      ATy(qTy,qTy),
15376                      Var("v80",PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4)))))),
15377                   qVar"state")),
15378               (Call
15379                  ("SignedMultiplyDual",CTy"Multiply",
15380                   Var("v81",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))),
15381                Apply
15382                  (Call
15383                     ("dfn'SignedMultiplyDual",ATy(qTy,qTy),
15384                      Var("v81",
15385                          PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))),
15386                   qVar"state")),
15387               (Call
15388                  ("SignedMultiplyLongDual",CTy"Multiply",
15389                   Var("v82",PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))),
15390                Apply
15391                  (Call
15392                     ("dfn'SignedMultiplyLongDual",ATy(qTy,qTy),
15393                      Var("v82",
15394                          PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,PTy(F4,F4))))))),
15395                   qVar"state"))])),
15396          (Call("SIMD",CTy"instruction",Var("v83",CTy"SIMD")),
15397           CS(Var("v83",CTy"SIMD"),
15398              [(Call
15399                  ("SignedAddSub16",CTy"SIMD",
15400                   Var("v84",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
15401                Apply
15402                  (Call
15403                     ("dfn'SignedAddSub16",ATy(qTy,qTy),
15404                      Var("v84",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
15405                   qVar"state")),
15406               (Call
15407                  ("SignedAddSub8",CTy"SIMD",
15408                   Var("v85",PTy(bTy,PTy(F4,PTy(F4,F4))))),
15409                Apply
15410                  (Call
15411                     ("dfn'SignedAddSub8",ATy(qTy,qTy),
15412                      Var("v85",PTy(bTy,PTy(F4,PTy(F4,F4))))),qVar"state")),
15413               (Call
15414                  ("SignedHalvingAddSub16",CTy"SIMD",
15415                   Var("v86",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
15416                Apply
15417                  (Call
15418                     ("dfn'SignedHalvingAddSub16",ATy(qTy,qTy),
15419                      Var("v86",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
15420                   qVar"state")),
15421               (Call
15422                  ("SignedHalvingAddSub8",CTy"SIMD",
15423                   Var("v87",PTy(bTy,PTy(F4,PTy(F4,F4))))),
15424                Apply
15425                  (Call
15426                     ("dfn'SignedHalvingAddSub8",ATy(qTy,qTy),
15427                      Var("v87",PTy(bTy,PTy(F4,PTy(F4,F4))))),qVar"state")),
15428               (Call
15429                  ("SignedSaturatingAddSub16",CTy"SIMD",
15430                   Var("v88",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
15431                Apply
15432                  (Call
15433                     ("dfn'SignedSaturatingAddSub16",ATy(qTy,qTy),
15434                      Var("v88",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
15435                   qVar"state")),
15436               (Call
15437                  ("SignedSaturatingAddSub8",CTy"SIMD",
15438                   Var("v89",PTy(bTy,PTy(F4,PTy(F4,F4))))),
15439                Apply
15440                  (Call
15441                     ("dfn'SignedSaturatingAddSub8",ATy(qTy,qTy),
15442                      Var("v89",PTy(bTy,PTy(F4,PTy(F4,F4))))),qVar"state")),
15443               (Call
15444                  ("UnsignedAddSub16",CTy"SIMD",
15445                   Var("v90",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
15446                Apply
15447                  (Call
15448                     ("dfn'UnsignedAddSub16",ATy(qTy,qTy),
15449                      Var("v90",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
15450                   qVar"state")),
15451               (Call
15452                  ("UnsignedAddSub8",CTy"SIMD",
15453                   Var("v91",PTy(bTy,PTy(F4,PTy(F4,F4))))),
15454                Apply
15455                  (Call
15456                     ("dfn'UnsignedAddSub8",ATy(qTy,qTy),
15457                      Var("v91",PTy(bTy,PTy(F4,PTy(F4,F4))))),qVar"state")),
15458               (Call
15459                  ("UnsignedHalvingAddSub16",CTy"SIMD",
15460                   Var("v92",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
15461                Apply
15462                  (Call
15463                     ("dfn'UnsignedHalvingAddSub16",ATy(qTy,qTy),
15464                      Var("v92",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
15465                   qVar"state")),
15466               (Call
15467                  ("UnsignedHalvingAddSub8",CTy"SIMD",
15468                   Var("v93",PTy(bTy,PTy(F4,PTy(F4,F4))))),
15469                Apply
15470                  (Call
15471                     ("dfn'UnsignedHalvingAddSub8",ATy(qTy,qTy),
15472                      Var("v93",PTy(bTy,PTy(F4,PTy(F4,F4))))),qVar"state")),
15473               (Call
15474                  ("UnsignedSaturatingAddSub16",CTy"SIMD",
15475                   Var("v94",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
15476                Apply
15477                  (Call
15478                     ("dfn'UnsignedSaturatingAddSub16",ATy(qTy,qTy),
15479                      Var("v94",PTy(FTy 2,PTy(F4,PTy(F4,F4))))),
15480                   qVar"state")),
15481               (Call
15482                  ("UnsignedSaturatingAddSub8",CTy"SIMD",
15483                   Var("v95",PTy(bTy,PTy(F4,PTy(F4,F4))))),
15484                Apply
15485                  (Call
15486                     ("dfn'UnsignedSaturatingAddSub8",ATy(qTy,qTy),
15487                      Var("v95",PTy(bTy,PTy(F4,PTy(F4,F4))))),qVar"state")),
15488               (Call
15489                  ("UnsignedSumAbsoluteDifferences",CTy"SIMD",
15490                   Var("v96",PTy(F4,PTy(F4,PTy(F4,F4))))),
15491                Apply
15492                  (Call
15493                     ("dfn'UnsignedSumAbsoluteDifferences",ATy(qTy,qTy),
15494                      Var("v96",PTy(F4,PTy(F4,PTy(F4,F4))))),qVar"state"))])),
15495          (Call("Store",CTy"instruction",Var("v97",CTy"Store")),
15496           CS(Var("v97",CTy"Store"),
15497              [(Call
15498                  ("StoreByte",CTy"Store",
15499                   Var("v98",
15500                       PTy(bTy,
15501                           PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))),
15502                Apply
15503                  (Call
15504                     ("dfn'StoreByte",ATy(qTy,qTy),
15505                      Var("v98",
15506                          PTy(bTy,
15507                              PTy(bTy,
15508                                  PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))),
15509                   qVar"state")),
15510               (Call
15511                  ("StoreByteUnprivileged",CTy"Store",
15512                   Var("v99",
15513                       PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))),
15514                Apply
15515                  (Call
15516                     ("dfn'StoreByteUnprivileged",ATy(qTy,qTy),
15517                      Var("v99",
15518                          PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))),
15519                   qVar"state")),
15520               (Call
15521                  ("StoreDual",CTy"Store",
15522                   Var("v100",
15523                       PTy(bTy,
15524                           PTy(bTy,
15525                               PTy(bTy,
15526                                   PTy(F4,PTy(F4,PTy(F4,CTy"offset2")))))))),
15527                Apply
15528                  (Call
15529                     ("dfn'StoreDual",ATy(qTy,qTy),
15530                      Var("v100",
15531                          PTy(bTy,
15532                              PTy(bTy,
15533                                  PTy(bTy,
15534                                      PTy(F4,PTy(F4,PTy(F4,CTy"offset2")))))))),
15535                   qVar"state")),
15536               (Call
15537                  ("StoreExclusive",CTy"Store",
15538                   Var("v101",PTy(F4,PTy(F4,PTy(F4,F32))))),
15539                Apply
15540                  (Call
15541                     ("dfn'StoreExclusive",ATy(qTy,qTy),
15542                      Var("v101",PTy(F4,PTy(F4,PTy(F4,F32))))),qVar"state")),
15543               (Call
15544                  ("StoreExclusiveByte",CTy"Store",
15545                   Var("v102",PTy(F4,PTy(F4,F4)))),
15546                Apply
15547                  (Call
15548                     ("dfn'StoreExclusiveByte",ATy(qTy,qTy),
15549                      Var("v102",PTy(F4,PTy(F4,F4)))),qVar"state")),
15550               (Call
15551                  ("StoreExclusiveDoubleword",CTy"Store",
15552                   Var("v103",PTy(F4,PTy(F4,PTy(F4,F4))))),
15553                Apply
15554                  (Call
15555                     ("dfn'StoreExclusiveDoubleword",ATy(qTy,qTy),
15556                      Var("v103",PTy(F4,PTy(F4,PTy(F4,F4))))),qVar"state")),
15557               (Call
15558                  ("StoreExclusiveHalf",CTy"Store",
15559                   Var("v104",PTy(F4,PTy(F4,F4)))),
15560                Apply
15561                  (Call
15562                     ("dfn'StoreExclusiveHalf",ATy(qTy,qTy),
15563                      Var("v104",PTy(F4,PTy(F4,F4)))),qVar"state")),
15564               (Call
15565                  ("StoreHalf",CTy"Store",
15566                   Var("v105",
15567                       PTy(bTy,
15568                           PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))),
15569                Apply
15570                  (Call
15571                     ("dfn'StoreHalf",ATy(qTy,qTy),
15572                      Var("v105",
15573                          PTy(bTy,
15574                              PTy(bTy,
15575                                  PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))),
15576                   qVar"state")),
15577               (Call
15578                  ("StoreHalfUnprivileged",CTy"Store",
15579                   Var("v106",
15580                       PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2")))))),
15581                Apply
15582                  (Call
15583                     ("dfn'StoreHalfUnprivileged",ATy(qTy,qTy),
15584                      Var("v106",
15585                          PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset2")))))),
15586                   qVar"state")),
15587               (Call
15588                  ("StoreMultiple",CTy"Store",
15589                   Var("v107",PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,F16)))))),
15590                Apply
15591                  (Call
15592                     ("dfn'StoreMultiple",ATy(qTy,qTy),
15593                      Var("v107",PTy(bTy,PTy(bTy,PTy(bTy,PTy(F4,F16)))))),
15594                   qVar"state")),
15595               (Call
15596                  ("StoreMultipleUserRegisters",CTy"Store",
15597                   Var("v108",PTy(bTy,PTy(bTy,PTy(F4,F16))))),
15598                Apply
15599                  (Call
15600                     ("dfn'StoreMultipleUserRegisters",ATy(qTy,qTy),
15601                      Var("v108",PTy(bTy,PTy(bTy,PTy(F4,F16))))),
15602                   qVar"state")),
15603               (Call
15604                  ("StoreUnprivileged",CTy"Store",
15605                   Var("v109",
15606                       PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))),
15607                Apply
15608                  (Call
15609                     ("dfn'StoreUnprivileged",ATy(qTy,qTy),
15610                      Var("v109",
15611                          PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1")))))),
15612                   qVar"state")),
15613               (Call
15614                  ("StoreWord",CTy"Store",
15615                   Var("v110",
15616                       PTy(bTy,
15617                           PTy(bTy,PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))),
15618                Apply
15619                  (Call
15620                     ("dfn'StoreWord",ATy(qTy,qTy),
15621                      Var("v110",
15622                          PTy(bTy,
15623                              PTy(bTy,
15624                                  PTy(bTy,PTy(F4,PTy(F4,CTy"offset1"))))))),
15625                   qVar"state"))])),
15626          (Call("System",CTy"instruction",Var("v111",CTy"System")),
15627           CS(Var("v111",CTy"System"),
15628              [(Const("ExceptionReturn",CTy"System"),
15629                Apply
15630                  (Const("dfn'ExceptionReturn",ATy(qTy,qTy)),qVar"state")),
15631               (Call
15632                  ("ChangeProcessorState",CTy"System",
15633                   Var("v112",
15634                       PTy(bTy,
15635                           PTy(bTy,PTy(bTy,PTy(bTy,PTy(bTy,OTy(FTy 5)))))))),
15636                Apply
15637                  (Call
15638                     ("dfn'ChangeProcessorState",ATy(qTy,qTy),
15639                      Var("v112",
15640                          PTy(bTy,
15641                              PTy(bTy,
15642                                  PTy(bTy,PTy(bTy,PTy(bTy,OTy(FTy 5)))))))),
15643                   qVar"state")),
15644               (Call("EnterxLeavex",CTy"System",bVar"v113"),
15645                Apply
15646                  (Call("dfn'EnterxLeavex",ATy(qTy,qTy),bVar"v113"),
15647                   qVar"state")),
15648               (Call("HypervisorCall",CTy"System",Var("v114",F16)),
15649                Apply
15650                  (Call("dfn'HypervisorCall",ATy(qTy,qTy),Var("v114",F16)),
15651                   qVar"state")),
15652               (Call
15653                  ("MoveToBankedOrSpecialRegister",CTy"System",
15654                   Var("v115",PTy(bTy,PTy(FTy 5,F4)))),
15655                Apply
15656                  (Call
15657                     ("dfn'MoveToBankedOrSpecialRegister",ATy(qTy,qTy),
15658                      Var("v115",PTy(bTy,PTy(FTy 5,F4)))),qVar"state")),
15659               (Call
15660                  ("MoveToRegisterFromBankedOrSpecial",CTy"System",
15661                   Var("v116",PTy(bTy,PTy(FTy 5,F4)))),
15662                Apply
15663                  (Call
15664                     ("dfn'MoveToRegisterFromBankedOrSpecial",
15665                      ATy(qTy,qTy),Var("v116",PTy(bTy,PTy(FTy 5,F4)))),
15666                   qVar"state")),
15667               (Call
15668                  ("MoveToRegisterFromSpecial",CTy"System",
15669                   Var("v117",PTy(bTy,F4))),
15670                Apply
15671                  (Call
15672                     ("dfn'MoveToRegisterFromSpecial",ATy(qTy,qTy),
15673                      Var("v117",PTy(bTy,F4))),qVar"state")),
15674               (Call
15675                  ("MoveToSpecialFromImmediate",CTy"System",
15676                   Var("v118",PTy(bTy,PTy(F32,F4)))),
15677                Apply
15678                  (Call
15679                     ("dfn'MoveToSpecialFromImmediate",ATy(qTy,qTy),
15680                      Var("v118",PTy(bTy,PTy(F32,F4)))),qVar"state")),
15681               (Call
15682                  ("MoveToSpecialFromRegister",CTy"System",
15683                   Var("v119",PTy(bTy,PTy(F4,F4)))),
15684                Apply
15685                  (Call
15686                     ("dfn'MoveToSpecialFromRegister",ATy(qTy,qTy),
15687                      Var("v119",PTy(bTy,PTy(F4,F4)))),qVar"state")),
15688               (Call
15689                  ("ReturnFromException",CTy"System",
15690                   Var("v120",PTy(bTy,PTy(bTy,PTy(bTy,F4))))),
15691                Apply
15692                  (Call
15693                     ("dfn'ReturnFromException",ATy(qTy,qTy),
15694                      Var("v120",PTy(bTy,PTy(bTy,PTy(bTy,F4))))),
15695                   qVar"state")),
15696               (Call("SecureMonitorCall",CTy"System",Var("v121",F4)),
15697                Apply
15698                  (Call
15699                     ("dfn'SecureMonitorCall",ATy(qTy,qTy),Var("v121",F4)),
15700                   qVar"state")),
15701               (Call("Setend",CTy"System",bVar"v122"),
15702                Apply
15703                  (Call("dfn'Setend",ATy(qTy,qTy),bVar"v122"),qVar"state")),
15704               (Call
15705                  ("StoreReturnState",CTy"System",
15706                   Var("v123",PTy(bTy,PTy(bTy,PTy(bTy,FTy 5))))),
15707                Apply
15708                  (Call
15709                     ("dfn'StoreReturnState",ATy(qTy,qTy),
15710                      Var("v123",PTy(bTy,PTy(bTy,PTy(bTy,FTy 5))))),
15711                   qVar"state")),
15712               (Call("SupervisorCall",CTy"System",Var("v124",F32)),
15713                Apply
15714                  (Call("dfn'SupervisorCall",ATy(qTy,qTy),Var("v124",F32)),
15715                   qVar"state"))])),
15716          (Call("VFP",CTy"instruction",Var("v125",CTy"VFP")),
15717           CS(Var("v125",CTy"VFP"),
15718              [(Call
15719                  ("vabs",CTy"VFP",Var("v126",PTy(bTy,PTy(FTy 5,FTy 5)))),
15720                Apply
15721                  (Call
15722                     ("dfn'vabs",ATy(qTy,qTy),
15723                      Var("v126",PTy(bTy,PTy(FTy 5,FTy 5)))),qVar"state")),
15724               (Call
15725                  ("vadd",CTy"VFP",
15726                   Var("v127",PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))),
15727                Apply
15728                  (Call
15729                     ("dfn'vadd",ATy(qTy,qTy),
15730                      Var("v127",PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))),
15731                   qVar"state")),
15732               (Call
15733                  ("vcmp",CTy"VFP",
15734                   Var("v128",PTy(bTy,PTy(FTy 5,OTy(FTy 5))))),
15735                Apply
15736                  (Call
15737                     ("dfn'vcmp",ATy(qTy,qTy),
15738                      Var("v128",PTy(bTy,PTy(FTy 5,OTy(FTy 5))))),
15739                   qVar"state")),
15740               (Call
15741                  ("vcvt_float",CTy"VFP",
15742                   Var("v129",PTy(bTy,PTy(FTy 5,FTy 5)))),
15743                Apply
15744                  (Call
15745                     ("dfn'vcvt_float",ATy(qTy,qTy),
15746                      Var("v129",PTy(bTy,PTy(FTy 5,FTy 5)))),qVar"state")),
15747               (Call
15748                  ("vcvt_from_integer",CTy"VFP",
15749                   Var("v130",PTy(bTy,PTy(bTy,PTy(FTy 5,FTy 5))))),
15750                Apply
15751                  (Call
15752                     ("dfn'vcvt_from_integer",ATy(qTy,qTy),
15753                      Var("v130",PTy(bTy,PTy(bTy,PTy(FTy 5,FTy 5))))),
15754                   qVar"state")),
15755               (Call
15756                  ("vcvt_to_integer",CTy"VFP",
15757                   Var("v131",PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,FTy 5)))))),
15758                Apply
15759                  (Call
15760                     ("dfn'vcvt_to_integer",ATy(qTy,qTy),
15761                      Var("v131",
15762                          PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,FTy 5)))))),
15763                   qVar"state")),
15764               (Call
15765                  ("vdiv",CTy"VFP",
15766                   Var("v132",PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))),
15767                Apply
15768                  (Call
15769                     ("dfn'vdiv",ATy(qTy,qTy),
15770                      Var("v132",PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))),
15771                   qVar"state")),
15772               (Call
15773                  ("vfma_vfms",CTy"VFP",
15774                   Var("v133",
15775                       PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
15776                Apply
15777                  (Call
15778                     ("dfn'vfma_vfms",ATy(qTy,qTy),
15779                      Var("v133",
15780                          PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
15781                   qVar"state")),
15782               (Call
15783                  ("vfnma_vfnms",CTy"VFP",
15784                   Var("v134",
15785                       PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
15786                Apply
15787                  (Call
15788                     ("dfn'vfnma_vfnms",ATy(qTy,qTy),
15789                      Var("v134",
15790                          PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
15791                   qVar"state")),
15792               (Call
15793                  ("vldm",CTy"VFP",
15794                   Var("v135",
15795                       PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F8))))))),
15796                Apply
15797                  (Call
15798                     ("dfn'vldm",ATy(qTy,qTy),
15799                      Var("v135",
15800                          PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F8))))))),
15801                   qVar"state")),
15802               (Call
15803                  ("vldr",CTy"VFP",
15804                   Var("v136",PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F32)))))),
15805                Apply
15806                  (Call
15807                     ("dfn'vldr",ATy(qTy,qTy),
15808                      Var("v136",PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F32)))))),
15809                   qVar"state")),
15810               (Call
15811                  ("vmla_vmls",CTy"VFP",
15812                   Var("v137",
15813                       PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
15814                Apply
15815                  (Call
15816                     ("dfn'vmla_vmls",ATy(qTy,qTy),
15817                      Var("v137",
15818                          PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
15819                   qVar"state")),
15820               (Call
15821                  ("vmov",CTy"VFP",Var("v138",PTy(bTy,PTy(FTy 5,FTy 5)))),
15822                Apply
15823                  (Call
15824                     ("dfn'vmov",ATy(qTy,qTy),
15825                      Var("v138",PTy(bTy,PTy(FTy 5,FTy 5)))),qVar"state")),
15826               (Call
15827                  ("vmov_double",CTy"VFP",
15828                   Var("v139",PTy(bTy,PTy(F4,PTy(F4,FTy 5))))),
15829                Apply
15830                  (Call
15831                     ("dfn'vmov_double",ATy(qTy,qTy),
15832                      Var("v139",PTy(bTy,PTy(F4,PTy(F4,FTy 5))))),
15833                   qVar"state")),
15834               (Call
15835                  ("vmov_imm",CTy"VFP",Var("v140",PTy(bTy,PTy(FTy 5,F64)))),
15836                Apply
15837                  (Call
15838                     ("dfn'vmov_imm",ATy(qTy,qTy),
15839                      Var("v140",PTy(bTy,PTy(FTy 5,F64)))),qVar"state")),
15840               (Call
15841                  ("vmov_single",CTy"VFP",
15842                   Var("v141",PTy(bTy,PTy(F4,FTy 5)))),
15843                Apply
15844                  (Call
15845                     ("dfn'vmov_single",ATy(qTy,qTy),
15846                      Var("v141",PTy(bTy,PTy(F4,FTy 5)))),qVar"state")),
15847               (Call
15848                  ("vmov_two_singles",CTy"VFP",
15849                   Var("v142",PTy(bTy,PTy(F4,PTy(F4,FTy 5))))),
15850                Apply
15851                  (Call
15852                     ("dfn'vmov_two_singles",ATy(qTy,qTy),
15853                      Var("v142",PTy(bTy,PTy(F4,PTy(F4,FTy 5))))),
15854                   qVar"state")),
15855               (Call("vmrs",CTy"VFP",Var("v143",F4)),
15856                Apply
15857                  (Call("dfn'vmrs",ATy(qTy,qTy),Var("v143",F4)),
15858                   qVar"state")),
15859               (Call("vmsr",CTy"VFP",Var("v144",F4)),
15860                Apply
15861                  (Call("dfn'vmsr",ATy(qTy,qTy),Var("v144",F4)),
15862                   qVar"state")),
15863               (Call
15864                  ("vmul",CTy"VFP",
15865                   Var("v145",PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))),
15866                Apply
15867                  (Call
15868                     ("dfn'vmul",ATy(qTy,qTy),
15869                      Var("v145",PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))),
15870                   qVar"state")),
15871               (Call
15872                  ("vneg",CTy"VFP",Var("v146",PTy(bTy,PTy(FTy 5,FTy 5)))),
15873                Apply
15874                  (Call
15875                     ("dfn'vneg",ATy(qTy,qTy),
15876                      Var("v146",PTy(bTy,PTy(FTy 5,FTy 5)))),qVar"state")),
15877               (Call
15878                  ("vneg_mul",CTy"VFP",
15879                   Var("v147",
15880                       PTy(bTy,
15881                           PTy(CTy"VFPNegMul",PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
15882                Apply
15883                  (Call
15884                     ("dfn'vneg_mul",ATy(qTy,qTy),
15885                      Var("v147",
15886                          PTy(bTy,
15887                              PTy(CTy"VFPNegMul",
15888                                  PTy(FTy 5,PTy(FTy 5,FTy 5)))))),
15889                   qVar"state")),
15890               (Call
15891                  ("vsqrt",CTy"VFP",Var("v148",PTy(bTy,PTy(FTy 5,FTy 5)))),
15892                Apply
15893                  (Call
15894                     ("dfn'vsqrt",ATy(qTy,qTy),
15895                      Var("v148",PTy(bTy,PTy(FTy 5,FTy 5)))),qVar"state")),
15896               (Call
15897                  ("vstm",CTy"VFP",
15898                   Var("v149",
15899                       PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F8))))))),
15900                Apply
15901                  (Call
15902                     ("dfn'vstm",ATy(qTy,qTy),
15903                      Var("v149",
15904                          PTy(bTy,PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F8))))))),
15905                   qVar"state")),
15906               (Call
15907                  ("vstr",CTy"VFP",
15908                   Var("v150",PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F32)))))),
15909                Apply
15910                  (Call
15911                     ("dfn'vstr",ATy(qTy,qTy),
15912                      Var("v150",PTy(bTy,PTy(bTy,PTy(FTy 5,PTy(F4,F32)))))),
15913                   qVar"state")),
15914               (Call
15915                  ("vsub",CTy"VFP",
15916                   Var("v151",PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))),
15917                Apply
15918                  (Call
15919                     ("dfn'vsub",ATy(qTy,qTy),
15920                      Var("v151",PTy(bTy,PTy(FTy 5,PTy(FTy 5,FTy 5))))),
15921                   qVar"state"))]))])))
15922;
15923val Fetch_def = Def
15924  ("Fetch",qVar"state",
15925   Let(Var("v",CTy"InstrSet"),
15926       Apply
15927         (Call("CurrentInstrSet",ATy(qTy,CTy"InstrSet"),LU),qVar"state"),
15928       ITB([(Bop(Or,
15929                 EQ(Var("v",CTy"InstrSet"),
15930                    LC("InstrSet_ARM",CTy"InstrSet")),
15931                 EQ(Dest("Architecture",CTy"Architecture",qVar"state"),
15932                    LC("ARMv4",CTy"Architecture"))),
15933             Let(qVar"s",
15934                 Rupd
15935                   ("Encoding",
15936                    TP[qVar"state",LC("Encoding_ARM",CTy"Encoding")]),
15937                 Let(TP[Var("v",F32),qVar"s"],
15938                     Apply
15939                       (Call
15940                          ("MemA",ATy(qTy,PTy(F32,qTy)),
15941                           TP[Apply
15942                                (Dest("REG",ATy(CTy"RName",F32),qVar"s"),
15943                                 LC("RName_PC",CTy"RName")),LN 4]),qVar"s"),
15944                     TP[Call("ARM",CTy"MachineCode",Var("v",F32)),qVar"s"]))),
15945            (EQ(Var("v",CTy"InstrSet"),
15946                LC("InstrSet_Jazelle",CTy"InstrSet")),
15947             TP[Call("BadCode",CTy"MachineCode",LS"Fetch"),qVar"state"])],
15948           Let(Var("v0",F32),
15949               Apply
15950                 (Dest("REG",ATy(CTy"RName",F32),qVar"state"),
15951                  LC("RName_PC",CTy"RName")),
15952               Let(TP[Var("v1",F16),qVar"s"],
15953                   Apply
15954                     (Call
15955                        ("MemA",ATy(qTy,PTy(F16,qTy)),
15956                         TP[Var("v0",F32),LN 2]),qVar"state"),
15957                   ITE(Bop(And,
15958                           EQ(EX(Var("v1",F16),LN 15,LN 13,FTy 3),LW(7,3)),
15959                           Mop(Not,
15960                               EQ(EX(Var("v1",F16),LN 12,LN 11,FTy 2),
15961                                  LW(0,2)))),
15962                       Let(TP[Var("v2",F16),qVar"s"],
15963                           Apply
15964                             (Call
15965                                ("MemA",ATy(qTy,PTy(F16,qTy)),
15966                                 TP[Bop(Add,Var("v0",F32),LW(2,32)),LN 2]),
15967                              Rupd
15968                                ("Encoding",
15969                                 TP[qVar"s",
15970                                    LC("Encoding_Thumb2",CTy"Encoding")])),
15971                           TP[Call
15972                                ("Thumb2",CTy"MachineCode",
15973                                 TP[Var("v1",F16),Var("v2",F16)]),qVar"s"]),
15974                       Let(qVar"s",
15975                           Rupd
15976                             ("Encoding",
15977                              TP[qVar"s",
15978                                 LC("Encoding_Thumb",CTy"Encoding")]),
15979                           TP[ITE(Bop(Or,
15980                                      EQ(Var("v",CTy"InstrSet"),
15981                                         LC("InstrSet_Thumb",CTy"InstrSet")),
15982                                      Mop(Not,
15983                                          Apply
15984                                            (Call
15985                                               ("HaveThumbEE",
15986                                                ATy(qTy,bTy),LU),qVar"s"))),
15987                                  Call
15988                                    ("Thumb",CTy"MachineCode",
15989                                     Var("v1",F16)),
15990                                  Call
15991                                    ("ThumbEE",CTy"MachineCode",
15992                                     Var("v1",F16))),qVar"s"])))))))
15993;
15994val Do_def = Def
15995  ("Do",TP[Var("cond",F4),bVar"defined"],
15996   Close
15997     (qVar"state",
15998      Let(TP[bVar"v",qVar"s"],
15999          Let(qVar"s",
16000              Rupd("CurrentCondition",TP[qVar"state",Var("cond",F4)]),
16001              TP[Apply(Call("ConditionPassed",ATy(qTy,bTy),LU),qVar"s"),
16002                 qVar"s"]),
16003          TP[Bop(And,bVar"v",bVar"defined"),
16004             Rupd
16005               ("undefined",
16006                TP[qVar"s",Bop(And,bVar"v",Mop(Not,bVar"defined"))])])))
16007;
16008val Skip_def = Def
16009  ("Skip",AVar uTy,
16010   Close
16011     (qVar"state",
16012      ITE(Dest("undefined",bTy,qVar"state"),
16013          Call("Undefined",CTy"instruction",LW(0,32)),
16014          Const("NoOperation",CTy"instruction"))))
16015;
16016val UndefinedARM_def = Def
16017  ("UndefinedARM",Var("cond",F4),
16018   Close
16019     (qVar"state",
16020      Let(TP[bVar"v",qVar"s"],
16021          Let(qVar"s",
16022              Rupd("CurrentCondition",TP[qVar"state",Var("cond",F4)]),
16023              TP[Apply(Call("ConditionPassed",ATy(qTy,bTy),LU),qVar"s"),
16024                 qVar"s"]),
16025          TP[ITE(bVar"v",Call("Undefined",CTy"instruction",LW(0,32)),
16026                 Const("NoOperation",CTy"instruction")),qVar"s"])))
16027;
16028val UndefinedThumb_def = Def
16029  ("UndefinedThumb",AVar uTy,
16030   Close
16031     (qVar"state",
16032      Let(TP[Var("v",F4),qVar"s"],
16033          Apply
16034            (Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),qVar"state"),
16035          Apply
16036            (Call
16037               ("UndefinedARM",ATy(qTy,PTy(CTy"instruction",qTy)),
16038                Var("v",F4)),qVar"s"))))
16039;
16040val DECODE_UNPREDICTABLE_def = Def
16041  ("DECODE_UNPREDICTABLE",TP[Var("mc",CTy"MachineCode"),sVar"s"],
16042   Close
16043     (qVar"state",
16044      Mop(Snd,
16045          Apply
16046            (Call
16047               ("raise'exception",ATy(qTy,PTy(uTy,qTy)),
16048                Call
16049                  ("UNPREDICTABLE",CTy"exception",
16050                   CC[LS"Decode ",
16051                      CS(Var("mc",CTy"MachineCode"),
16052                         [(Call("ARM",CTy"MachineCode",Var("opc",F32)),
16053                           CC[Mop(Cast sTy,Mop(Cast vTy,Var("opc",F32))),
16054                              LS"; ARM; "]),
16055                          (Call("Thumb",CTy"MachineCode",Var("opc",F16)),
16056                           CC[Mop(Cast sTy,Mop(Cast vTy,Var("opc",F16))),
16057                              LS"; Thumb; "]),
16058                          (Call("ThumbEE",CTy"MachineCode",Var("opc",F16)),
16059                           CC[Mop(Cast sTy,Mop(Cast vTy,Var("opc",F16))),
16060                              LS"; ThumbEE; "]),
16061                          (Call
16062                             ("Thumb2",CTy"MachineCode",
16063                              TP[Var("opc1",F16),Var("opc2",F16)]),
16064                           CC[Mop(Cast sTy,Mop(Cast vTy,Var("opc1",F16))),
16065                              LS", ",
16066                              Mop(Cast sTy,Mop(Cast vTy,Var("opc2",F16))),
16067                              LS"; Thumb2; "]),
16068                          (Call("BadCode",CTy"MachineCode",sVar"x"),
16069                           sVar"x")]),sVar"s"])),qVar"state"))))
16070;
16071val DecodeHint_def = Def
16072  ("DecodeHint",TP[Var("cond",F4),Var("op",F8)],
16073   Close
16074     (qVar"state",
16075      ITE(Bop(Or,
16076              EQ(Dest("Architecture",CTy"Architecture",qVar"state"),
16077                 LC("ARMv6T2",CTy"Architecture")),
16078              Bop(And,EQ(EX(Var("op",F8),LN 7,LN 4,F4),LW(15,4)),
16079                  Bop(And,
16080                      EQ(Dest("Encoding",CTy"Encoding",qVar"state"),
16081                         LC("Encoding_ARM",CTy"Encoding")),
16082                      EQ(Dest
16083                           ("Architecture",CTy"Architecture",qVar"state"),
16084                         LC("ARMv6K",CTy"Architecture"))))),
16085          TP[Const("NoOperation",CTy"instruction"),qVar"state"],
16086          Let(TP[bVar"v",qVar"s"],
16087              Apply
16088                (Call
16089                   ("Do",ATy(qTy,PTy(bTy,qTy)),
16090                    TP[Var("cond",F4),
16091                       Bop(Or,
16092                           Bop(Ge,
16093                               Apply
16094                                 (Call("ArchVersion",ATy(qTy,nTy),LU),
16095                                  qVar"state"),LN 7),
16096                           Bop(And,
16097                               EQ(Dest
16098                                    ("Encoding",CTy"Encoding",qVar"state"),
16099                                  LC("Encoding_ARM",CTy"Encoding")),
16100                               EQ(Dest
16101                                    ("Architecture",CTy"Architecture",
16102                                     qVar"state"),
16103                                  LC("ARMv6K",CTy"Architecture"))))]),
16104                 qVar"state"),
16105              TP[ITE(bVar"v",
16106                     Let(TP[bVar"b'7",bVar"b'6",bVar"b'5",bVar"b'4",
16107                            bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"],
16108                         BL(8,Var("op",F8)),
16109                         ITB([(Bop(And,Mop(Not,bVar"b'7"),
16110                                   Bop(And,Mop(Not,bVar"b'6"),
16111                                       Bop(And,Mop(Not,bVar"b'5"),
16112                                           Bop(And,Mop(Not,bVar"b'4"),
16113                                               Bop(And,Mop(Not,bVar"b'3"),
16114                                                   Bop(And,
16115                                                       Mop(Not,bVar"b'2"),
16116                                                       Bop(And,
16117                                                           Mop(Not,
16118                                                               bVar"b'1"),
16119                                                           bVar"b'0"))))))),
16120                               Call
16121                                 ("Hint",CTy"instruction",
16122                                  Const("Yield",CTy"Hint"))),
16123                              (Bop(And,Mop(Not,bVar"b'7"),
16124                                   Bop(And,Mop(Not,bVar"b'6"),
16125                                       Bop(And,Mop(Not,bVar"b'5"),
16126                                           Bop(And,Mop(Not,bVar"b'4"),
16127                                               Bop(And,Mop(Not,bVar"b'3"),
16128                                                   Bop(And,
16129                                                       Mop(Not,bVar"b'2"),
16130                                                       Bop(And,bVar"b'1",
16131                                                           Mop(Not,
16132                                                               bVar"b'0")))))))),
16133                               Call
16134                                 ("Hint",CTy"instruction",
16135                                  Const("WaitForEvent",CTy"Hint"))),
16136                              (Bop(And,Mop(Not,bVar"b'7"),
16137                                   Bop(And,Mop(Not,bVar"b'6"),
16138                                       Bop(And,Mop(Not,bVar"b'5"),
16139                                           Bop(And,Mop(Not,bVar"b'4"),
16140                                               Bop(And,Mop(Not,bVar"b'3"),
16141                                                   Bop(And,
16142                                                       Mop(Not,bVar"b'2"),
16143                                                       Bop(And,bVar"b'1",
16144                                                           bVar"b'0"))))))),
16145                               Call
16146                                 ("Hint",CTy"instruction",
16147                                  Const("WaitForInterrupt",CTy"Hint"))),
16148                              (Bop(And,Mop(Not,bVar"b'7"),
16149                                   Bop(And,Mop(Not,bVar"b'6"),
16150                                       Bop(And,Mop(Not,bVar"b'5"),
16151                                           Bop(And,Mop(Not,bVar"b'4"),
16152                                               Bop(And,Mop(Not,bVar"b'3"),
16153                                                   Bop(And,bVar"b'2",
16154                                                       Bop(And,
16155                                                           Mop(Not,
16156                                                               bVar"b'1"),
16157                                                           Mop(Not,
16158                                                               bVar"b'0")))))))),
16159                               Call
16160                                 ("Hint",CTy"instruction",
16161                                  Const("SendEvent",CTy"Hint"))),
16162                              (Bop(And,bVar"b'7",
16163                                   Bop(And,bVar"b'6",
16164                                       Bop(And,bVar"b'5",bVar"b'4"))),
16165                               Call
16166                                 ("Hint",CTy"instruction",
16167                                  Call
16168                                    ("Debug",CTy"Hint",
16169                                     Mop(Cast F4,
16170                                         LL[bVar"b'3",bVar"b'2",bVar"b'1",
16171                                            bVar"b'0"]))))],
16172                             Const("NoOperation",CTy"instruction"))),
16173                     Apply
16174                       (Call("Skip",ATy(qTy,CTy"instruction"),LU),qVar"s")),
16175                 qVar"s"]))))
16176;
16177val DecodeParallelAdditionSubtraction_def = Def
16178  ("DecodeParallelAdditionSubtraction",
16179   TP[Var("op1",FTy 2),Var("op2",FTy 3),Var("U",F1),Var("Rd",F4),
16180      Var("Rn",F4),Var("Rm",F4)],
16181   ITE(EQ(Var("U",F1),LW(1,1)),
16182       CS(TP[Var("op1",FTy 2),BL(3,Var("op2",FTy 3))],
16183          [(TP[LW(1,2),LF,bVar"x'1",bVar"x'0"],
16184            Call
16185              ("SIMD",CTy"instruction",
16186               Call
16187                 ("UnsignedAddSub16",CTy"SIMD",
16188                  TP[Mop(Cast(FTy 2),LL[bVar"x'1",bVar"x'0"]),
16189                     Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
16190           (TP[LW(1,2),LT,LF,LF],
16191            Call
16192              ("SIMD",CTy"instruction",
16193               Call
16194                 ("UnsignedAddSub8",CTy"SIMD",
16195                  TP[LF,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
16196           (TP[LW(1,2),LT,LT,LT],
16197            Call
16198              ("SIMD",CTy"instruction",
16199               Call
16200                 ("UnsignedAddSub8",CTy"SIMD",
16201                  TP[LT,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
16202           (TP[LW(2,2),LF,bVar"x'1",bVar"x'0"],
16203            Call
16204              ("SIMD",CTy"instruction",
16205               Call
16206                 ("UnsignedSaturatingAddSub16",CTy"SIMD",
16207                  TP[Mop(Cast(FTy 2),LL[bVar"x'1",bVar"x'0"]),
16208                     Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
16209           (TP[LW(2,2),LT,LF,LF],
16210            Call
16211              ("SIMD",CTy"instruction",
16212               Call
16213                 ("UnsignedSaturatingAddSub8",CTy"SIMD",
16214                  TP[LF,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
16215           (TP[LW(2,2),LT,LT,LT],
16216            Call
16217              ("SIMD",CTy"instruction",
16218               Call
16219                 ("UnsignedSaturatingAddSub8",CTy"SIMD",
16220                  TP[LT,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
16221           (TP[LW(3,2),LF,bVar"x'1",bVar"x'0"],
16222            Call
16223              ("SIMD",CTy"instruction",
16224               Call
16225                 ("UnsignedHalvingAddSub16",CTy"SIMD",
16226                  TP[Mop(Cast(FTy 2),LL[bVar"x'1",bVar"x'0"]),
16227                     Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
16228           (TP[LW(3,2),LT,LF,LF],
16229            Call
16230              ("SIMD",CTy"instruction",
16231               Call
16232                 ("UnsignedHalvingAddSub8",CTy"SIMD",
16233                  TP[LF,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
16234           (TP[LW(3,2),LT,LT,LT],
16235            Call
16236              ("SIMD",CTy"instruction",
16237               Call
16238                 ("UnsignedHalvingAddSub8",CTy"SIMD",
16239                  TP[LT,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
16240           (TP[AVar(FTy 2),AVar bTy,AVar bTy,AVar bTy],
16241            Call("Undefined",CTy"instruction",LW(0,32)))]),
16242       CS(TP[Var("op1",FTy 2),BL(3,Var("op2",FTy 3))],
16243          [(TP[LW(1,2),LF,bVar"x'1",bVar"x'0"],
16244            Call
16245              ("SIMD",CTy"instruction",
16246               Call
16247                 ("SignedAddSub16",CTy"SIMD",
16248                  TP[Mop(Cast(FTy 2),LL[bVar"x'1",bVar"x'0"]),
16249                     Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
16250           (TP[LW(1,2),LT,LF,LF],
16251            Call
16252              ("SIMD",CTy"instruction",
16253               Call
16254                 ("SignedAddSub8",CTy"SIMD",
16255                  TP[LF,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
16256           (TP[LW(1,2),LT,LT,LT],
16257            Call
16258              ("SIMD",CTy"instruction",
16259               Call
16260                 ("SignedAddSub8",CTy"SIMD",
16261                  TP[LT,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
16262           (TP[LW(2,2),LF,bVar"x'1",bVar"x'0"],
16263            Call
16264              ("SIMD",CTy"instruction",
16265               Call
16266                 ("SignedSaturatingAddSub16",CTy"SIMD",
16267                  TP[Mop(Cast(FTy 2),LL[bVar"x'1",bVar"x'0"]),
16268                     Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
16269           (TP[LW(2,2),LT,LF,LF],
16270            Call
16271              ("SIMD",CTy"instruction",
16272               Call
16273                 ("SignedSaturatingAddSub8",CTy"SIMD",
16274                  TP[LF,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
16275           (TP[LW(2,2),LT,LT,LT],
16276            Call
16277              ("SIMD",CTy"instruction",
16278               Call
16279                 ("SignedSaturatingAddSub8",CTy"SIMD",
16280                  TP[LT,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
16281           (TP[LW(3,2),LF,bVar"x'1",bVar"x'0"],
16282            Call
16283              ("SIMD",CTy"instruction",
16284               Call
16285                 ("SignedHalvingAddSub16",CTy"SIMD",
16286                  TP[Mop(Cast(FTy 2),LL[bVar"x'1",bVar"x'0"]),
16287                     Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
16288           (TP[LW(3,2),LT,LF,LF],
16289            Call
16290              ("SIMD",CTy"instruction",
16291               Call
16292                 ("SignedHalvingAddSub8",CTy"SIMD",
16293                  TP[LF,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
16294           (TP[LW(3,2),LT,LT,LT],
16295            Call
16296              ("SIMD",CTy"instruction",
16297               Call
16298                 ("SignedHalvingAddSub8",CTy"SIMD",
16299                  TP[LT,Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]))),
16300           (TP[AVar(FTy 2),AVar bTy,AVar bTy,AVar bTy],
16301            Call("Undefined",CTy"instruction",LW(0,32)))])))
16302;
16303val DecodeVFP_def = Def
16304  ("DecodeVFP",Var("w",F32),
16305   Close
16306     (qVar"state",
16307      Let(TP[bVar"b'27",bVar"b'26",bVar"b'25",bVar"b'24",bVar"b'23",
16308             bVar"b'22",bVar"b'21",bVar"b'20",bVar"b'19",bVar"b'18",
16309             bVar"b'17",bVar"b'16",bVar"b'15",bVar"b'14",bVar"b'13",
16310             bVar"b'12",bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8",
16311             bVar"b'7",bVar"b'6",bVar"b'5",bVar"b'4",bVar"b'3",bVar"b'2",
16312             bVar"b'1",bVar"b'0"],
16313          BL(28,EX(Var("w",F32),LN 27,LN 0,FTy 28)),
16314          ITB([(bVar"b'25",
16315                ITE(Bop(And,bVar"b'27",
16316                        Bop(And,bVar"b'26",
16317                            Bop(And,Mop(Not,bVar"b'24"),
16318                                Bop(And,bVar"b'11",
16319                                    Bop(And,Mop(Not,bVar"b'10"),bVar"b'9"))))),
16320                    ITB([(Bop(And,Mop(Not,bVar"b'23"),Mop(Not,bVar"b'4")),
16321                          Let(Var("Vm",F4),
16322                              Mop(Cast F4,
16323                                  LL[bVar"b'3",bVar"b'2",bVar"b'1",
16324                                     bVar"b'0"]),
16325                              Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]),
16326                                  Let(Var("op2",F1),
16327                                      Mop(Cast F1,LL[bVar"b'6"]),
16328                                      Let(Var("N",F1),
16329                                          Mop(Cast F1,LL[bVar"b'7"]),
16330                                          Let(Var("Vd",F4),
16331                                              Mop(Cast F4,
16332                                                  LL[bVar"b'15",
16333                                                     bVar"b'14",
16334                                                     bVar"b'13",bVar"b'12"]),
16335                                              Let(Var("Vn",F4),
16336                                                  Mop(Cast F4,
16337                                                      LL[bVar"b'19",
16338                                                         bVar"b'18",
16339                                                         bVar"b'17",
16340                                                         bVar"b'16"]),
16341                                                  Let(Var("D",F1),
16342                                                      Mop(Cast F1,
16343                                                          LL[bVar"b'22"]),
16344                                                      Let(bVar"dp_operation",
16345                                                          EQ(Mop(Cast F1,
16346                                                                 LL[bVar"b'8"]),
16347                                                             LW(1,1)),
16348                                                          Let(TP[Var("d",
16349                                                                     FTy 5),
16350                                                                 Var("n",
16351                                                                     FTy 5),
16352                                                                 Var("m",
16353                                                                     FTy 5)],
16354                                                              ITE(bVar"dp_operation",
16355                                                                  TP[CC[Var("D",
16356                                                                            F1),
16357                                                                        Var("Vd",
16358                                                                            F4)],
16359                                                                     CC[Var("N",
16360                                                                            F1),
16361                                                                        Var("Vn",
16362                                                                            F4)],
16363                                                                     CC[Var("M",
16364                                                                            F1),
16365                                                                        Var("Vm",
16366                                                                            F4)]],
16367                                                                  TP[CC[Var("Vd",
16368                                                                            F4),
16369                                                                        Var("D",
16370                                                                            F1)],
16371                                                                     CC[Var("Vn",
16372                                                                            F4),
16373                                                                        Var("N",
16374                                                                            F1)],
16375                                                                     CC[Var("Vm",
16376                                                                            F4),
16377                                                                        Var("M",
16378                                                                            F1)]]),
16379                                                              TP[Mop(Not,
16380                                                                     EQ(Dest
16381                                                                          ("VFPExtension",
16382                                                                           CTy"VFPExtension",
16383                                                                           qVar"state"),
16384                                                                        LC("NoVFP",
16385                                                                           CTy"VFPExtension"))),
16386                                                                 LNL cTy,
16387                                                                 Call
16388                                                                   ("VFP",
16389                                                                    CTy"instruction",
16390                                                                    CS(Mop(Cast
16391                                                                             (FTy 2),
16392                                                                           LL[bVar"b'21",
16393                                                                              bVar"b'20"]),
16394                                                                       [(LW(0,
16395                                                                            2),
16396                                                                         Call
16397                                                                           ("vmla_vmls",
16398                                                                            CTy"VFP",
16399                                                                            TP[bVar"dp_operation",
16400                                                                               EQ(Var("op2",
16401                                                                                      F1),
16402                                                                                  LW(0,
16403                                                                                     1)),
16404                                                                               Var("d",
16405                                                                                   FTy 5),
16406                                                                               Var("n",
16407                                                                                   FTy 5),
16408                                                                               Var("m",
16409                                                                                   FTy 5)])),
16410                                                                        (LW(1,
16411                                                                            2),
16412                                                                         Call
16413                                                                           ("vneg_mul",
16414                                                                            CTy"VFP",
16415                                                                            TP[bVar"dp_operation",
16416                                                                               ITE(EQ(Var("op2",
16417                                                                                          F1),
16418                                                                                      LW(1,
16419                                                                                         1)),
16420                                                                                   LC("VFPNegMul_VNMLA",
16421                                                                                      CTy"VFPNegMul"),
16422                                                                                   LC("VFPNegMul_VNMLS",
16423                                                                                      CTy"VFPNegMul")),
16424                                                                               Var("d",
16425                                                                                   FTy 5),
16426                                                                               Var("n",
16427                                                                                   FTy 5),
16428                                                                               Var("m",
16429                                                                                   FTy 5)])),
16430                                                                        (LW(2,
16431                                                                            2),
16432                                                                         ITE(EQ(Var("op2",
16433                                                                                    F1),
16434                                                                                LW(1,
16435                                                                                   1)),
16436                                                                             Call
16437                                                                               ("vneg_mul",
16438                                                                                CTy"VFP",
16439                                                                                TP[bVar"dp_operation",
16440                                                                                   LC("VFPNegMul_VNMUL",
16441                                                                                      CTy"VFPNegMul"),
16442                                                                                   Var("d",
16443                                                                                       FTy 5),
16444                                                                                   Var("n",
16445                                                                                       FTy 5),
16446                                                                                   Var("m",
16447                                                                                       FTy 5)]),
16448                                                                             Call
16449                                                                               ("vmul",
16450                                                                                CTy"VFP",
16451                                                                                TP[bVar"dp_operation",
16452                                                                                   Var("d",
16453                                                                                       FTy 5),
16454                                                                                   Var("n",
16455                                                                                       FTy 5),
16456                                                                                   Var("m",
16457                                                                                       FTy 5)]))),
16458                                                                        (LW(3,
16459                                                                            2),
16460                                                                         ITE(EQ(Var("op2",
16461                                                                                    F1),
16462                                                                                LW(1,
16463                                                                                   1)),
16464                                                                             Call
16465                                                                               ("vsub",
16466                                                                                CTy"VFP",
16467                                                                                TP[bVar"dp_operation",
16468                                                                                   Var("d",
16469                                                                                       FTy 5),
16470                                                                                   Var("n",
16471                                                                                       FTy 5),
16472                                                                                   Var("m",
16473                                                                                       FTy 5)]),
16474                                                                             Call
16475                                                                               ("vadd",
16476                                                                                CTy"VFP",
16477                                                                                TP[bVar"dp_operation",
16478                                                                                   Var("d",
16479                                                                                       FTy 5),
16480                                                                                   Var("n",
16481                                                                                       FTy 5),
16482                                                                                   Var("m",
16483                                                                                       FTy 5)])))]))])))))))))),
16484                         (Bop(And,bVar"b'23",
16485                              Bop(And,Mop(Not,bVar"b'21"),
16486                                  Bop(And,Mop(Not,bVar"b'20"),
16487                                      Bop(And,Mop(Not,bVar"b'6"),
16488                                          Mop(Not,bVar"b'4"))))),
16489                          Let(Var("Vm",F4),
16490                              Mop(Cast F4,
16491                                  LL[bVar"b'3",bVar"b'2",bVar"b'1",
16492                                     bVar"b'0"]),
16493                              Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]),
16494                                  Let(Var("N",F1),
16495                                      Mop(Cast F1,LL[bVar"b'7"]),
16496                                      Let(Var("Vd",F4),
16497                                          Mop(Cast F4,
16498                                              LL[bVar"b'15",bVar"b'14",
16499                                                 bVar"b'13",bVar"b'12"]),
16500                                          Let(Var("Vn",F4),
16501                                              Mop(Cast F4,
16502                                                  LL[bVar"b'19",
16503                                                     bVar"b'18",
16504                                                     bVar"b'17",bVar"b'16"]),
16505                                              Let(Var("D",F1),
16506                                                  Mop(Cast F1,
16507                                                      LL[bVar"b'22"]),
16508                                                  Let(bVar"dp_operation",
16509                                                      EQ(Mop(Cast F1,
16510                                                             LL[bVar"b'8"]),
16511                                                         LW(1,1)),
16512                                                      Let(TP[Var("d",FTy 5),
16513                                                             Var("n",FTy 5),
16514                                                             Var("m",FTy 5)],
16515                                                          ITE(bVar"dp_operation",
16516                                                              TP[CC[Var("D",
16517                                                                        F1),
16518                                                                    Var("Vd",
16519                                                                        F4)],
16520                                                                 CC[Var("N",
16521                                                                        F1),
16522                                                                    Var("Vn",
16523                                                                        F4)],
16524                                                                 CC[Var("M",
16525                                                                        F1),
16526                                                                    Var("Vm",
16527                                                                        F4)]],
16528                                                              TP[CC[Var("Vd",
16529                                                                        F4),
16530                                                                    Var("D",
16531                                                                        F1)],
16532                                                                 CC[Var("Vn",
16533                                                                        F4),
16534                                                                    Var("N",
16535                                                                        F1)],
16536                                                                 CC[Var("Vm",
16537                                                                        F4),
16538                                                                    Var("M",
16539                                                                        F1)]]),
16540                                                          TP[Mop(Not,
16541                                                                 EQ(Dest
16542                                                                      ("VFPExtension",
16543                                                                       CTy"VFPExtension",
16544                                                                       qVar"state"),
16545                                                                    LC("NoVFP",
16546                                                                       CTy"VFPExtension"))),
16547                                                             LNL cTy,
16548                                                             Call
16549                                                               ("VFP",
16550                                                                CTy"instruction",
16551                                                                Call
16552                                                                  ("vdiv",
16553                                                                   CTy"VFP",
16554                                                                   TP[bVar"dp_operation",
16555                                                                      Var("d",
16556                                                                          FTy 5),
16557                                                                      Var("n",
16558                                                                          FTy 5),
16559                                                                      Var("m",
16560                                                                          FTy 5)]))]))))))))),
16561                         (Bop(And,bVar"b'23",
16562                              Bop(And,Mop(Not,bVar"b'21"),
16563                                  Bop(And,bVar"b'20",Mop(Not,bVar"b'4")))),
16564                          Let(Var("Vm",F4),
16565                              Mop(Cast F4,
16566                                  LL[bVar"b'3",bVar"b'2",bVar"b'1",
16567                                     bVar"b'0"]),
16568                              Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]),
16569                                  Let(Var("N",F1),
16570                                      Mop(Cast F1,LL[bVar"b'7"]),
16571                                      Let(Var("Vd",F4),
16572                                          Mop(Cast F4,
16573                                              LL[bVar"b'15",bVar"b'14",
16574                                                 bVar"b'13",bVar"b'12"]),
16575                                          Let(Var("Vn",F4),
16576                                              Mop(Cast F4,
16577                                                  LL[bVar"b'19",
16578                                                     bVar"b'18",
16579                                                     bVar"b'17",bVar"b'16"]),
16580                                              Let(Var("D",F1),
16581                                                  Mop(Cast F1,
16582                                                      LL[bVar"b'22"]),
16583                                                  Let(bVar"dp_operation",
16584                                                      EQ(Mop(Cast F1,
16585                                                             LL[bVar"b'8"]),
16586                                                         LW(1,1)),
16587                                                      Let(TP[Var("d",FTy 5),
16588                                                             Var("n",FTy 5),
16589                                                             Var("m",FTy 5)],
16590                                                          ITE(bVar"dp_operation",
16591                                                              TP[CC[Var("D",
16592                                                                        F1),
16593                                                                    Var("Vd",
16594                                                                        F4)],
16595                                                                 CC[Var("N",
16596                                                                        F1),
16597                                                                    Var("Vn",
16598                                                                        F4)],
16599                                                                 CC[Var("M",
16600                                                                        F1),
16601                                                                    Var("Vm",
16602                                                                        F4)]],
16603                                                              TP[CC[Var("Vd",
16604                                                                        F4),
16605                                                                    Var("D",
16606                                                                        F1)],
16607                                                                 CC[Var("Vn",
16608                                                                        F4),
16609                                                                    Var("N",
16610                                                                        F1)],
16611                                                                 CC[Var("Vm",
16612                                                                        F4),
16613                                                                    Var("M",
16614                                                                        F1)]]),
16615                                                          TP[EQ(Dest
16616                                                                  ("VFPExtension",
16617                                                                   CTy"VFPExtension",
16618                                                                   qVar"state"),
16619                                                                LC("VFPv4",
16620                                                                   CTy"VFPExtension")),
16621                                                             LNL cTy,
16622                                                             Call
16623                                                               ("VFP",
16624                                                                CTy"instruction",
16625                                                                Call
16626                                                                  ("vfnma_vfnms",
16627                                                                   CTy"VFP",
16628                                                                   TP[bVar"dp_operation",
16629                                                                      EQ(Mop(Cast
16630                                                                               F1,
16631                                                                             LL[bVar"b'6"]),
16632                                                                         LW(0,
16633                                                                            1)),
16634                                                                      Var("d",
16635                                                                          FTy 5),
16636                                                                      Var("n",
16637                                                                          FTy 5),
16638                                                                      Var("m",
16639                                                                          FTy 5)]))]))))))))),
16640                         (Bop(And,bVar"b'23",
16641                              Bop(And,bVar"b'21",
16642                                  Bop(And,Mop(Not,bVar"b'20"),
16643                                      Mop(Not,bVar"b'4")))),
16644                          Let(Var("Vm",F4),
16645                              Mop(Cast F4,
16646                                  LL[bVar"b'3",bVar"b'2",bVar"b'1",
16647                                     bVar"b'0"]),
16648                              Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]),
16649                                  Let(Var("N",F1),
16650                                      Mop(Cast F1,LL[bVar"b'7"]),
16651                                      Let(Var("Vd",F4),
16652                                          Mop(Cast F4,
16653                                              LL[bVar"b'15",bVar"b'14",
16654                                                 bVar"b'13",bVar"b'12"]),
16655                                          Let(Var("Vn",F4),
16656                                              Mop(Cast F4,
16657                                                  LL[bVar"b'19",
16658                                                     bVar"b'18",
16659                                                     bVar"b'17",bVar"b'16"]),
16660                                              Let(Var("D",F1),
16661                                                  Mop(Cast F1,
16662                                                      LL[bVar"b'22"]),
16663                                                  Let(bVar"dp_operation",
16664                                                      EQ(Mop(Cast F1,
16665                                                             LL[bVar"b'8"]),
16666                                                         LW(1,1)),
16667                                                      Let(TP[Var("d",FTy 5),
16668                                                             Var("n",FTy 5),
16669                                                             Var("m",FTy 5)],
16670                                                          ITE(bVar"dp_operation",
16671                                                              TP[CC[Var("D",
16672                                                                        F1),
16673                                                                    Var("Vd",
16674                                                                        F4)],
16675                                                                 CC[Var("N",
16676                                                                        F1),
16677                                                                    Var("Vn",
16678                                                                        F4)],
16679                                                                 CC[Var("M",
16680                                                                        F1),
16681                                                                    Var("Vm",
16682                                                                        F4)]],
16683                                                              TP[CC[Var("Vd",
16684                                                                        F4),
16685                                                                    Var("D",
16686                                                                        F1)],
16687                                                                 CC[Var("Vn",
16688                                                                        F4),
16689                                                                    Var("N",
16690                                                                        F1)],
16691                                                                 CC[Var("Vm",
16692                                                                        F4),
16693                                                                    Var("M",
16694                                                                        F1)]]),
16695                                                          TP[EQ(Dest
16696                                                                  ("VFPExtension",
16697                                                                   CTy"VFPExtension",
16698                                                                   qVar"state"),
16699                                                                LC("VFPv4",
16700                                                                   CTy"VFPExtension")),
16701                                                             LNL cTy,
16702                                                             Call
16703                                                               ("VFP",
16704                                                                CTy"instruction",
16705                                                                Call
16706                                                                  ("vfma_vfms",
16707                                                                   CTy"VFP",
16708                                                                   TP[bVar"dp_operation",
16709                                                                      EQ(Mop(Cast
16710                                                                               F1,
16711                                                                             LL[bVar"b'6"]),
16712                                                                         LW(0,
16713                                                                            1)),
16714                                                                      Var("d",
16715                                                                          FTy 5),
16716                                                                      Var("n",
16717                                                                          FTy 5),
16718                                                                      Var("m",
16719                                                                          FTy 5)]))]))))))))),
16720                         (Bop(And,bVar"b'23",
16721                              Bop(And,bVar"b'21",
16722                                  Bop(And,bVar"b'20",
16723                                      Bop(And,Mop(Not,bVar"b'19"),
16724                                          Bop(And,Mop(Not,bVar"b'18"),
16725                                              Bop(And,Mop(Not,bVar"b'17"),
16726                                                  Bop(And,
16727                                                      Mop(Not,bVar"b'16"),
16728                                                      Bop(And,
16729                                                          Mop(Not,
16730                                                              bVar"b'7"),
16731                                                          Bop(And,
16732                                                              bVar"b'6",
16733                                                              Mop(Not,
16734                                                                  bVar"b'4")))))))))),
16735                          Let(Var("Vm",F4),
16736                              Mop(Cast F4,
16737                                  LL[bVar"b'3",bVar"b'2",bVar"b'1",
16738                                     bVar"b'0"]),
16739                              Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]),
16740                                  Let(Var("Vd",F4),
16741                                      Mop(Cast F4,
16742                                          LL[bVar"b'15",bVar"b'14",
16743                                             bVar"b'13",bVar"b'12"]),
16744                                      Let(Var("D",F1),
16745                                          Mop(Cast F1,LL[bVar"b'22"]),
16746                                          Let(bVar"single_register",
16747                                              EQ(Mop(Cast F1,LL[bVar"b'8"]),
16748                                                 LW(0,1)),
16749                                              Let(TP[Var("d",FTy 5),
16750                                                     Var("m",FTy 5)],
16751                                                  ITE(bVar"single_register",
16752                                                      TP[CC[Var("Vd",F4),
16753                                                            Var("D",F1)],
16754                                                         CC[Var("Vm",F4),
16755                                                            Var("M",F1)]],
16756                                                      TP[CC[Var("D",F1),
16757                                                            Var("Vd",F4)],
16758                                                         CC[Var("M",F1),
16759                                                            Var("Vm",F4)]]),
16760                                                  TP[Mop(Not,
16761                                                         EQ(Dest
16762                                                              ("VFPExtension",
16763                                                               CTy"VFPExtension",
16764                                                               qVar"state"),
16765                                                            LC("NoVFP",
16766                                                               CTy"VFPExtension"))),
16767                                                     LNL cTy,
16768                                                     Call
16769                                                       ("VFP",
16770                                                        CTy"instruction",
16771                                                        Call
16772                                                          ("vmov",
16773                                                           CTy"VFP",
16774                                                           TP[bVar"single_register",
16775                                                              Var("d",
16776                                                                  FTy 5),
16777                                                              Var("m",
16778                                                                  FTy 5)]))]))))))),
16779                         (Bop(And,bVar"b'23",
16780                              Bop(And,bVar"b'21",
16781                                  Bop(And,bVar"b'20",
16782                                      Bop(And,Mop(Not,bVar"b'19"),
16783                                          Bop(And,Mop(Not,bVar"b'18"),
16784                                              Bop(And,Mop(Not,bVar"b'17"),
16785                                                  Bop(And,
16786                                                      Mop(Not,bVar"b'16"),
16787                                                      Bop(And,bVar"b'7",
16788                                                          Bop(And,
16789                                                              bVar"b'6",
16790                                                              Mop(Not,
16791                                                                  bVar"b'4")))))))))),
16792                          Let(Var("Vm",F4),
16793                              Mop(Cast F4,
16794                                  LL[bVar"b'3",bVar"b'2",bVar"b'1",
16795                                     bVar"b'0"]),
16796                              Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]),
16797                                  Let(Var("Vd",F4),
16798                                      Mop(Cast F4,
16799                                          LL[bVar"b'15",bVar"b'14",
16800                                             bVar"b'13",bVar"b'12"]),
16801                                      Let(Var("D",F1),
16802                                          Mop(Cast F1,LL[bVar"b'22"]),
16803                                          Let(bVar"dp_operation",
16804                                              EQ(Mop(Cast F1,LL[bVar"b'8"]),
16805                                                 LW(1,1)),
16806                                              Let(TP[Var("d",FTy 5),
16807                                                     Var("m",FTy 5)],
16808                                                  ITE(bVar"dp_operation",
16809                                                      TP[CC[Var("D",F1),
16810                                                            Var("Vd",F4)],
16811                                                         CC[Var("M",F1),
16812                                                            Var("Vm",F4)]],
16813                                                      TP[CC[Var("Vd",F4),
16814                                                            Var("D",F1)],
16815                                                         CC[Var("Vm",F4),
16816                                                            Var("M",F1)]]),
16817                                                  TP[Mop(Not,
16818                                                         EQ(Dest
16819                                                              ("VFPExtension",
16820                                                               CTy"VFPExtension",
16821                                                               qVar"state"),
16822                                                            LC("NoVFP",
16823                                                               CTy"VFPExtension"))),
16824                                                     LNL cTy,
16825                                                     Call
16826                                                       ("VFP",
16827                                                        CTy"instruction",
16828                                                        Call
16829                                                          ("vabs",
16830                                                           CTy"VFP",
16831                                                           TP[bVar"dp_operation",
16832                                                              Var("d",
16833                                                                  FTy 5),
16834                                                              Var("m",
16835                                                                  FTy 5)]))]))))))),
16836                         (Bop(And,bVar"b'23",
16837                              Bop(And,bVar"b'21",
16838                                  Bop(And,bVar"b'20",
16839                                      Bop(And,Mop(Not,bVar"b'19"),
16840                                          Bop(And,Mop(Not,bVar"b'18"),
16841                                              Bop(And,Mop(Not,bVar"b'17"),
16842                                                  Bop(And,bVar"b'16",
16843                                                      Bop(And,
16844                                                          Mop(Not,
16845                                                              bVar"b'7"),
16846                                                          Bop(And,
16847                                                              bVar"b'6",
16848                                                              Mop(Not,
16849                                                                  bVar"b'4")))))))))),
16850                          Let(Var("Vm",F4),
16851                              Mop(Cast F4,
16852                                  LL[bVar"b'3",bVar"b'2",bVar"b'1",
16853                                     bVar"b'0"]),
16854                              Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]),
16855                                  Let(Var("Vd",F4),
16856                                      Mop(Cast F4,
16857                                          LL[bVar"b'15",bVar"b'14",
16858                                             bVar"b'13",bVar"b'12"]),
16859                                      Let(Var("D",F1),
16860                                          Mop(Cast F1,LL[bVar"b'22"]),
16861                                          Let(bVar"dp_operation",
16862                                              EQ(Mop(Cast F1,LL[bVar"b'8"]),
16863                                                 LW(1,1)),
16864                                              Let(TP[Var("d",FTy 5),
16865                                                     Var("m",FTy 5)],
16866                                                  ITE(bVar"dp_operation",
16867                                                      TP[CC[Var("D",F1),
16868                                                            Var("Vd",F4)],
16869                                                         CC[Var("M",F1),
16870                                                            Var("Vm",F4)]],
16871                                                      TP[CC[Var("Vd",F4),
16872                                                            Var("D",F1)],
16873                                                         CC[Var("Vm",F4),
16874                                                            Var("M",F1)]]),
16875                                                  TP[Mop(Not,
16876                                                         EQ(Dest
16877                                                              ("VFPExtension",
16878                                                               CTy"VFPExtension",
16879                                                               qVar"state"),
16880                                                            LC("NoVFP",
16881                                                               CTy"VFPExtension"))),
16882                                                     LNL cTy,
16883                                                     Call
16884                                                       ("VFP",
16885                                                        CTy"instruction",
16886                                                        Call
16887                                                          ("vneg",
16888                                                           CTy"VFP",
16889                                                           TP[bVar"dp_operation",
16890                                                              Var("d",
16891                                                                  FTy 5),
16892                                                              Var("m",
16893                                                                  FTy 5)]))]))))))),
16894                         (Bop(And,bVar"b'23",
16895                              Bop(And,bVar"b'21",
16896                                  Bop(And,bVar"b'20",
16897                                      Bop(And,Mop(Not,bVar"b'19"),
16898                                          Bop(And,Mop(Not,bVar"b'18"),
16899                                              Bop(And,Mop(Not,bVar"b'17"),
16900                                                  Bop(And,bVar"b'16",
16901                                                      Bop(And,bVar"b'7",
16902                                                          Bop(And,
16903                                                              bVar"b'6",
16904                                                              Mop(Not,
16905                                                                  bVar"b'4")))))))))),
16906                          Let(Var("Vm",F4),
16907                              Mop(Cast F4,
16908                                  LL[bVar"b'3",bVar"b'2",bVar"b'1",
16909                                     bVar"b'0"]),
16910                              Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]),
16911                                  Let(Var("Vd",F4),
16912                                      Mop(Cast F4,
16913                                          LL[bVar"b'15",bVar"b'14",
16914                                             bVar"b'13",bVar"b'12"]),
16915                                      Let(Var("D",F1),
16916                                          Mop(Cast F1,LL[bVar"b'22"]),
16917                                          Let(bVar"dp_operation",
16918                                              EQ(Mop(Cast F1,LL[bVar"b'8"]),
16919                                                 LW(1,1)),
16920                                              Let(TP[Var("d",FTy 5),
16921                                                     Var("m",FTy 5)],
16922                                                  ITE(bVar"dp_operation",
16923                                                      TP[CC[Var("D",F1),
16924                                                            Var("Vd",F4)],
16925                                                         CC[Var("M",F1),
16926                                                            Var("Vm",F4)]],
16927                                                      TP[CC[Var("Vd",F4),
16928                                                            Var("D",F1)],
16929                                                         CC[Var("Vm",F4),
16930                                                            Var("M",F1)]]),
16931                                                  TP[Mop(Not,
16932                                                         EQ(Dest
16933                                                              ("VFPExtension",
16934                                                               CTy"VFPExtension",
16935                                                               qVar"state"),
16936                                                            LC("NoVFP",
16937                                                               CTy"VFPExtension"))),
16938                                                     LNL cTy,
16939                                                     Call
16940                                                       ("VFP",
16941                                                        CTy"instruction",
16942                                                        Call
16943                                                          ("vsqrt",
16944                                                           CTy"VFP",
16945                                                           TP[bVar"dp_operation",
16946                                                              Var("d",
16947                                                                  FTy 5),
16948                                                              Var("m",
16949                                                                  FTy 5)]))]))))))),
16950                         (Bop(And,bVar"b'23",
16951                              Bop(And,bVar"b'21",
16952                                  Bop(And,bVar"b'20",
16953                                      Bop(And,Mop(Not,bVar"b'19"),
16954                                          Bop(And,bVar"b'18",
16955                                              Bop(And,Mop(Not,bVar"b'17"),
16956                                                  Bop(And,
16957                                                      Mop(Not,bVar"b'16"),
16958                                                      Bop(And,bVar"b'6",
16959                                                          Mop(Not,
16960                                                              bVar"b'4"))))))))),
16961                          Let(Var("Vm",F4),
16962                              Mop(Cast F4,
16963                                  LL[bVar"b'3",bVar"b'2",bVar"b'1",
16964                                     bVar"b'0"]),
16965                              Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]),
16966                                  Let(Var("Vd",F4),
16967                                      Mop(Cast F4,
16968                                          LL[bVar"b'15",bVar"b'14",
16969                                             bVar"b'13",bVar"b'12"]),
16970                                      Let(Var("D",F1),
16971                                          Mop(Cast F1,LL[bVar"b'22"]),
16972                                          ITE(EQ(Mop(Cast F1,LL[bVar"b'7"]),
16973                                                 LW(1,1)),
16974                                              Let(bVar"dp_operation",
16975                                                  EQ(Mop(Cast F1,
16976                                                         LL[bVar"b'8"]),
16977                                                     LW(1,1)),
16978                                                  Let(TP[Var("d",FTy 5),
16979                                                         Var("m",FTy 5)],
16980                                                      ITE(bVar"dp_operation",
16981                                                          TP[CC[Var("D",F1),
16982                                                                Var("Vd",
16983                                                                    F4)],
16984                                                             CC[Var("M",F1),
16985                                                                Var("Vm",
16986                                                                    F4)]],
16987                                                          TP[CC[Var("Vd",
16988                                                                    F4),
16989                                                                Var("D",F1)],
16990                                                             CC[Var("Vm",
16991                                                                    F4),
16992                                                                Var("M",F1)]]),
16993                                                      TP[Mop(Not,
16994                                                             EQ(Dest
16995                                                                  ("VFPExtension",
16996                                                                   CTy"VFPExtension",
16997                                                                   qVar"state"),
16998                                                                LC("NoVFP",
16999                                                                   CTy"VFPExtension"))),
17000                                                         LNL cTy,
17001                                                         Call
17002                                                           ("VFP",
17003                                                            CTy"instruction",
17004                                                            Call
17005                                                              ("vcmp",
17006                                                               CTy"VFP",
17007                                                               TP[bVar"dp_operation",
17008                                                                  Var("d",
17009                                                                      FTy 5),
17010                                                                  Mop(Some,
17011                                                                      Var("m",
17012                                                                          FTy 5))]))])),
17013                                              TP[LF,LS"",
17014                                                 Call
17015                                                   ("Undefined",
17016                                                    CTy"instruction",
17017                                                    LW(0,32))])))))),
17018                         (Bop(And,bVar"b'23",
17019                              Bop(And,bVar"b'21",
17020                                  Bop(And,bVar"b'20",
17021                                      Bop(And,Mop(Not,bVar"b'19"),
17022                                          Bop(And,bVar"b'18",
17023                                              Bop(And,Mop(Not,bVar"b'17"),
17024                                                  Bop(And,bVar"b'16",
17025                                                      Bop(And,bVar"b'6",
17026                                                          Mop(Not,
17027                                                              bVar"b'4"))))))))),
17028                          Let(Var("Vd",F4),
17029                              Mop(Cast F4,
17030                                  LL[bVar"b'15",bVar"b'14",bVar"b'13",
17031                                     bVar"b'12"]),
17032                              Let(Var("D",F1),Mop(Cast F1,LL[bVar"b'22"]),
17033                                  ITE(EQ(Mop(Cast F1,LL[bVar"b'7"]),
17034                                         LW(1,1)),
17035                                      Let(bVar"dp_operation",
17036                                          EQ(Mop(Cast F1,LL[bVar"b'8"]),
17037                                             LW(1,1)),
17038                                          TP[Mop(Not,
17039                                                 EQ(Dest
17040                                                      ("VFPExtension",
17041                                                       CTy"VFPExtension",
17042                                                       qVar"state"),
17043                                                    LC("NoVFP",
17044                                                       CTy"VFPExtension"))),
17045                                             ITE(Bop(And,
17046                                                     EQ(Mop(Cast F1,
17047                                                            LL[bVar"b'5"]),
17048                                                        LW(0,1)),
17049                                                     EQ(Mop(Cast F4,
17050                                                            LL[bVar"b'3",
17051                                                               bVar"b'2",
17052                                                               bVar"b'1",
17053                                                               bVar"b'0"]),
17054                                                        LW(0,4))),LS"",
17055                                                 LS"vcmp"),
17056                                             Call
17057                                               ("VFP",CTy"instruction",
17058                                                Call
17059                                                  ("vcmp",CTy"VFP",
17060                                                   TP[bVar"dp_operation",
17061                                                      ITE(bVar"dp_operation",
17062                                                          CC[Var("D",F1),
17063                                                             Var("Vd",F4)],
17064                                                          CC[Var("Vd",F4),
17065                                                             Var("D",F1)]),
17066                                                      LO(FTy 5)]))]),
17067                                      TP[LF,LS"",
17068                                         Call
17069                                           ("Undefined",CTy"instruction",
17070                                            LW(0,32))])))),
17071                         (Bop(And,bVar"b'23",
17072                              Bop(And,bVar"b'21",
17073                                  Bop(And,bVar"b'20",
17074                                      Bop(And,Mop(Not,bVar"b'19"),
17075                                          Bop(And,bVar"b'18",
17076                                              Bop(And,bVar"b'17",
17077                                                  Bop(And,bVar"b'16",
17078                                                      Bop(And,bVar"b'7",
17079                                                          Bop(And,
17080                                                              bVar"b'6",
17081                                                              Mop(Not,
17082                                                                  bVar"b'4")))))))))),
17083                          Let(Var("Vm",F4),
17084                              Mop(Cast F4,
17085                                  LL[bVar"b'3",bVar"b'2",bVar"b'1",
17086                                     bVar"b'0"]),
17087                              Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]),
17088                                  Let(Var("Vd",F4),
17089                                      Mop(Cast F4,
17090                                          LL[bVar"b'15",bVar"b'14",
17091                                             bVar"b'13",bVar"b'12"]),
17092                                      Let(Var("D",F1),
17093                                          Mop(Cast F1,LL[bVar"b'22"]),
17094                                          Let(bVar"double_to_single",
17095                                              EQ(Mop(Cast F1,LL[bVar"b'8"]),
17096                                                 LW(1,1)),
17097                                              Let(TP[Var("d",FTy 5),
17098                                                     Var("m",FTy 5)],
17099                                                  ITE(bVar"double_to_single",
17100                                                      TP[CC[Var("Vd",F4),
17101                                                            Var("D",F1)],
17102                                                         CC[Var("M",F1),
17103                                                            Var("Vm",F4)]],
17104                                                      TP[CC[Var("D",F1),
17105                                                            Var("Vd",F4)],
17106                                                         CC[Var("Vm",F4),
17107                                                            Var("M",F1)]]),
17108                                                  TP[Mop(Not,
17109                                                         EQ(Dest
17110                                                              ("VFPExtension",
17111                                                               CTy"VFPExtension",
17112                                                               qVar"state"),
17113                                                            LC("NoVFP",
17114                                                               CTy"VFPExtension"))),
17115                                                     LNL cTy,
17116                                                     Call
17117                                                       ("VFP",
17118                                                        CTy"instruction",
17119                                                        Call
17120                                                          ("vcvt_float",
17121                                                           CTy"VFP",
17122                                                           TP[bVar"double_to_single",
17123                                                              Var("d",
17124                                                                  FTy 5),
17125                                                              Var("m",
17126                                                                  FTy 5)]))]))))))),
17127                         (Bop(And,bVar"b'23",
17128                              Bop(And,bVar"b'21",
17129                                  Bop(And,bVar"b'20",
17130                                      Bop(And,bVar"b'19",
17131                                          Bop(And,Mop(Not,bVar"b'18"),
17132                                              Bop(And,Mop(Not,bVar"b'17"),
17133                                                  Bop(And,
17134                                                      Mop(Not,bVar"b'16"),
17135                                                      Bop(And,bVar"b'6",
17136                                                          Mop(Not,
17137                                                              bVar"b'4"))))))))),
17138                          Let(Var("Vd",F4),
17139                              Mop(Cast F4,
17140                                  LL[bVar"b'15",bVar"b'14",bVar"b'13",
17141                                     bVar"b'12"]),
17142                              Let(Var("D",F1),Mop(Cast F1,LL[bVar"b'22"]),
17143                                  Let(bVar"dp_operation",
17144                                      EQ(Mop(Cast F1,LL[bVar"b'8"]),
17145                                         LW(1,1)),
17146                                      TP[Mop(Not,
17147                                             EQ(Dest
17148                                                  ("VFPExtension",
17149                                                   CTy"VFPExtension",
17150                                                   qVar"state"),
17151                                                LC("NoVFP",
17152                                                   CTy"VFPExtension"))),
17153                                         LNL cTy,
17154                                         Call
17155                                           ("VFP",CTy"instruction",
17156                                            Call
17157                                              ("vcvt_from_integer",
17158                                               CTy"VFP",
17159                                               TP[bVar"dp_operation",
17160                                                  EQ(Mop(Cast F1,
17161                                                         LL[bVar"b'7"]),
17162                                                     LW(0,1)),
17163                                                  ITE(bVar"dp_operation",
17164                                                      CC[Var("D",F1),
17165                                                         Var("Vd",F4)],
17166                                                      CC[Var("Vd",F4),
17167                                                         Var("D",F1)]),
17168                                                  CC[Mop(Cast F4,
17169                                                         LL[bVar"b'3",
17170                                                            bVar"b'2",
17171                                                            bVar"b'1",
17172                                                            bVar"b'0"]),
17173                                                     Mop(Cast F1,
17174                                                         LL[bVar"b'5"])]]))])))),
17175                         (Bop(And,bVar"b'23",
17176                              Bop(And,bVar"b'21",
17177                                  Bop(And,bVar"b'20",
17178                                      Bop(And,bVar"b'19",
17179                                          Bop(And,bVar"b'18",
17180                                              Bop(And,Mop(Not,bVar"b'17"),
17181                                                  Bop(And,bVar"b'6",
17182                                                      Mop(Not,bVar"b'4")))))))),
17183                          Let(Var("Vm",F4),
17184                              Mop(Cast F4,
17185                                  LL[bVar"b'3",bVar"b'2",bVar"b'1",
17186                                     bVar"b'0"]),
17187                              Let(Var("M",F1),Mop(Cast F1,LL[bVar"b'5"]),
17188                                  Let(bVar"dp_operation",
17189                                      EQ(Mop(Cast F1,LL[bVar"b'8"]),
17190                                         LW(1,1)),
17191                                      TP[Mop(Not,
17192                                             EQ(Dest
17193                                                  ("VFPExtension",
17194                                                   CTy"VFPExtension",
17195                                                   qVar"state"),
17196                                                LC("NoVFP",
17197                                                   CTy"VFPExtension"))),
17198                                         LNL cTy,
17199                                         Call
17200                                           ("VFP",CTy"instruction",
17201                                            Call
17202                                              ("vcvt_to_integer",CTy"VFP",
17203                                               TP[bVar"dp_operation",
17204                                                  EQ(Mop(Cast F1,
17205                                                         LL[bVar"b'16"]),
17206                                                     LW(0,1)),
17207                                                  EQ(Mop(Cast F1,
17208                                                         LL[bVar"b'7"]),
17209                                                     LW(1,1)),
17210                                                  CC[Mop(Cast F4,
17211                                                         LL[bVar"b'15",
17212                                                            bVar"b'14",
17213                                                            bVar"b'13",
17214                                                            bVar"b'12"]),
17215                                                     Mop(Cast F1,
17216                                                         LL[bVar"b'22"])],
17217                                                  ITE(bVar"dp_operation",
17218                                                      CC[Var("M",F1),
17219                                                         Var("Vm",F4)],
17220                                                      CC[Var("Vm",F4),
17221                                                         Var("M",F1)])]))])))),
17222                         (Bop(And,bVar"b'23",
17223                              Bop(And,bVar"b'21",
17224                                  Bop(And,bVar"b'20",
17225                                      Bop(And,Mop(Not,bVar"b'6"),
17226                                          Mop(Not,bVar"b'4"))))),
17227                          Let(Var("Vd",F4),
17228                              Mop(Cast F4,
17229                                  LL[bVar"b'15",bVar"b'14",bVar"b'13",
17230                                     bVar"b'12"]),
17231                              Let(Var("D",F1),Mop(Cast F1,LL[bVar"b'22"]),
17232                                  Let(bVar"single_register",
17233                                      EQ(Mop(Cast F1,LL[bVar"b'8"]),
17234                                         LW(0,1)),
17235                                      TP[Bop(In,
17236                                             Dest
17237                                               ("VFPExtension",
17238                                                CTy"VFPExtension",
17239                                                qVar"state"),
17240                                             SL[LC("VFPv3",
17241                                                   CTy"VFPExtension"),
17242                                                LC("VFPv4",
17243                                                   CTy"VFPExtension")]),
17244                                         ITE(Bop(And,
17245                                                 EQ(Mop(Cast F1,
17246                                                        LL[bVar"b'7"]),
17247                                                    LW(0,1)),
17248                                                 EQ(Mop(Cast F1,
17249                                                        LL[bVar"b'5"]),
17250                                                    LW(0,1))),LS"",
17251                                             LS"vmov (imm"),
17252                                         Call
17253                                           ("VFP",CTy"instruction",
17254                                            Call
17255                                              ("vmov_imm",CTy"VFP",
17256                                               TP[bVar"single_register",
17257                                                  ITE(bVar"single_register",
17258                                                      CC[Var("Vd",F4),
17259                                                         Var("D",F1)],
17260                                                      CC[Var("D",F1),
17261                                                         Var("Vd",F4)]),
17262                                                  Call
17263                                                    ("VFPExpandImm",F64,
17264                                                     TP[CC[Mop(Cast F4,
17265                                                               LL[bVar"b'19",
17266                                                                  bVar"b'18",
17267                                                                  bVar"b'17",
17268                                                                  bVar"b'16"]),
17269                                                           Mop(Cast F4,
17270                                                               LL[bVar"b'3",
17271                                                                  bVar"b'2",
17272                                                                  bVar"b'1",
17273                                                                  bVar"b'0"])],
17274                                                        bVar"single_register"])]))])))),
17275                         (Bop(And,Mop(Not,bVar"b'23"),
17276                              Bop(And,Mop(Not,bVar"b'22"),
17277                                  Bop(And,Mop(Not,bVar"b'21"),
17278                                      Bop(And,Mop(Not,bVar"b'8"),bVar"b'4")))),
17279                          Let(Var("Rt",F4),
17280                              Mop(Cast F4,
17281                                  LL[bVar"b'15",bVar"b'14",bVar"b'13",
17282                                     bVar"b'12"]),
17283                              TP[Mop(Not,
17284                                     EQ(Dest
17285                                          ("VFPExtension",
17286                                           CTy"VFPExtension",qVar"state"),
17287                                        LC("NoVFP",CTy"VFPExtension"))),
17288                                 ITE(Bop(And,EQ(Var("Rt",F4),LW(15,4)),
17289                                         Mop(Not,
17290                                             Bop(And,
17291                                                 EQ(Mop(Cast(FTy 2),
17292                                                        LL[bVar"b'6",
17293                                                           bVar"b'5"]),
17294                                                    LW(0,2)),
17295                                                 EQ(Mop(Cast F4,
17296                                                        LL[bVar"b'3",
17297                                                           bVar"b'2",
17298                                                           bVar"b'1",
17299                                                           bVar"b'0"]),
17300                                                    LW(0,4))))),
17301                                     LS"vmov_single",LS""),
17302                                 Call
17303                                   ("VFP",CTy"instruction",
17304                                    Call
17305                                      ("vmov_single",CTy"VFP",
17306                                       TP[EQ(Mop(Cast F1,LL[bVar"b'20"]),
17307                                             LW(1,1)),Var("Rt",F4),
17308                                          CC[Mop(Cast F4,
17309                                                 LL[bVar"b'19",bVar"b'18",
17310                                                    bVar"b'17",bVar"b'16"]),
17311                                             Mop(Cast F1,LL[bVar"b'7"])]]))])),
17312                         (Bop(And,bVar"b'23",
17313                              Bop(And,bVar"b'22",
17314                                  Bop(And,bVar"b'21",
17315                                      Bop(And,Mop(Not,bVar"b'19"),
17316                                          Bop(And,Mop(Not,bVar"b'18"),
17317                                              Bop(And,Mop(Not,bVar"b'17"),
17318                                                  Bop(And,bVar"b'16",
17319                                                      Bop(And,
17320                                                          Mop(Not,
17321                                                              bVar"b'8"),
17322                                                          bVar"b'4")))))))),
17323                          Let(Var("Rt",F4),
17324                              Mop(Cast F4,
17325                                  LL[bVar"b'15",bVar"b'14",bVar"b'13",
17326                                     bVar"b'12"]),
17327                              Let(bVar"GOOD_MATCH",
17328                                  Bop(And,
17329                                      EQ(Mop(Cast(FTy 3),
17330                                             LL[bVar"b'7",bVar"b'6",
17331                                                bVar"b'5"]),LW(0,3)),
17332                                      EQ(Mop(Cast F4,
17333                                             LL[bVar"b'3",bVar"b'2",
17334                                                bVar"b'1",bVar"b'0"]),
17335                                         LW(0,4))),
17336                                  TP[Mop(Not,
17337                                         EQ(Dest
17338                                              ("VFPExtension",
17339                                               CTy"VFPExtension",
17340                                               qVar"state"),
17341                                            LC("NoVFP",CTy"VFPExtension"))),
17342                                     ITE(EQ(Mop(Cast F1,LL[bVar"b'20"]),
17343                                            LW(1,1)),
17344                                         TP[ITE(bVar"GOOD_MATCH",LS"",
17345                                                LS"mrs"),
17346                                            Call
17347                                              ("VFP",CTy"instruction",
17348                                               Call
17349                                                 ("vmrs",CTy"VFP",
17350                                                  Var("Rt",F4)))],
17351                                         TP[ITE(Bop(And,
17352                                                    EQ(Var("Rt",F4),
17353                                                       LW(15,4)),
17354                                                    Mop(Not,
17355                                                        bVar"GOOD_MATCH")),
17356                                                LS"msr",LS""),
17357                                            Call
17358                                              ("VFP",CTy"instruction",
17359                                               Call
17360                                                 ("vmsr",CTy"VFP",
17361                                                  Var("Rt",F4)))])])))],
17362                        TP[LF,LS"",
17363                           Call("Undefined",CTy"instruction",LW(0,32))]),
17364                    TP[LF,LS"",Call("Undefined",CTy"instruction",LW(0,32))])),
17365               (Bop(And,bVar"b'27",
17366                    Bop(And,bVar"b'26",
17367                        Bop(And,bVar"b'11",
17368                            Bop(And,Mop(Not,bVar"b'10"),bVar"b'9")))),
17369                ITB([(Bop(And,Mop(Not,bVar"b'24"),bVar"b'23"),
17370                      Let(Var("imm8",F8),
17371                          Mop(Cast F8,
17372                              LL[bVar"b'7",bVar"b'6",bVar"b'5",bVar"b'4",
17373                                 bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"]),
17374                          Let(Var("Vd",F4),
17375                              Mop(Cast F4,
17376                                  LL[bVar"b'15",bVar"b'14",bVar"b'13",
17377                                     bVar"b'12"]),
17378                              Let(Var("Rn",F4),
17379                                  Mop(Cast F4,
17380                                      LL[bVar"b'19",bVar"b'18",bVar"b'17",
17381                                         bVar"b'16"]),
17382                                  Let(Var("D",F1),
17383                                      Mop(Cast F1,LL[bVar"b'22"]),
17384                                      Let(bVar"single_regs",
17385                                          EQ(Mop(Cast F1,LL[bVar"b'8"]),
17386                                             LW(0,1)),
17387                                          Let(bVar"wback",
17388                                              EQ(Mop(Cast F1,
17389                                                     LL[bVar"b'21"]),
17390                                                 LW(1,1)),
17391                                              Let(TP[Var("d",FTy 5),
17392                                                     nVar"regs"],
17393                                                  ITE(bVar"single_regs",
17394                                                      TP[CC[Var("Vd",F4),
17395                                                            Var("D",F1)],
17396                                                         Mop(Cast nTy,
17397                                                             Var("imm8",F8))],
17398                                                      TP[CC[Var("D",F1),
17399                                                            Var("Vd",F4)],
17400                                                         Bop(Div,
17401                                                             Mop(Cast nTy,
17402                                                                 Var("imm8",
17403                                                                     F8)),
17404                                                             LN 2)]),
17405                                                  TP[Mop(Not,
17406                                                         EQ(Dest
17407                                                              ("VFPExtension",
17408                                                               CTy"VFPExtension",
17409                                                               qVar"state"),
17410                                                            LC("NoVFP",
17411                                                               CTy"VFPExtension"))),
17412                                                     ITE(Bop(Or,
17413                                                             EQ(nVar"regs",
17414                                                                LN 0),
17415                                                             Bop(Or,
17416                                                                 Bop(Gt,
17417                                                                     Bop(Add,
17418                                                                         Mop(Cast
17419                                                                               nTy,
17420                                                                             Var("d",
17421                                                                                 FTy 5)),
17422                                                                         nVar"regs"),
17423                                                                     LN 32),
17424                                                                 Bop(Or,
17425                                                                     Bop(And,
17426                                                                         bVar"wback",
17427                                                                         EQ(Var("Rn",
17428                                                                                F4),
17429                                                                            LW(15,
17430                                                                               4))),
17431                                                                     Bop(And,
17432                                                                         Mop(Not,
17433                                                                             bVar"single_regs"),
17434                                                                         Bop(Or,
17435                                                                             Bop(Gt,
17436                                                                                 nVar"regs",
17437                                                                                 LN
17438                                                                                  16),
17439                                                                             Bop(Bit,
17440                                                                                 Var("imm8",
17441                                                                                     F8),
17442                                                                                 LN
17443                                                                                  0)))))),
17444                                                         LS"vpush/vpop",
17445                                                         LS""),
17446                                                     Call
17447                                                       ("VFP",
17448                                                        CTy"instruction",
17449                                                        ITE(EQ(Mop(Cast F1,
17450                                                                   LL[bVar"b'20"]),
17451                                                               LW(1,1)),
17452                                                            Call
17453                                                              ("vldm",
17454                                                               CTy"VFP",
17455                                                               TP[bVar"single_regs",
17456                                                                  LT,
17457                                                                  bVar"wback",
17458                                                                  Var("d",
17459                                                                      FTy 5),
17460                                                                  Var("Rn",
17461                                                                      F4),
17462                                                                  Var("imm8",
17463                                                                      F8)]),
17464                                                            Call
17465                                                              ("vstm",
17466                                                               CTy"VFP",
17467                                                               TP[bVar"single_regs",
17468                                                                  LT,
17469                                                                  bVar"wback",
17470                                                                  Var("d",
17471                                                                      FTy 5),
17472                                                                  Var("Rn",
17473                                                                      F4),
17474                                                                  Var("imm8",
17475                                                                      F8)])))])))))))),
17476                     (Bop(And,bVar"b'24",
17477                          Bop(And,Mop(Not,bVar"b'23"),bVar"b'21")),
17478                      Let(Var("imm8",F8),
17479                          Mop(Cast F8,
17480                              LL[bVar"b'7",bVar"b'6",bVar"b'5",bVar"b'4",
17481                                 bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"]),
17482                          Let(Var("Vd",F4),
17483                              Mop(Cast F4,
17484                                  LL[bVar"b'15",bVar"b'14",bVar"b'13",
17485                                     bVar"b'12"]),
17486                              Let(Var("Rn",F4),
17487                                  Mop(Cast F4,
17488                                      LL[bVar"b'19",bVar"b'18",bVar"b'17",
17489                                         bVar"b'16"]),
17490                                  Let(Var("D",F1),
17491                                      Mop(Cast F1,LL[bVar"b'22"]),
17492                                      Let(bVar"single_regs",
17493                                          EQ(Mop(Cast F1,LL[bVar"b'8"]),
17494                                             LW(0,1)),
17495                                          Let(TP[Var("d",FTy 5),nVar"regs"],
17496                                              ITE(bVar"single_regs",
17497                                                  TP[CC[Var("Vd",F4),
17498                                                        Var("D",F1)],
17499                                                     Mop(Cast nTy,
17500                                                         Var("imm8",F8))],
17501                                                  TP[CC[Var("D",F1),
17502                                                        Var("Vd",F4)],
17503                                                     Bop(Div,
17504                                                         Mop(Cast nTy,
17505                                                             Var("imm8",F8)),
17506                                                         LN 2)]),
17507                                              TP[Mop(Not,
17508                                                     EQ(Dest
17509                                                          ("VFPExtension",
17510                                                           CTy"VFPExtension",
17511                                                           qVar"state"),
17512                                                        LC("NoVFP",
17513                                                           CTy"VFPExtension"))),
17514                                                 ITE(Bop(Or,
17515                                                         EQ(nVar"regs",
17516                                                            LN 0),
17517                                                         Bop(Or,
17518                                                             Bop(Gt,
17519                                                                 Bop(Add,
17520                                                                     Mop(Cast
17521                                                                           nTy,
17522                                                                         Var("d",
17523                                                                             FTy 5)),
17524                                                                     nVar"regs"),
17525                                                                 LN 32),
17526                                                             Bop(Or,
17527                                                                 EQ(Var("Rn",
17528                                                                        F4),
17529                                                                    LW(15,
17530                                                                       4)),
17531                                                                 Bop(And,
17532                                                                     Mop(Not,
17533                                                                         bVar"single_regs"),
17534                                                                     Bop(Or,
17535                                                                         Bop(Gt,
17536                                                                             nVar"regs",
17537                                                                             LN
17538                                                                              16),
17539                                                                         Bop(Bit,
17540                                                                             Var("imm8",
17541                                                                                 F8),
17542                                                                             LN
17543                                                                              0)))))),
17544                                                     LS"vpush/vpop",LS""),
17545                                                 Call
17546                                                   ("VFP",
17547                                                    CTy"instruction",
17548                                                    ITE(EQ(Mop(Cast F1,
17549                                                               LL[bVar"b'20"]),
17550                                                           LW(1,1)),
17551                                                        Call
17552                                                          ("vldm",
17553                                                           CTy"VFP",
17554                                                           TP[bVar"single_regs",
17555                                                              LF,LT,
17556                                                              Var("d",
17557                                                                  FTy 5),
17558                                                              Var("Rn",F4),
17559                                                              Var("imm8",
17560                                                                  F8)]),
17561                                                        Call
17562                                                          ("vstm",
17563                                                           CTy"VFP",
17564                                                           TP[bVar"single_regs",
17565                                                              LF,LT,
17566                                                              Var("d",
17567                                                                  FTy 5),
17568                                                              Var("Rn",F4),
17569                                                              Var("imm8",
17570                                                                  F8)])))]))))))),
17571                     (Bop(And,bVar"b'24",Mop(Not,bVar"b'21")),
17572                      Let(Var("Vd",F4),
17573                          Mop(Cast F4,
17574                              LL[bVar"b'15",bVar"b'14",bVar"b'13",
17575                                 bVar"b'12"]),
17576                          Let(Var("D",F1),Mop(Cast F1,LL[bVar"b'22"]),
17577                              Let(bVar"single_reg",
17578                                  EQ(Mop(Cast F1,LL[bVar"b'8"]),LW(0,1)),
17579                                  Let(TP[bVar"args1",Var("args2",FTy 5),
17580                                         Var("args3",F4),Var("args4",F32)],
17581                                      TP[EQ(Mop(Cast F1,LL[bVar"b'23"]),
17582                                            LW(1,1)),
17583                                         ITE(bVar"single_reg",
17584                                             CC[Var("Vd",F4),Var("D",F1)],
17585                                             CC[Var("D",F1),Var("Vd",F4)]),
17586                                         Mop(Cast F4,
17587                                             LL[bVar"b'19",bVar"b'18",
17588                                                bVar"b'17",bVar"b'16"]),
17589                                         Mop(Cast F32,
17590                                             CC[Mop(Cast F8,
17591                                                    LL[bVar"b'7",
17592                                                       bVar"b'6",
17593                                                       bVar"b'5",
17594                                                       bVar"b'4",
17595                                                       bVar"b'3",
17596                                                       bVar"b'2",
17597                                                       bVar"b'1",bVar"b'0"]),
17598                                                LW(0,2)])],
17599                                      TP[Mop(Not,
17600                                             EQ(Dest
17601                                                  ("VFPExtension",
17602                                                   CTy"VFPExtension",
17603                                                   qVar"state"),
17604                                                LC("NoVFP",
17605                                                   CTy"VFPExtension"))),
17606                                         LNL cTy,
17607                                         Call
17608                                           ("VFP",CTy"instruction",
17609                                            ITE(EQ(Mop(Cast F1,
17610                                                       LL[bVar"b'20"]),
17611                                                   LW(1,1)),
17612                                                Call
17613                                                  ("vldr",CTy"VFP",
17614                                                   TP[bVar"single_reg",
17615                                                      bVar"args1",
17616                                                      Var("args2",FTy 5),
17617                                                      Var("args3",F4),
17618                                                      Var("args4",F32)]),
17619                                                Call
17620                                                  ("vstr",CTy"VFP",
17621                                                   TP[bVar"single_reg",
17622                                                      bVar"args1",
17623                                                      Var("args2",FTy 5),
17624                                                      Var("args3",F4),
17625                                                      Var("args4",F32)])))]))))),
17626                     (Bop(And,Mop(Not,bVar"b'24"),
17627                          Bop(And,Mop(Not,bVar"b'23"),
17628                              Bop(And,bVar"b'22",
17629                                  Bop(And,Mop(Not,bVar"b'21"),
17630                                      Bop(And,Mop(Not,bVar"b'8"),
17631                                          Bop(And,Mop(Not,bVar"b'7"),
17632                                              Bop(And,Mop(Not,bVar"b'6"),
17633                                                  bVar"b'4"))))))),
17634                      Let(Var("Rt",F4),
17635                          Mop(Cast F4,
17636                              LL[bVar"b'15",bVar"b'14",bVar"b'13",
17637                                 bVar"b'12"]),
17638                          Let(Var("Rt2",F4),
17639                              Mop(Cast F4,
17640                                  LL[bVar"b'19",bVar"b'18",bVar"b'17",
17641                                     bVar"b'16"]),
17642                              Let(Var("m",FTy 5),
17643                                  CC[Mop(Cast F4,
17644                                         LL[bVar"b'3",bVar"b'2",bVar"b'1",
17645                                            bVar"b'0"]),
17646                                     Mop(Cast F1,LL[bVar"b'5"])],
17647                                  Let(bVar"to_arm_registers",
17648                                      EQ(Mop(Cast F1,LL[bVar"b'20"]),
17649                                         LW(1,1)),
17650                                      TP[Mop(Not,
17651                                             EQ(Dest
17652                                                  ("VFPExtension",
17653                                                   CTy"VFPExtension",
17654                                                   qVar"state"),
17655                                                LC("NoVFP",
17656                                                   CTy"VFPExtension"))),
17657                                         ITE(Bop(Or,
17658                                                 EQ(Var("Rt",F4),LW(15,4)),
17659                                                 Bop(Or,
17660                                                     EQ(Var("Rt2",F4),
17661                                                        LW(15,4)),
17662                                                     Bop(Or,
17663                                                         EQ(Var("m",FTy 5),
17664                                                            LW(31,5)),
17665                                                         Bop(And,
17666                                                             bVar"to_arm_registers",
17667                                                             EQ(Var("Rt",
17668                                                                    F4),
17669                                                                Var("Rt2",
17670                                                                    F4)))))),
17671                                             LS"vmov_two_singles",LS""),
17672                                         Call
17673                                           ("VFP",CTy"instruction",
17674                                            Call
17675                                              ("vmov_two_singles",
17676                                               CTy"VFP",
17677                                               TP[bVar"to_arm_registers",
17678                                                  Var("Rt",F4),
17679                                                  Var("Rt2",F4),
17680                                                  Var("m",FTy 5)]))]))))),
17681                     (Bop(And,Mop(Not,bVar"b'24"),
17682                          Bop(And,Mop(Not,bVar"b'23"),
17683                              Bop(And,bVar"b'22",
17684                                  Bop(And,Mop(Not,bVar"b'21"),
17685                                      Bop(And,bVar"b'8",
17686                                          Bop(And,Mop(Not,bVar"b'7"),
17687                                              Bop(And,Mop(Not,bVar"b'6"),
17688                                                  bVar"b'4"))))))),
17689                      Let(Var("Rt",F4),
17690                          Mop(Cast F4,
17691                              LL[bVar"b'15",bVar"b'14",bVar"b'13",
17692                                 bVar"b'12"]),
17693                          Let(Var("Rt2",F4),
17694                              Mop(Cast F4,
17695                                  LL[bVar"b'19",bVar"b'18",bVar"b'17",
17696                                     bVar"b'16"]),
17697                              Let(bVar"to_arm_registers",
17698                                  EQ(Mop(Cast F1,LL[bVar"b'20"]),LW(1,1)),
17699                                  TP[Mop(Not,
17700                                         EQ(Dest
17701                                              ("VFPExtension",
17702                                               CTy"VFPExtension",
17703                                               qVar"state"),
17704                                            LC("NoVFP",CTy"VFPExtension"))),
17705                                     ITE(Bop(Or,EQ(Var("Rt",F4),LW(15,4)),
17706                                             Bop(Or,
17707                                                 EQ(Var("Rt2",F4),LW(15,4)),
17708                                                 Bop(And,
17709                                                     bVar"to_arm_registers",
17710                                                     EQ(Var("Rt",F4),
17711                                                        Var("Rt2",F4))))),
17712                                         LS"vmov_double",LS""),
17713                                     Call
17714                                       ("VFP",CTy"instruction",
17715                                        Call
17716                                          ("vmov_double",CTy"VFP",
17717                                           TP[bVar"to_arm_registers",
17718                                              Var("Rt",F4),Var("Rt2",F4),
17719                                              CC[Mop(Cast F1,LL[bVar"b'5"]),
17720                                                 Mop(Cast F4,
17721                                                     LL[bVar"b'3",
17722                                                        bVar"b'2",
17723                                                        bVar"b'1",
17724                                                        bVar"b'0"])]]))]))))],
17725                    TP[LF,LS"",Call("Undefined",CTy"instruction",LW(0,32))]))],
17726              TP[LF,LS"",Call("Undefined",CTy"instruction",LW(0,32))]))))
17727;
17728val DecodeARM_def = Def
17729  ("DecodeARM",Var("w",F32),
17730   Close
17731     (qVar"state",
17732      Let(Var("mc",CTy"MachineCode"),
17733          Call("ARM",CTy"MachineCode",Var("w",F32)),
17734          Let(Var("cond",F4),EX(Var("w",F32),LN 31,LN 28,F4),
17735              ITE(EQ(Var("cond",F4),LW(15,4)),
17736                  Let(TP[bVar"b'27",bVar"b'26",bVar"b'25",bVar"b'24",
17737                         bVar"b'23",bVar"b'22",bVar"b'21",bVar"b'20",
17738                         bVar"b'19",bVar"b'18",bVar"b'17",bVar"b'16",
17739                         bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",
17740                         bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8",
17741                         bVar"b'7",bVar"b'6",bVar"b'5",bVar"b'4",
17742                         bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"],
17743                      BL(28,EX(Var("w",F32),LN 27,LN 0,FTy 28)),
17744                      ITB([(bVar"b'26",
17745                            ITB([(bVar"b'21",
17746                                  ITB([(Bop(And,Mop(Not,bVar"b'27"),
17747                                            Bop(And,Mop(Not,bVar"b'25"),
17748                                                Bop(And,bVar"b'24",
17749                                                    Bop(And,
17750                                                        Mop(Not,bVar"b'23"),
17751                                                        Bop(And,
17752                                                            bVar"b'22",
17753                                                            Bop(And,
17754                                                                bVar"b'20",
17755                                                                Mop(Not,
17756                                                                    bVar"b'7"))))))),
17757                                        ITB([(Bop(And,Mop(Not,bVar"b'6"),
17758                                                  Bop(And,
17759                                                      Mop(Not,bVar"b'5"),
17760                                                      bVar"b'4")),
17761                                              Let(TP[bVar"v",qVar"s"],
17762                                                  Apply
17763                                                    (Call
17764                                                       ("Do",
17765                                                        ATy(qTy,
17766                                                            PTy(bTy,qTy)),
17767                                                        TP[LW(14,4),
17768                                                           Bop(In,
17769                                                               Dest
17770                                                                 ("Architecture",
17771                                                                  CTy"Architecture",
17772                                                                  qVar"state"),
17773                                                               SL[LC("ARMv6K",
17774                                                                     CTy"Architecture"),
17775                                                                  LC("ARMv7_A",
17776                                                                     CTy"Architecture"),
17777                                                                  LC("ARMv7_R",
17778                                                                     CTy"Architecture")])]),
17779                                                     qVar"state"),
17780                                                  ITE(bVar"v",
17781                                                      TP[Const
17782                                                           ("ClearExclusive",
17783                                                            CTy"instruction"),
17784                                                         ITE(Mop(Not,
17785                                                                 Bop(And,
17786                                                                     EQ(Mop(Cast
17787                                                                              F1,
17788                                                                            LL[bVar"b'19"]),
17789                                                                        LW(1,
17790                                                                           1)),
17791                                                                     Bop(And,
17792                                                                         EQ(Mop(Cast
17793                                                                                  (FTy 3),
17794                                                                                LL[bVar"b'18",
17795                                                                                   bVar"b'17",
17796                                                                                   bVar"b'16"]),
17797                                                                            LW(7,
17798                                                                               3)),
17799                                                                         Bop(And,
17800                                                                             EQ(Mop(Cast
17801                                                                                      F4,
17802                                                                                    LL[bVar"b'15",
17803                                                                                       bVar"b'14",
17804                                                                                       bVar"b'13",
17805                                                                                       bVar"b'12"]),
17806                                                                                LW(15,
17807                                                                                   4)),
17808                                                                             Bop(And,
17809                                                                                 EQ(Mop(Cast
17810                                                                                          F4,
17811                                                                                        LL[bVar"b'11",
17812                                                                                           bVar"b'10",
17813                                                                                           bVar"b'9",
17814                                                                                           bVar"b'8"]),
17815                                                                                    LW(0,
17816                                                                                       4)),
17817                                                                                 EQ(Mop(Cast
17818                                                                                          F4,
17819                                                                                        LL[bVar"b'3",
17820                                                                                           bVar"b'2",
17821                                                                                           bVar"b'1",
17822                                                                                           bVar"b'0"]),
17823                                                                                    LW(15,
17824                                                                                       4))))))),
17825                                                             Apply
17826                                                               (Call
17827                                                                  ("DECODE_UNPREDICTABLE",
17828                                                                   ATy(qTy,
17829                                                                       qTy),
17830                                                                   TP[Var("mc",
17831                                                                          CTy"MachineCode"),
17832                                                                      LS
17833                                                                       "CLREX"]),
17834                                                                qVar"s"),
17835                                                             qVar"s")],
17836                                                      TP[Apply
17837                                                           (Call
17838                                                              ("Skip",
17839                                                               ATy(qTy,
17840                                                                   CTy"instruction"),
17841                                                               LU),qVar"s"),
17842                                                         qVar"s"]))),
17843                                             (Bop(And,bVar"b'19",
17844                                                  Bop(And,bVar"b'18",
17845                                                      Bop(And,bVar"b'17",
17846                                                          Bop(And,
17847                                                              bVar"b'16",
17848                                                              Bop(And,
17849                                                                  bVar"b'15",
17850                                                                  Bop(And,
17851                                                                      bVar"b'14",
17852                                                                      Bop(And,
17853                                                                          bVar"b'13",
17854                                                                          Bop(And,
17855                                                                              bVar"b'12",
17856                                                                              Bop(And,
17857                                                                                  Mop(Not,
17858                                                                                      bVar"b'11"),
17859                                                                                  Bop(And,
17860                                                                                      Mop(Not,
17861                                                                                          bVar"b'10"),
17862                                                                                      Bop(And,
17863                                                                                          Mop(Not,
17864                                                                                              bVar"b'9"),
17865                                                                                          Bop(And,
17866                                                                                              Mop(Not,
17867                                                                                                  bVar"b'8"),
17868                                                                                              Bop(And,
17869                                                                                                  bVar"b'6",
17870                                                                                                  Bop(And,
17871                                                                                                      Mop(Not,
17872                                                                                                          bVar"b'5"),
17873                                                                                                      Mop(Not,
17874                                                                                                          bVar"b'4"))))))))))))))),
17875                                              Let(TP[bVar"v",qVar"s"],
17876                                                  Apply
17877                                                    (Call
17878                                                       ("Do",
17879                                                        ATy(qTy,
17880                                                            PTy(bTy,qTy)),
17881                                                        TP[LW(14,4),
17882                                                           Bop(Ge,
17883                                                               Apply
17884                                                                 (Call
17885                                                                    ("ArchVersion",
17886                                                                     ATy(qTy,
17887                                                                         nTy),
17888                                                                     LU),
17889                                                                  qVar"state"),
17890                                                               LN 7)]),
17891                                                     qVar"state"),
17892                                                  TP[ITE(bVar"v",
17893                                                         Call
17894                                                           ("Hint",
17895                                                            CTy"instruction",
17896                                                            Call
17897                                                              ("DataSynchronizationBarrier",
17898                                                               CTy"Hint",
17899                                                               Mop(Cast F4,
17900                                                                   LL[bVar"b'3",
17901                                                                      bVar"b'2",
17902                                                                      bVar"b'1",
17903                                                                      bVar"b'0"]))),
17904                                                         Apply
17905                                                           (Call
17906                                                              ("Skip",
17907                                                               ATy(qTy,
17908                                                                   CTy"instruction"),
17909                                                               LU),qVar"s")),
17910                                                     qVar"s"])),
17911                                             (Bop(And,bVar"b'6",
17912                                                  Bop(And,
17913                                                      Mop(Not,bVar"b'5"),
17914                                                      bVar"b'4")),
17915                                              Let(TP[bVar"v",qVar"s"],
17916                                                  Apply
17917                                                    (Call
17918                                                       ("Do",
17919                                                        ATy(qTy,
17920                                                            PTy(bTy,qTy)),
17921                                                        TP[LW(14,4),
17922                                                           Bop(Ge,
17923                                                               Apply
17924                                                                 (Call
17925                                                                    ("ArchVersion",
17926                                                                     ATy(qTy,
17927                                                                         nTy),
17928                                                                     LU),
17929                                                                  qVar"state"),
17930                                                               LN 7)]),
17931                                                     qVar"state"),
17932                                                  ITE(bVar"v",
17933                                                      TP[Call
17934                                                           ("Hint",
17935                                                            CTy"instruction",
17936                                                            Call
17937                                                              ("DataMemoryBarrier",
17938                                                               CTy"Hint",
17939                                                               Mop(Cast F4,
17940                                                                   LL[bVar"b'3",
17941                                                                      bVar"b'2",
17942                                                                      bVar"b'1",
17943                                                                      bVar"b'0"]))),
17944                                                         ITE(Mop(Not,
17945                                                                 Bop(And,
17946                                                                     EQ(Mop(Cast
17947                                                                              F4,
17948                                                                            LL[bVar"b'19",
17949                                                                               bVar"b'18",
17950                                                                               bVar"b'17",
17951                                                                               bVar"b'16"]),
17952                                                                        LW(15,
17953                                                                           4)),
17954                                                                     Bop(And,
17955                                                                         EQ(Mop(Cast
17956                                                                                  F4,
17957                                                                                LL[bVar"b'15",
17958                                                                                   bVar"b'14",
17959                                                                                   bVar"b'13",
17960                                                                                   bVar"b'12"]),
17961                                                                            LW(15,
17962                                                                               4)),
17963                                                                         EQ(Mop(Cast
17964                                                                                  F4,
17965                                                                                LL[bVar"b'11",
17966                                                                                   bVar"b'10",
17967                                                                                   bVar"b'9",
17968                                                                                   bVar"b'8"]),
17969                                                                            LW(0,
17970                                                                               4))))),
17971                                                             Apply
17972                                                               (Call
17973                                                                  ("DECODE_UNPREDICTABLE",
17974                                                                   ATy(qTy,
17975                                                                       qTy),
17976                                                                   TP[Var("mc",
17977                                                                          CTy"MachineCode"),
17978                                                                      LS
17979                                                                       "DMB"]),
17980                                                                qVar"s"),
17981                                                             qVar"s")],
17982                                                      TP[Apply
17983                                                           (Call
17984                                                              ("Skip",
17985                                                               ATy(qTy,
17986                                                                   CTy"instruction"),
17987                                                               LU),qVar"s"),
17988                                                         qVar"s"]))),
17989                                             (Bop(And,bVar"b'6",
17990                                                  Bop(And,bVar"b'5",
17991                                                      Mop(Not,bVar"b'4"))),
17992                                              Let(TP[bVar"v",qVar"s"],
17993                                                  Apply
17994                                                    (Call
17995                                                       ("Do",
17996                                                        ATy(qTy,
17997                                                            PTy(bTy,qTy)),
17998                                                        TP[LW(14,4),
17999                                                           Bop(Ge,
18000                                                               Apply
18001                                                                 (Call
18002                                                                    ("ArchVersion",
18003                                                                     ATy(qTy,
18004                                                                         nTy),
18005                                                                     LU),
18006                                                                  qVar"state"),
18007                                                               LN 7)]),
18008                                                     qVar"state"),
18009                                                  ITE(bVar"v",
18010                                                      TP[Call
18011                                                           ("Hint",
18012                                                            CTy"instruction",
18013                                                            Call
18014                                                              ("InstructionSynchronizationBarrier",
18015                                                               CTy"Hint",
18016                                                               Mop(Cast F4,
18017                                                                   LL[bVar"b'3",
18018                                                                      bVar"b'2",
18019                                                                      bVar"b'1",
18020                                                                      bVar"b'0"]))),
18021                                                         ITE(Mop(Not,
18022                                                                 Bop(And,
18023                                                                     EQ(Mop(Cast
18024                                                                              F4,
18025                                                                            LL[bVar"b'19",
18026                                                                               bVar"b'18",
18027                                                                               bVar"b'17",
18028                                                                               bVar"b'16"]),
18029                                                                        LW(15,
18030                                                                           4)),
18031                                                                     Bop(And,
18032                                                                         EQ(Mop(Cast
18033                                                                                  F4,
18034                                                                                LL[bVar"b'15",
18035                                                                                   bVar"b'14",
18036                                                                                   bVar"b'13",
18037                                                                                   bVar"b'12"]),
18038                                                                            LW(15,
18039                                                                               4)),
18040                                                                         EQ(Mop(Cast
18041                                                                                  F4,
18042                                                                                LL[bVar"b'11",
18043                                                                                   bVar"b'10",
18044                                                                                   bVar"b'9",
18045                                                                                   bVar"b'8"]),
18046                                                                            LW(0,
18047                                                                               4))))),
18048                                                             Apply
18049                                                               (Call
18050                                                                  ("DECODE_UNPREDICTABLE",
18051                                                                   ATy(qTy,
18052                                                                       qTy),
18053                                                                   TP[Var("mc",
18054                                                                          CTy"MachineCode"),
18055                                                                      LS
18056                                                                       "ISB"]),
18057                                                                qVar"s"),
18058                                                             qVar"s")],
18059                                                      TP[Apply
18060                                                           (Call
18061                                                              ("Skip",
18062                                                               ATy(qTy,
18063                                                                   CTy"instruction"),
18064                                                               LU),qVar"s"),
18065                                                         qVar"s"]))),
18066                                             (Bop(Ge,
18067                                                  Apply
18068                                                    (Call
18069                                                       ("ArchVersion",
18070                                                        ATy(qTy,nTy),LU),
18071                                                     qVar"state"),LN 5),
18072                                              TP[Call
18073                                                   ("Undefined",
18074                                                    CTy"instruction",
18075                                                    LW(0,32)),qVar"state"])],
18076                                            TP[LX(CTy"instruction"),
18077                                               Apply
18078                                                 (Call
18079                                                    ("DECODE_UNPREDICTABLE",
18080                                                     ATy(qTy,qTy),
18081                                                     TP[Var("mc",
18082                                                            CTy"MachineCode"),
18083                                                        LS""]),qVar"state")])),
18084                                       (Bop(Ge,
18085                                            Apply
18086                                              (Call
18087                                                 ("ArchVersion",
18088                                                  ATy(qTy,nTy),LU),
18089                                               qVar"state"),LN 5),
18090                                        TP[Call
18091                                             ("Undefined",
18092                                              CTy"instruction",LW(0,32)),
18093                                           qVar"state"])],
18094                                      TP[LX(CTy"instruction"),
18095                                         Apply
18096                                           (Call
18097                                              ("DECODE_UNPREDICTABLE",
18098                                               ATy(qTy,qTy),
18099                                               TP[Var("mc",
18100                                                      CTy"MachineCode"),
18101                                                  LS""]),qVar"state")])),
18102                                 (Bop(And,Mop(Not,bVar"b'27"),bVar"b'20"),
18103                                  ITB([(Bop(And,Mop(Not,bVar"b'25"),
18104                                            Bop(And,Mop(Not,bVar"b'24"),
18105                                                bVar"b'22")),
18106                                        Let(TP[bVar"v",qVar"s"],
18107                                            Apply
18108                                              (Call
18109                                                 ("Do",
18110                                                  ATy(qTy,PTy(bTy,qTy)),
18111                                                  TP[LW(14,4),
18112                                                     Bop(Ge,
18113                                                         Apply
18114                                                           (Call
18115                                                              ("ArchVersion",
18116                                                               ATy(qTy,nTy),
18117                                                               LU),
18118                                                            qVar"state"),
18119                                                         LN 7)]),
18120                                               qVar"state"),
18121                                            ITE(bVar"v",
18122                                                TP[Call
18123                                                     ("Hint",
18124                                                      CTy"instruction",
18125                                                      Call
18126                                                        ("PreloadInstruction",
18127                                                         CTy"Hint",
18128                                                         TP[EQ(Mop(Cast F1,
18129                                                                   LL[bVar"b'23"]),
18130                                                               LW(1,1)),
18131                                                            Mop(Cast F4,
18132                                                                LL[bVar"b'19",
18133                                                                   bVar"b'18",
18134                                                                   bVar"b'17",
18135                                                                   bVar"b'16"]),
18136                                                            Call
18137                                                              ("immediate_form1",
18138                                                               CTy"offset1",
18139                                                               Mop(Cast
18140                                                                     F32,
18141                                                                   Mop(Cast
18142                                                                         (FTy 12),
18143                                                                       LL[bVar"b'11",
18144                                                                          bVar"b'10",
18145                                                                          bVar"b'9",
18146                                                                          bVar"b'8",
18147                                                                          bVar"b'7",
18148                                                                          bVar"b'6",
18149                                                                          bVar"b'5",
18150                                                                          bVar"b'4",
18151                                                                          bVar"b'3",
18152                                                                          bVar"b'2",
18153                                                                          bVar"b'1",
18154                                                                          bVar"b'0"])))])),
18155                                                   ITE(Mop(Not,
18156                                                           EQ(Mop(Cast F4,
18157                                                                  LL[bVar"b'15",
18158                                                                     bVar"b'14",
18159                                                                     bVar"b'13",
18160                                                                     bVar"b'12"]),
18161                                                              LW(15,4))),
18162                                                       Apply
18163                                                         (Call
18164                                                            ("DECODE_UNPREDICTABLE",
18165                                                             ATy(qTy,qTy),
18166                                                             TP[Var("mc",
18167                                                                    CTy"MachineCode"),
18168                                                                LS"PLI"]),
18169                                                          qVar"s"),qVar"s")],
18170                                                TP[Apply
18171                                                     (Call
18172                                                        ("Skip",
18173                                                         ATy(qTy,
18174                                                             CTy"instruction"),
18175                                                         LU),qVar"s"),
18176                                                   qVar"s"]))),
18177                                       (Bop(And,bVar"b'25",
18178                                            Bop(And,Mop(Not,bVar"b'24"),
18179                                                Bop(And,bVar"b'22",
18180                                                    Mop(Not,bVar"b'4")))),
18181                                        Let(Var("Rm",F4),
18182                                            Mop(Cast F4,
18183                                                LL[bVar"b'3",bVar"b'2",
18184                                                   bVar"b'1",bVar"b'0"]),
18185                                            Let(TP[bVar"v",qVar"s"],
18186                                                Apply
18187                                                  (Call
18188                                                     ("Do",
18189                                                      ATy(qTy,PTy(bTy,qTy)),
18190                                                      TP[LW(14,4),
18191                                                         Bop(Ge,
18192                                                             Apply
18193                                                               (Call
18194                                                                  ("ArchVersion",
18195                                                                   ATy(qTy,
18196                                                                       nTy),
18197                                                                   LU),
18198                                                                qVar"state"),
18199                                                             LN 7)]),
18200                                                   qVar"state"),
18201                                                ITE(bVar"v",
18202                                                    TP[Let(TP[Var("shift_t",
18203                                                                  CTy"SRType"),
18204                                                              nVar"shift_n"],
18205                                                           Call
18206                                                             ("DecodeImmShift",
18207                                                              PTy(CTy"SRType",
18208                                                                  nTy),
18209                                                              TP[Mop(Cast
18210                                                                       (FTy 2),
18211                                                                     LL[bVar"b'6",
18212                                                                        bVar"b'5"]),
18213                                                                 Mop(Cast
18214                                                                       (FTy 5),
18215                                                                     LL[bVar"b'11",
18216                                                                        bVar"b'10",
18217                                                                        bVar"b'9",
18218                                                                        bVar"b'8",
18219                                                                        bVar"b'7"])]),
18220                                                           Call
18221                                                             ("Hint",
18222                                                              CTy"instruction",
18223                                                              Call
18224                                                                ("PreloadInstruction",
18225                                                                 CTy"Hint",
18226                                                                 TP[EQ(Mop(Cast
18227                                                                             F1,
18228                                                                           LL[bVar"b'23"]),
18229                                                                       LW(1,
18230                                                                          1)),
18231                                                                    Mop(Cast
18232                                                                          F4,
18233                                                                        LL[bVar"b'19",
18234                                                                           bVar"b'18",
18235                                                                           bVar"b'17",
18236                                                                           bVar"b'16"]),
18237                                                                    Call
18238                                                                      ("register_form1",
18239                                                                       CTy"offset1",
18240                                                                       TP[Var("Rm",
18241                                                                              F4),
18242                                                                          Var("shift_t",
18243                                                                              CTy"SRType"),
18244                                                                          nVar"shift_n"])]))),
18245                                                       ITE(Bop(Or,
18246                                                               EQ(Var("Rm",
18247                                                                      F4),
18248                                                                  LW(15,4)),
18249                                                               Mop(Not,
18250                                                                   EQ(Mop(Cast
18251                                                                            F4,
18252                                                                          LL[bVar"b'15",
18253                                                                             bVar"b'14",
18254                                                                             bVar"b'13",
18255                                                                             bVar"b'12"]),
18256                                                                      LW(15,
18257                                                                         4)))),
18258                                                           Apply
18259                                                             (Call
18260                                                                ("DECODE_UNPREDICTABLE",
18261                                                                 ATy(qTy,
18262                                                                     qTy),
18263                                                                 TP[Var("mc",
18264                                                                        CTy"MachineCode"),
18265                                                                    LS
18266                                                                     "PreloadInstruction (register)"]),
18267                                                              qVar"s"),
18268                                                           qVar"s")],
18269                                                    TP[Apply
18270                                                         (Call
18271                                                            ("Skip",
18272                                                             ATy(qTy,
18273                                                                 CTy"instruction"),
18274                                                             LU),qVar"s"),
18275                                                       qVar"s"])))),
18276                                       (Bop(And,Mop(Not,bVar"b'25"),
18277                                            Bop(And,bVar"b'24",
18278                                                Bop(And,bVar"b'19",
18279                                                    Bop(And,bVar"b'18",
18280                                                        Bop(And,
18281                                                            bVar"b'17",
18282                                                            bVar"b'16"))))),
18283                                        Let(TP[bVar"v",qVar"s"],
18284                                            Apply
18285                                              (Call
18286                                                 ("Do",
18287                                                  ATy(qTy,PTy(bTy,qTy)),
18288                                                  TP[LW(14,4),
18289                                                     Apply
18290                                                       (Call
18291                                                          ("HaveDSPSupport",
18292                                                           ATy(qTy,bTy),LU),
18293                                                        qVar"state")]),
18294                                               qVar"state"),
18295                                            ITE(bVar"v",
18296                                                TP[Call
18297                                                     ("Hint",
18298                                                      CTy"instruction",
18299                                                      Call
18300                                                        ("PreloadDataLiteral",
18301                                                         CTy"Hint",
18302                                                         TP[EQ(Mop(Cast F1,
18303                                                                   LL[bVar"b'23"]),
18304                                                               LW(1,1)),
18305                                                            Mop(Cast F32,
18306                                                                Mop(Cast
18307                                                                      (FTy 12),
18308                                                                    LL[bVar"b'11",
18309                                                                       bVar"b'10",
18310                                                                       bVar"b'9",
18311                                                                       bVar"b'8",
18312                                                                       bVar"b'7",
18313                                                                       bVar"b'6",
18314                                                                       bVar"b'5",
18315                                                                       bVar"b'4",
18316                                                                       bVar"b'3",
18317                                                                       bVar"b'2",
18318                                                                       bVar"b'1",
18319                                                                       bVar"b'0"]))])),
18320                                                   ITE(Mop(Not,
18321                                                           Bop(And,
18322                                                               EQ(Mop(Cast
18323                                                                        F1,
18324                                                                      LL[bVar"b'22"]),
18325                                                                  LW(1,1)),
18326                                                               EQ(Mop(Cast
18327                                                                        F4,
18328                                                                      LL[bVar"b'15",
18329                                                                         bVar"b'14",
18330                                                                         bVar"b'13",
18331                                                                         bVar"b'12"]),
18332                                                                  LW(15,4)))),
18333                                                       Apply
18334                                                         (Call
18335                                                            ("DECODE_UNPREDICTABLE",
18336                                                             ATy(qTy,qTy),
18337                                                             TP[Var("mc",
18338                                                                    CTy"MachineCode"),
18339                                                                LS"PLD"]),
18340                                                          qVar"s"),qVar"s")],
18341                                                TP[Apply
18342                                                     (Call
18343                                                        ("Skip",
18344                                                         ATy(qTy,
18345                                                             CTy"instruction"),
18346                                                         LU),qVar"s"),
18347                                                   qVar"s"]))),
18348                                       (Bop(And,Mop(Not,bVar"b'25"),
18349                                            bVar"b'24"),
18350                                        Let(Var("R",F1),
18351                                            Mop(Cast F1,LL[bVar"b'22"]),
18352                                            Let(TP[bVar"v",qVar"s"],
18353                                                Apply
18354                                                  (Call
18355                                                     ("Do",
18356                                                      ATy(qTy,PTy(bTy,qTy)),
18357                                                      TP[LW(14,4),
18358                                                         Bop(Or,
18359                                                             Bop(And,
18360                                                                 EQ(Var("R",
18361                                                                        F1),
18362                                                                    LW(1,1)),
18363                                                                 Bop(And,
18364                                                                     Bop(Ge,
18365                                                                         Apply
18366                                                                           (Call
18367                                                                              ("ArchVersion",
18368                                                                               ATy(qTy,
18369                                                                                   nTy),
18370                                                                               LU),
18371                                                                            qVar"state"),
18372                                                                         LN
18373                                                                          7),
18374                                                                     Bop(In,
18375                                                                         LC("Extension_Multiprocessing",
18376                                                                            CTy"Extensions"),
18377                                                                         Dest
18378                                                                           ("Extensions",
18379                                                                            STy(CTy"Extensions"),
18380                                                                            qVar"state")))),
18381                                                             Bop(And,
18382                                                                 EQ(Var("R",
18383                                                                        F1),
18384                                                                    LW(0,1)),
18385                                                                 Apply
18386                                                                   (Call
18387                                                                      ("HaveDSPSupport",
18388                                                                       ATy(qTy,
18389                                                                           bTy),
18390                                                                       LU),
18391                                                                    qVar"state")))]),
18392                                                   qVar"state"),
18393                                                ITE(bVar"v",
18394                                                    TP[Call
18395                                                         ("Hint",
18396                                                          CTy"instruction",
18397                                                          Call
18398                                                            ("PreloadData",
18399                                                             CTy"Hint",
18400                                                             TP[EQ(Mop(Cast
18401                                                                         F1,
18402                                                                       LL[bVar"b'23"]),
18403                                                                   LW(1,1)),
18404                                                                EQ(Var("R",
18405                                                                       F1),
18406                                                                   LW(0,1)),
18407                                                                Mop(Cast
18408                                                                      F4,
18409                                                                    LL[bVar"b'19",
18410                                                                       bVar"b'18",
18411                                                                       bVar"b'17",
18412                                                                       bVar"b'16"]),
18413                                                                Call
18414                                                                  ("immediate_form1",
18415                                                                   CTy"offset1",
18416                                                                   Mop(Cast
18417                                                                         F32,
18418                                                                       Mop(Cast
18419                                                                             (FTy 12),
18420                                                                           LL[bVar"b'11",
18421                                                                              bVar"b'10",
18422                                                                              bVar"b'9",
18423                                                                              bVar"b'8",
18424                                                                              bVar"b'7",
18425                                                                              bVar"b'6",
18426                                                                              bVar"b'5",
18427                                                                              bVar"b'4",
18428                                                                              bVar"b'3",
18429                                                                              bVar"b'2",
18430                                                                              bVar"b'1",
18431                                                                              bVar"b'0"])))])),
18432                                                       ITE(Mop(Not,
18433                                                               EQ(Mop(Cast
18434                                                                        F4,
18435                                                                      LL[bVar"b'15",
18436                                                                         bVar"b'14",
18437                                                                         bVar"b'13",
18438                                                                         bVar"b'12"]),
18439                                                                  LW(15,4))),
18440                                                           Apply
18441                                                             (Call
18442                                                                ("DECODE_UNPREDICTABLE",
18443                                                                 ATy(qTy,
18444                                                                     qTy),
18445                                                                 TP[Var("mc",
18446                                                                        CTy"MachineCode"),
18447                                                                    LS
18448                                                                     "PLD"]),
18449                                                              qVar"s"),
18450                                                           qVar"s")],
18451                                                    TP[Apply
18452                                                         (Call
18453                                                            ("Skip",
18454                                                             ATy(qTy,
18455                                                                 CTy"instruction"),
18456                                                             LU),qVar"s"),
18457                                                       qVar"s"])))),
18458                                       (Bop(And,bVar"b'25",
18459                                            Bop(And,bVar"b'24",
18460                                                Mop(Not,bVar"b'4"))),
18461                                        Let(Var("Rm",F4),
18462                                            Mop(Cast F4,
18463                                                LL[bVar"b'3",bVar"b'2",
18464                                                   bVar"b'1",bVar"b'0"]),
18465                                            Let(Var("Rn",F4),
18466                                                Mop(Cast F4,
18467                                                    LL[bVar"b'19",
18468                                                       bVar"b'18",
18469                                                       bVar"b'17",
18470                                                       bVar"b'16"]),
18471                                                Let(Var("R",F1),
18472                                                    Mop(Cast F1,
18473                                                        LL[bVar"b'22"]),
18474                                                    Let(TP[bVar"v",qVar"s"],
18475                                                        Apply
18476                                                          (Call
18477                                                             ("Do",
18478                                                              ATy(qTy,
18479                                                                  PTy(bTy,
18480                                                                      qTy)),
18481                                                              TP[LW(14,4),
18482                                                                 Bop(Or,
18483                                                                     Bop(And,
18484                                                                         EQ(Var("R",
18485                                                                                F1),
18486                                                                            LW(1,
18487                                                                               1)),
18488                                                                         Bop(And,
18489                                                                             Bop(Ge,
18490                                                                                 Apply
18491                                                                                   (Call
18492                                                                                      ("ArchVersion",
18493                                                                                       ATy(qTy,
18494                                                                                           nTy),
18495                                                                                       LU),
18496                                                                                    qVar"state"),
18497                                                                                 LN
18498                                                                                  7),
18499                                                                             Bop(In,
18500                                                                                 LC("Extension_Multiprocessing",
18501                                                                                    CTy"Extensions"),
18502                                                                                 Dest
18503                                                                                   ("Extensions",
18504                                                                                    STy(CTy"Extensions"),
18505                                                                                    qVar"state")))),
18506                                                                     Bop(And,
18507                                                                         EQ(Var("R",
18508                                                                                F1),
18509                                                                            LW(0,
18510                                                                               1)),
18511                                                                         Apply
18512                                                                           (Call
18513                                                                              ("HaveDSPSupport",
18514                                                                               ATy(qTy,
18515                                                                                   bTy),
18516                                                                               LU),
18517                                                                            qVar"state")))]),
18518                                                           qVar"state"),
18519                                                        ITE(bVar"v",
18520                                                            Let(bVar"is_pldw",
18521                                                                EQ(Var("R",
18522                                                                       F1),
18523                                                                   LW(0,1)),
18524                                                                TP[Let(TP[Var("shift_t",
18525                                                                              CTy"SRType"),
18526                                                                          nVar"shift_n"],
18527                                                                       Call
18528                                                                         ("DecodeImmShift",
18529                                                                          PTy(CTy"SRType",
18530                                                                              nTy),
18531                                                                          TP[Mop(Cast
18532                                                                                   (FTy 2),
18533                                                                                 LL[bVar"b'6",
18534                                                                                    bVar"b'5"]),
18535                                                                             Mop(Cast
18536                                                                                   (FTy 5),
18537                                                                                 LL[bVar"b'11",
18538                                                                                    bVar"b'10",
18539                                                                                    bVar"b'9",
18540                                                                                    bVar"b'8",
18541                                                                                    bVar"b'7"])]),
18542                                                                       Call
18543                                                                         ("Hint",
18544                                                                          CTy"instruction",
18545                                                                          Call
18546                                                                            ("PreloadData",
18547                                                                             CTy"Hint",
18548                                                                             TP[EQ(Mop(Cast
18549                                                                                         F1,
18550                                                                                       LL[bVar"b'23"]),
18551                                                                                   LW(1,
18552                                                                                      1)),
18553                                                                                bVar"is_pldw",
18554                                                                                Var("Rn",
18555                                                                                    F4),
18556                                                                                Call
18557                                                                                  ("register_form1",
18558                                                                                   CTy"offset1",
18559                                                                                   TP[Var("Rm",
18560                                                                                          F4),
18561                                                                                      Var("shift_t",
18562                                                                                          CTy"SRType"),
18563                                                                                      nVar"shift_n"])]))),
18564                                                                   ITE(Bop(Or,
18565                                                                           EQ(Var("Rm",
18566                                                                                  F4),
18567                                                                              LW(15,
18568                                                                                 4)),
18569                                                                           Bop(Or,
18570                                                                               Bop(And,
18571                                                                                   EQ(Var("Rn",
18572                                                                                          F4),
18573                                                                                      LW(15,
18574                                                                                         4)),
18575                                                                                   bVar"is_pldw"),
18576                                                                               Mop(Not,
18577                                                                                   EQ(Mop(Cast
18578                                                                                            F4,
18579                                                                                          LL[bVar"b'15",
18580                                                                                             bVar"b'14",
18581                                                                                             bVar"b'13",
18582                                                                                             bVar"b'12"]),
18583                                                                                      LW(15,
18584                                                                                         4))))),
18585                                                                       Apply
18586                                                                         (Call
18587                                                                            ("DECODE_UNPREDICTABLE",
18588                                                                             ATy(qTy,
18589                                                                                 qTy),
18590                                                                             TP[Var("mc",
18591                                                                                    CTy"MachineCode"),
18592                                                                                LS
18593                                                                                 "PreloadData (register)"]),
18594                                                                          qVar"s"),
18595                                                                       qVar"s")]),
18596                                                            TP[Apply
18597                                                                 (Call
18598                                                                    ("Skip",
18599                                                                     ATy(qTy,
18600                                                                         CTy"instruction"),
18601                                                                     LU),
18602                                                                  qVar"s"),
18603                                                               qVar"s"])))))),
18604                                       (Bop(Ge,
18605                                            Apply
18606                                              (Call
18607                                                 ("ArchVersion",
18608                                                  ATy(qTy,nTy),LU),
18609                                               qVar"state"),LN 5),
18610                                        TP[Call
18611                                             ("Undefined",
18612                                              CTy"instruction",LW(0,32)),
18613                                           qVar"state"])],
18614                                      TP[LX(CTy"instruction"),
18615                                         Apply
18616                                           (Call
18617                                              ("DECODE_UNPREDICTABLE",
18618                                               ATy(qTy,qTy),
18619                                               TP[Var("mc",
18620                                                      CTy"MachineCode"),
18621                                                  LS""]),qVar"state")])),
18622                                 (Bop(Ge,
18623                                      Apply
18624                                        (Call
18625                                           ("ArchVersion",ATy(qTy,nTy),LU),
18626                                         qVar"state"),LN 5),
18627                                  TP[Call
18628                                       ("Undefined",CTy"instruction",
18629                                        LW(0,32)),qVar"state"])],
18630                                TP[LX(CTy"instruction"),
18631                                   Apply
18632                                     (Call
18633                                        ("DECODE_UNPREDICTABLE",
18634                                         ATy(qTy,qTy),
18635                                         TP[Var("mc",CTy"MachineCode"),
18636                                            LS""]),qVar"state")])),
18637                           (Bop(And,Mop(Not,bVar"b'27"),
18638                                Bop(And,Mop(Not,bVar"b'25"),
18639                                    Bop(And,bVar"b'24",
18640                                        Bop(And,Mop(Not,bVar"b'23"),
18641                                            Bop(And,Mop(Not,bVar"b'22"),
18642                                                Bop(And,
18643                                                    Mop(Not,bVar"b'21"),
18644                                                    Bop(And,
18645                                                        Mop(Not,bVar"b'20"),
18646                                                        Bop(And,
18647                                                            bVar"b'16",
18648                                                            Bop(And,
18649                                                                Mop(Not,
18650                                                                    bVar"b'7"),
18651                                                                Bop(And,
18652                                                                    Mop(Not,
18653                                                                        bVar"b'6"),
18654                                                                    Bop(And,
18655                                                                        Mop(Not,
18656                                                                            bVar"b'5"),
18657                                                                        Mop(Not,
18658                                                                            bVar"b'4")))))))))))),
18659                            Let(TP[bVar"v",qVar"s"],
18660                                Apply
18661                                  (Call
18662                                     ("Do",ATy(qTy,PTy(bTy,qTy)),
18663                                      TP[LW(14,4),
18664                                         Bop(Ge,
18665                                             Apply
18666                                               (Call
18667                                                  ("ArchVersion",
18668                                                   ATy(qTy,nTy),LU),
18669                                                qVar"state"),LN 6)]),
18670                                   qVar"state"),
18671                                ITE(bVar"v",
18672                                    TP[Call
18673                                         ("System",CTy"instruction",
18674                                          Call
18675                                            ("Setend",CTy"System",
18676                                             EQ(Mop(Cast F1,LL[bVar"b'9"]),
18677                                                LW(1,1)))),
18678                                       ITE(Mop(Not,
18679                                               Bop(And,
18680                                                   EQ(Mop(Cast(FTy 3),
18681                                                          LL[bVar"b'19",
18682                                                             bVar"b'18",
18683                                                             bVar"b'17"]),
18684                                                      LW(0,3)),
18685                                                   Bop(And,
18686                                                       EQ(Mop(Cast(FTy 6),
18687                                                              LL[bVar"b'15",
18688                                                                 bVar"b'14",
18689                                                                 bVar"b'13",
18690                                                                 bVar"b'12",
18691                                                                 bVar"b'11",
18692                                                                 bVar"b'10"]),
18693                                                          LW(0,6)),
18694                                                       Bop(And,
18695                                                           EQ(Mop(Cast F1,
18696                                                                  LL[bVar"b'8"]),
18697                                                              LW(0,1)),
18698                                                           EQ(Mop(Cast F4,
18699                                                                  LL[bVar"b'3",
18700                                                                     bVar"b'2",
18701                                                                     bVar"b'1",
18702                                                                     bVar"b'0"]),
18703                                                              LW(0,4)))))),
18704                                           Apply
18705                                             (Call
18706                                                ("DECODE_UNPREDICTABLE",
18707                                                 ATy(qTy,qTy),
18708                                                 TP[Var("mc",
18709                                                        CTy"MachineCode"),
18710                                                    LS"SETEND"]),qVar"s"),
18711                                           qVar"s")],
18712                                    TP[Apply
18713                                         (Call
18714                                            ("Skip",
18715                                             ATy(qTy,CTy"instruction"),LU),
18716                                          qVar"s"),qVar"s"]))),
18717                           (Bop(And,Mop(Not,bVar"b'27"),
18718                                Bop(And,Mop(Not,bVar"b'25"),
18719                                    Bop(And,bVar"b'24",
18720                                        Bop(And,Mop(Not,bVar"b'23"),
18721                                            Bop(And,Mop(Not,bVar"b'22"),
18722                                                Bop(And,
18723                                                    Mop(Not,bVar"b'21"),
18724                                                    Bop(And,
18725                                                        Mop(Not,bVar"b'20"),
18726                                                        Bop(And,
18727                                                            Mop(Not,
18728                                                                bVar"b'16"),
18729                                                            Mop(Not,
18730                                                                bVar"b'5"))))))))),
18731                            Let(Var("mode",FTy 5),
18732                                Mop(Cast(FTy 5),
18733                                    LL[bVar"b'4",bVar"b'3",bVar"b'2",
18734                                       bVar"b'1",bVar"b'0"]),
18735                                Let(Var("F",F1),
18736                                    Mop(Cast F1,LL[bVar"b'6"]),
18737                                    Let(Var("I",F1),
18738                                        Mop(Cast F1,LL[bVar"b'7"]),
18739                                        Let(Var("A",F1),
18740                                            Mop(Cast F1,LL[bVar"b'8"]),
18741                                            Let(Var("M",F1),
18742                                                Mop(Cast F1,LL[bVar"b'17"]),
18743                                                Let(Var("imod",FTy 2),
18744                                                    Mop(Cast(FTy 2),
18745                                                        LL[bVar"b'19",
18746                                                           bVar"b'18"]),
18747                                                    Let(TP[bVar"v",qVar"s"],
18748                                                        Apply
18749                                                          (Call
18750                                                             ("Do",
18751                                                              ATy(qTy,
18752                                                                  PTy(bTy,
18753                                                                      qTy)),
18754                                                              TP[LW(14,4),
18755                                                                 Bop(Ge,
18756                                                                     Apply
18757                                                                       (Call
18758                                                                          ("ArchVersion",
18759                                                                           ATy(qTy,
18760                                                                               nTy),
18761                                                                           LU),
18762                                                                        qVar"state"),
18763                                                                     LN 6)]),
18764                                                           qVar"state"),
18765                                                        ITE(bVar"v",
18766                                                            TP[Call
18767                                                                 ("System",
18768                                                                  CTy"instruction",
18769                                                                  Call
18770                                                                    ("ChangeProcessorState",
18771                                                                     CTy"System",
18772                                                                     TP[EQ(Var("imod",
18773                                                                               FTy 2),
18774                                                                           LW(2,
18775                                                                              2)),
18776                                                                        EQ(Var("imod",
18777                                                                               FTy 2),
18778                                                                           LW(3,
18779                                                                              2)),
18780                                                                        EQ(Var("A",
18781                                                                               F1),
18782                                                                           LW(1,
18783                                                                              1)),
18784                                                                        EQ(Var("I",
18785                                                                               F1),
18786                                                                           LW(1,
18787                                                                              1)),
18788                                                                        EQ(Var("F",
18789                                                                               F1),
18790                                                                           LW(1,
18791                                                                              1)),
18792                                                                        ITE(EQ(Var("M",
18793                                                                                   F1),
18794                                                                               LW(1,
18795                                                                                  1)),
18796                                                                            Mop(Some,
18797                                                                                Var("mode",
18798                                                                                    FTy 5)),
18799                                                                            LO(FTy 5))])),
18800                                                               ITE(Bop(Or,
18801                                                                       Bop(And,
18802                                                                           Mop(Not,
18803                                                                               EQ(Var("mode",
18804                                                                                      FTy 5),
18805                                                                                  LW(0,
18806                                                                                     5))),
18807                                                                           EQ(Var("M",
18808                                                                                  F1),
18809                                                                              LW(0,
18810                                                                                 1))),
18811                                                                       Bop(Or,
18812                                                                           EQ(Bop(Bit,
18813                                                                                  Var("imod",
18814                                                                                      FTy 2),
18815                                                                                  LN
18816                                                                                   1),
18817                                                                              EQ(CC[Var("A",
18818                                                                                        F1),
18819                                                                                    Var("I",
18820                                                                                        F1),
18821                                                                                    Var("F",
18822                                                                                        F1)],
18823                                                                                 LW(0,
18824                                                                                    3))),
18825                                                                           Bop(Or,
18826                                                                               Bop(And,
18827                                                                                   EQ(Var("imod",
18828                                                                                          FTy 2),
18829                                                                                      LW(0,
18830                                                                                         2)),
18831                                                                                   EQ(Var("M",
18832                                                                                          F1),
18833                                                                                      LW(0,
18834                                                                                         1))),
18835                                                                               Bop(Or,
18836                                                                                   EQ(Var("imod",
18837                                                                                          FTy 2),
18838                                                                                      LW(1,
18839                                                                                         2)),
18840                                                                                   Mop(Not,
18841                                                                                       EQ(Mop(Cast
18842                                                                                                (FTy 7),
18843                                                                                              LL[bVar"b'15",
18844                                                                                                 bVar"b'14",
18845                                                                                                 bVar"b'13",
18846                                                                                                 bVar"b'12",
18847                                                                                                 bVar"b'11",
18848                                                                                                 bVar"b'10",
18849                                                                                                 bVar"b'9"]),
18850                                                                                          LW(0,
18851                                                                                             7))))))),
18852                                                                   Apply
18853                                                                     (Call
18854                                                                        ("DECODE_UNPREDICTABLE",
18855                                                                         ATy(qTy,
18856                                                                             qTy),
18857                                                                         TP[Var("mc",
18858                                                                                CTy"MachineCode"),
18859                                                                            LS
18860                                                                             "ChangeProcessorState"]),
18861                                                                      qVar"s"),
18862                                                                   qVar"s")],
18863                                                            TP[Apply
18864                                                                 (Call
18865                                                                    ("Skip",
18866                                                                     ATy(qTy,
18867                                                                         CTy"instruction"),
18868                                                                     LU),
18869                                                                  qVar"s"),
18870                                                               qVar"s"]))))))))),
18871                           (Bop(And,bVar"b'27",
18872                                Bop(And,Mop(Not,bVar"b'25"),
18873                                    Bop(And,bVar"b'22",Mop(Not,bVar"b'20")))),
18874                            Let(Var("U",F1),Mop(Cast F1,LL[bVar"b'23"]),
18875                                Let(TP[bVar"v",qVar"s"],
18876                                    Apply
18877                                      (Call
18878                                         ("Do",ATy(qTy,PTy(bTy,qTy)),
18879                                          TP[LW(14,4),
18880                                             Bop(Ge,
18881                                                 Apply
18882                                                   (Call
18883                                                      ("ArchVersion",
18884                                                       ATy(qTy,nTy),LU),
18885                                                    qVar"state"),LN 6)]),
18886                                       qVar"state"),
18887                                    ITE(bVar"v",
18888                                        TP[Call
18889                                             ("System",CTy"instruction",
18890                                              Call
18891                                                ("StoreReturnState",
18892                                                 CTy"System",
18893                                                 TP[EQ(Var("U",F1),LW(1,1)),
18894                                                    EQ(Mop(Cast F1,
18895                                                           LL[bVar"b'24"]),
18896                                                       Var("U",F1)),
18897                                                    EQ(Mop(Cast F1,
18898                                                           LL[bVar"b'21"]),
18899                                                       LW(1,1)),
18900                                                    Mop(Cast(FTy 5),
18901                                                        LL[bVar"b'4",
18902                                                           bVar"b'3",
18903                                                           bVar"b'2",
18904                                                           bVar"b'1",
18905                                                           bVar"b'0"])])),
18906                                           ITE(Mop(Not,
18907                                                   Bop(And,
18908                                                       EQ(Mop(Cast F4,
18909                                                              LL[bVar"b'19",
18910                                                                 bVar"b'18",
18911                                                                 bVar"b'17",
18912                                                                 bVar"b'16"]),
18913                                                          LW(13,4)),
18914                                                       Bop(And,
18915                                                           EQ(Mop(Cast F4,
18916                                                                  LL[bVar"b'15",
18917                                                                     bVar"b'14",
18918                                                                     bVar"b'13",
18919                                                                     bVar"b'12"]),
18920                                                              LW(0,4)),
18921                                                           Bop(And,
18922                                                               EQ(Mop(Cast
18923                                                                        F4,
18924                                                                      LL[bVar"b'11",
18925                                                                         bVar"b'10",
18926                                                                         bVar"b'9",
18927                                                                         bVar"b'8"]),
18928                                                                  LW(5,4)),
18929                                                               EQ(Mop(Cast
18930                                                                        (FTy 3),
18931                                                                      LL[bVar"b'7",
18932                                                                         bVar"b'6",
18933                                                                         bVar"b'5"]),
18934                                                                  LW(0,3)))))),
18935                                               Apply
18936                                                 (Call
18937                                                    ("DECODE_UNPREDICTABLE",
18938                                                     ATy(qTy,qTy),
18939                                                     TP[Var("mc",
18940                                                            CTy"MachineCode"),
18941                                                        LS"SRS"]),qVar"s"),
18942                                               qVar"s")],
18943                                        TP[Apply
18944                                             (Call
18945                                                ("Skip",
18946                                                 ATy(qTy,CTy"instruction"),
18947                                                 LU),qVar"s"),qVar"s"])))),
18948                           (Bop(And,bVar"b'27",
18949                                Bop(And,Mop(Not,bVar"b'25"),
18950                                    Bop(And,Mop(Not,bVar"b'22"),bVar"b'20"))),
18951                            Let(Var("Rn",F4),
18952                                Mop(Cast F4,
18953                                    LL[bVar"b'19",bVar"b'18",bVar"b'17",
18954                                       bVar"b'16"]),
18955                                Let(Var("U",F1),
18956                                    Mop(Cast F1,LL[bVar"b'23"]),
18957                                    Let(TP[bVar"v",qVar"s"],
18958                                        Apply
18959                                          (Call
18960                                             ("Do",ATy(qTy,PTy(bTy,qTy)),
18961                                              TP[LW(14,4),
18962                                                 Bop(Ge,
18963                                                     Apply
18964                                                       (Call
18965                                                          ("ArchVersion",
18966                                                           ATy(qTy,nTy),LU),
18967                                                        qVar"state"),LN 6)]),
18968                                           qVar"state"),
18969                                        ITE(bVar"v",
18970                                            TP[Call
18971                                                 ("System",
18972                                                  CTy"instruction",
18973                                                  Call
18974                                                    ("ReturnFromException",
18975                                                     CTy"System",
18976                                                     TP[EQ(Var("U",F1),
18977                                                           LW(1,1)),
18978                                                        EQ(Mop(Cast F1,
18979                                                               LL[bVar"b'24"]),
18980                                                           Var("U",F1)),
18981                                                        EQ(Mop(Cast F1,
18982                                                               LL[bVar"b'21"]),
18983                                                           LW(1,1)),
18984                                                        Var("Rn",F4)])),
18985                                               ITE(Bop(Or,
18986                                                       EQ(Var("Rn",F4),
18987                                                          LW(15,4)),
18988                                                       Mop(Not,
18989                                                           Bop(And,
18990                                                               EQ(Mop(Cast
18991                                                                        F4,
18992                                                                      LL[bVar"b'15",
18993                                                                         bVar"b'14",
18994                                                                         bVar"b'13",
18995                                                                         bVar"b'12"]),
18996                                                                  LW(0,4)),
18997                                                               Bop(And,
18998                                                                   EQ(Mop(Cast
18999                                                                            F4,
19000                                                                          LL[bVar"b'11",
19001                                                                             bVar"b'10",
19002                                                                             bVar"b'9",
19003                                                                             bVar"b'8"]),
19004                                                                      LW(10,
19005                                                                         4)),
19006                                                                   EQ(Mop(Cast
19007                                                                            F8,
19008                                                                          LL[bVar"b'7",
19009                                                                             bVar"b'6",
19010                                                                             bVar"b'5",
19011                                                                             bVar"b'4",
19012                                                                             bVar"b'3",
19013                                                                             bVar"b'2",
19014                                                                             bVar"b'1",
19015                                                                             bVar"b'0"]),
19016                                                                      LW(0,
19017                                                                         8)))))),
19018                                                   Apply
19019                                                     (Call
19020                                                        ("DECODE_UNPREDICTABLE",
19021                                                         ATy(qTy,qTy),
19022                                                         TP[Var("mc",
19023                                                                CTy"MachineCode"),
19024                                                            LS
19025                                                             "ReturnFromException"]),
19026                                                      qVar"s"),qVar"s")],
19027                                            TP[Apply
19028                                                 (Call
19029                                                    ("Skip",
19030                                                     ATy(qTy,
19031                                                         CTy"instruction"),
19032                                                     LU),qVar"s"),qVar"s"]))))),
19033                           (Bop(And,bVar"b'27",bVar"b'25"),
19034                            Let(TP[bVar"v",qVar"s"],
19035                                Apply
19036                                  (Call
19037                                     ("Do",ATy(qTy,PTy(bTy,qTy)),
19038                                      TP[LW(14,4),
19039                                         Bop(Ge,
19040                                             Apply
19041                                               (Call
19042                                                  ("ArchVersion",
19043                                                   ATy(qTy,nTy),LU),
19044                                                qVar"state"),LN 5)]),
19045                                   qVar"state"),
19046                                TP[ITE(bVar"v",
19047                                       Call
19048                                         ("Branch",CTy"instruction",
19049                                          Call
19050                                            ("BranchLinkExchangeImmediate",
19051                                             CTy"Branch",
19052                                             TP[LC("InstrSet_Thumb",
19053                                                   CTy"InstrSet"),
19054                                                Mop(SE F32,
19055                                                    CC[Mop(Cast(FTy 24),
19056                                                           LL[bVar"b'23",
19057                                                              bVar"b'22",
19058                                                              bVar"b'21",
19059                                                              bVar"b'20",
19060                                                              bVar"b'19",
19061                                                              bVar"b'18",
19062                                                              bVar"b'17",
19063                                                              bVar"b'16",
19064                                                              bVar"b'15",
19065                                                              bVar"b'14",
19066                                                              bVar"b'13",
19067                                                              bVar"b'12",
19068                                                              bVar"b'11",
19069                                                              bVar"b'10",
19070                                                              bVar"b'9",
19071                                                              bVar"b'8",
19072                                                              bVar"b'7",
19073                                                              bVar"b'6",
19074                                                              bVar"b'5",
19075                                                              bVar"b'4",
19076                                                              bVar"b'3",
19077                                                              bVar"b'2",
19078                                                              bVar"b'1",
19079                                                              bVar"b'0"]),
19080                                                       Mop(Cast F1,
19081                                                           LL[bVar"b'24"]),
19082                                                       LW(0,1)])])),
19083                                       Apply
19084                                         (Call
19085                                            ("Skip",
19086                                             ATy(qTy,CTy"instruction"),LU),
19087                                          qVar"s")),qVar"s"])),
19088                           (Bop(Ge,
19089                                Apply
19090                                  (Call("ArchVersion",ATy(qTy,nTy),LU),
19091                                   qVar"state"),LN 5),
19092                            TP[Call("Undefined",CTy"instruction",LW(0,32)),
19093                               qVar"state"])],
19094                          TP[LX(CTy"instruction"),
19095                             Apply
19096                               (Call
19097                                  ("DECODE_UNPREDICTABLE",ATy(qTy,qTy),
19098                                   TP[Var("mc",CTy"MachineCode"),LS""]),
19099                                qVar"state")])),
19100                  Let(TP[bVar"b'27",bVar"b'26",bVar"b'25",bVar"b'24",
19101                         bVar"b'23",bVar"b'22",bVar"b'21",bVar"b'20",
19102                         bVar"b'19",bVar"b'18",bVar"b'17",bVar"b'16",
19103                         bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",
19104                         bVar"b'11",bVar"b'10",bVar"b'9",bVar"b'8",
19105                         bVar"b'7",bVar"b'6",bVar"b'5",bVar"b'4",
19106                         bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"],
19107                      BL(28,EX(Var("w",F32),LN 27,LN 0,FTy 28)),
19108                      ITB([(bVar"b'26",
19109                            ITB([(Bop(And,Mop(Not,bVar"b'27"),
19110                                      Bop(And,bVar"b'25",
19111                                          Bop(And,bVar"b'24",
19112                                              Bop(And,bVar"b'23",
19113                                                  Bop(And,bVar"b'22",
19114                                                      Bop(And,bVar"b'21",
19115                                                          Bop(And,
19116                                                              bVar"b'20",
19117                                                              Bop(And,
19118                                                                  bVar"b'7",
19119                                                                  Bop(And,
19120                                                                      bVar"b'6",
19121                                                                      Bop(And,
19122                                                                          bVar"b'5",
19123                                                                          bVar"b'4")))))))))),
19124                                  Let(TP[bVar"v",qVar"s"],
19125                                      Let(qVar"s",
19126                                          Rupd
19127                                            ("CurrentCondition",
19128                                             TP[qVar"state",Var("cond",F4)]),
19129                                          TP[Apply
19130                                               (Call
19131                                                  ("ConditionPassed",
19132                                                   ATy(qTy,bTy),LU),
19133                                                qVar"s"),qVar"s"]),
19134                                      TP[ITE(bVar"v",
19135                                             Call
19136                                               ("Undefined",
19137                                                CTy"instruction",
19138                                                Mop(Cast F32,
19139                                                    CC[Mop(Cast(FTy 12),
19140                                                           LL[bVar"b'19",
19141                                                              bVar"b'18",
19142                                                              bVar"b'17",
19143                                                              bVar"b'16",
19144                                                              bVar"b'15",
19145                                                              bVar"b'14",
19146                                                              bVar"b'13",
19147                                                              bVar"b'12",
19148                                                              bVar"b'11",
19149                                                              bVar"b'10",
19150                                                              bVar"b'9",
19151                                                              bVar"b'8"]),
19152                                                       Mop(Cast F4,
19153                                                           LL[bVar"b'3",
19154                                                              bVar"b'2",
19155                                                              bVar"b'1",
19156                                                              bVar"b'0"])])),
19157                                             Const
19158                                               ("NoOperation",
19159                                                CTy"instruction")),qVar"s"])),
19160                                 (Bop(And,Mop(Not,bVar"b'27"),
19161                                      Bop(And,Mop(Not,bVar"b'25"),
19162                                          Bop(And,Mop(Not,bVar"b'24"),
19163                                              Bop(And,bVar"b'21",
19164                                                  Mop(Not,bVar"b'20"))))),
19165                                  Let(Var("Rt",F4),
19166                                      Mop(Cast F4,
19167                                          LL[bVar"b'15",bVar"b'14",
19168                                             bVar"b'13",bVar"b'12"]),
19169                                      Let(Var("Rn",F4),
19170                                          Mop(Cast F4,
19171                                              LL[bVar"b'19",bVar"b'18",
19172                                                 bVar"b'17",bVar"b'16"]),
19173                                          Let(Var("B",F1),
19174                                              Mop(Cast F1,LL[bVar"b'22"]),
19175                                              Let(TP[bVar"v",qVar"s"],
19176                                                  Apply
19177                                                    (Call
19178                                                       ("Do",
19179                                                        ATy(qTy,
19180                                                            PTy(bTy,qTy)),
19181                                                        TP[Var("cond",F4),
19182                                                           LT]),
19183                                                     qVar"state"),
19184                                                  ITE(bVar"v",
19185                                                      TP[Let(bVar"add",
19186                                                             EQ(Mop(Cast
19187                                                                      F1,
19188                                                                    LL[bVar"b'23"]),
19189                                                                LW(1,1)),
19190                                                             Let(Var("m",
19191                                                                     CTy"offset1"),
19192                                                                 Call
19193                                                                   ("immediate_form1",
19194                                                                    CTy"offset1",
19195                                                                    Mop(Cast
19196                                                                          F32,
19197                                                                        Mop(Cast
19198                                                                              (FTy 12),
19199                                                                            LL[bVar"b'11",
19200                                                                               bVar"b'10",
19201                                                                               bVar"b'9",
19202                                                                               bVar"b'8",
19203                                                                               bVar"b'7",
19204                                                                               bVar"b'6",
19205                                                                               bVar"b'5",
19206                                                                               bVar"b'4",
19207                                                                               bVar"b'3",
19208                                                                               bVar"b'2",
19209                                                                               bVar"b'1",
19210                                                                               bVar"b'0"]))),
19211                                                                 ITE(EQ(Var("B",
19212                                                                            F1),
19213                                                                        LW(1,
19214                                                                           1)),
19215                                                                     Call
19216                                                                       ("Store",
19217                                                                        CTy"instruction",
19218                                                                        Call
19219                                                                          ("StoreByteUnprivileged",
19220                                                                           CTy"Store",
19221                                                                           TP[bVar"add",
19222                                                                              LT,
19223                                                                              Var("Rt",
19224                                                                                  F4),
19225                                                                              Var("Rn",
19226                                                                                  F4),
19227                                                                              Var("m",
19228                                                                                  CTy"offset1")])),
19229                                                                     Call
19230                                                                       ("Store",
19231                                                                        CTy"instruction",
19232                                                                        Call
19233                                                                          ("StoreUnprivileged",
19234                                                                           CTy"Store",
19235                                                                           TP[bVar"add",
19236                                                                              LT,
19237                                                                              Var("Rt",
19238                                                                                  F4),
19239                                                                              Var("Rn",
19240                                                                                  F4),
19241                                                                              Var("m",
19242                                                                                  CTy"offset1")]))))),
19243                                                         ITE(Bop(Or,
19244                                                                 Bop(And,
19245                                                                     EQ(Var("B",
19246                                                                            F1),
19247                                                                        LW(1,
19248                                                                           1)),
19249                                                                     EQ(Var("Rt",
19250                                                                            F4),
19251                                                                        LW(15,
19252                                                                           4))),
19253                                                                 Bop(Or,
19254                                                                     EQ(Var("Rn",
19255                                                                            F4),
19256                                                                        LW(15,
19257                                                                           4)),
19258                                                                     EQ(Var("Rn",
19259                                                                            F4),
19260                                                                        Var("Rt",
19261                                                                            F4)))),
19262                                                             Apply
19263                                                               (Call
19264                                                                  ("DECODE_UNPREDICTABLE",
19265                                                                   ATy(qTy,
19266                                                                       qTy),
19267                                                                   TP[Var("mc",
19268                                                                          CTy"MachineCode"),
19269                                                                      LS
19270                                                                       "StoreUnprivileged (immediate)"]),
19271                                                                qVar"s"),
19272                                                             qVar"s")],
19273                                                      TP[Apply
19274                                                           (Call
19275                                                              ("Skip",
19276                                                               ATy(qTy,
19277                                                                   CTy"instruction"),
19278                                                               LU),qVar"s"),
19279                                                         qVar"s"])))))),
19280                                 (Bop(And,Mop(Not,bVar"b'27"),
19281                                      Bop(And,Mop(Not,bVar"b'25"),
19282                                          Mop(Not,bVar"b'20"))),
19283                                  Let(Var("Rt",F4),
19284                                      Mop(Cast F4,
19285                                          LL[bVar"b'15",bVar"b'14",
19286                                             bVar"b'13",bVar"b'12"]),
19287                                      Let(Var("Rn",F4),
19288                                          Mop(Cast F4,
19289                                              LL[bVar"b'19",bVar"b'18",
19290                                                 bVar"b'17",bVar"b'16"]),
19291                                          Let(Var("B",F1),
19292                                              Mop(Cast F1,LL[bVar"b'22"]),
19293                                              Let(Var("P",F1),
19294                                                  Mop(Cast F1,
19295                                                      LL[bVar"b'24"]),
19296                                                  Let(TP[bVar"v",qVar"s"],
19297                                                      Apply
19298                                                        (Call
19299                                                           ("Do",
19300                                                            ATy(qTy,
19301                                                                PTy(bTy,
19302                                                                    qTy)),
19303                                                            TP[Var("cond",
19304                                                                   F4),LT]),
19305                                                         qVar"state"),
19306                                                      ITE(bVar"v",
19307                                                          Let(bVar"wback",
19308                                                              Bop(Or,
19309                                                                  EQ(Var("P",
19310                                                                         F1),
19311                                                                     LW(0,
19312                                                                        1)),
19313                                                                  EQ(Mop(Cast
19314                                                                           F1,
19315                                                                         LL[bVar"b'21"]),
19316                                                                     LW(1,
19317                                                                        1))),
19318                                                              TP[Let(bVar"add",
19319                                                                     EQ(Mop(Cast
19320                                                                              F1,
19321                                                                            LL[bVar"b'23"]),
19322                                                                        LW(1,
19323                                                                           1)),
19324                                                                     Let(bVar"index",
19325                                                                         EQ(Var("P",
19326                                                                                F1),
19327                                                                            LW(1,
19328                                                                               1)),
19329                                                                         Let(Var("m",
19330                                                                                 CTy"offset1"),
19331                                                                             Call
19332                                                                               ("immediate_form1",
19333                                                                                CTy"offset1",
19334                                                                                Mop(Cast
19335                                                                                      F32,
19336                                                                                    Mop(Cast
19337                                                                                          (FTy 12),
19338                                                                                        LL[bVar"b'11",
19339                                                                                           bVar"b'10",
19340                                                                                           bVar"b'9",
19341                                                                                           bVar"b'8",
19342                                                                                           bVar"b'7",
19343                                                                                           bVar"b'6",
19344                                                                                           bVar"b'5",
19345                                                                                           bVar"b'4",
19346                                                                                           bVar"b'3",
19347                                                                                           bVar"b'2",
19348                                                                                           bVar"b'1",
19349                                                                                           bVar"b'0"]))),
19350                                                                             ITE(EQ(Var("B",
19351                                                                                        F1),
19352                                                                                    LW(1,
19353                                                                                       1)),
19354                                                                                 Call
19355                                                                                   ("Store",
19356                                                                                    CTy"instruction",
19357                                                                                    Call
19358                                                                                      ("StoreByte",
19359                                                                                       CTy"Store",
19360                                                                                       TP[bVar"add",
19361                                                                                          bVar"index",
19362                                                                                          bVar"wback",
19363                                                                                          Var("Rt",
19364                                                                                              F4),
19365                                                                                          Var("Rn",
19366                                                                                              F4),
19367                                                                                          Var("m",
19368                                                                                              CTy"offset1")])),
19369                                                                                 Call
19370                                                                                   ("Store",
19371                                                                                    CTy"instruction",
19372                                                                                    Call
19373                                                                                      ("StoreWord",
19374                                                                                       CTy"Store",
19375                                                                                       TP[bVar"add",
19376                                                                                          bVar"index",
19377                                                                                          bVar"wback",
19378                                                                                          Var("Rt",
19379                                                                                              F4),
19380                                                                                          Var("Rn",
19381                                                                                              F4),
19382                                                                                          Var("m",
19383                                                                                              CTy"offset1")])))))),
19384                                                                 ITE(Bop(Or,
19385                                                                         Bop(And,
19386                                                                             EQ(Var("B",
19387                                                                                    F1),
19388                                                                                LW(1,
19389                                                                                   1)),
19390                                                                             EQ(Var("Rt",
19391                                                                                    F4),
19392                                                                                LW(15,
19393                                                                                   4))),
19394                                                                         Bop(And,
19395                                                                             bVar"wback",
19396                                                                             Bop(Or,
19397                                                                                 EQ(Var("Rn",
19398                                                                                        F4),
19399                                                                                    LW(15,
19400                                                                                       4)),
19401                                                                                 EQ(Var("Rn",
19402                                                                                        F4),
19403                                                                                    Var("Rt",
19404                                                                                        F4))))),
19405                                                                     Apply
19406                                                                       (Call
19407                                                                          ("DECODE_UNPREDICTABLE",
19408                                                                           ATy(qTy,
19409                                                                               qTy),
19410                                                                           TP[Var("mc",
19411                                                                                  CTy"MachineCode"),
19412                                                                              LS
19413                                                                               "Store (immediate)"]),
19414                                                                        qVar"s"),
19415                                                                     qVar"s")]),
19416                                                          TP[Apply
19417                                                               (Call
19418                                                                  ("Skip",
19419                                                                   ATy(qTy,
19420                                                                       CTy"instruction"),
19421                                                                   LU),
19422                                                                qVar"s"),
19423                                                             qVar"s"]))))))),
19424                                 (Bop(And,Mop(Not,bVar"b'27"),
19425                                      Bop(And,Mop(Not,bVar"b'25"),
19426                                          Bop(And,Mop(Not,bVar"b'24"),
19427                                              Bop(And,bVar"b'21",
19428                                                  bVar"b'20")))),
19429                                  Let(Var("Rt",F4),
19430                                      Mop(Cast F4,
19431                                          LL[bVar"b'15",bVar"b'14",
19432                                             bVar"b'13",bVar"b'12"]),
19433                                      Let(Var("Rn",F4),
19434                                          Mop(Cast F4,
19435                                              LL[bVar"b'19",bVar"b'18",
19436                                                 bVar"b'17",bVar"b'16"]),
19437                                          Let(TP[bVar"v",qVar"s"],
19438                                              Apply
19439                                                (Call
19440                                                   ("Do",
19441                                                    ATy(qTy,PTy(bTy,qTy)),
19442                                                    TP[Var("cond",F4),LT]),
19443                                                 qVar"state"),
19444                                              ITE(bVar"v",
19445                                                  TP[Let(bVar"add",
19446                                                         EQ(Mop(Cast F1,
19447                                                                LL[bVar"b'23"]),
19448                                                            LW(1,1)),
19449                                                         Let(Var("m",
19450                                                                 CTy"offset1"),
19451                                                             Call
19452                                                               ("immediate_form1",
19453                                                                CTy"offset1",
19454                                                                Mop(Cast
19455                                                                      F32,
19456                                                                    Mop(Cast
19457                                                                          (FTy 12),
19458                                                                        LL[bVar"b'11",
19459                                                                           bVar"b'10",
19460                                                                           bVar"b'9",
19461                                                                           bVar"b'8",
19462                                                                           bVar"b'7",
19463                                                                           bVar"b'6",
19464                                                                           bVar"b'5",
19465                                                                           bVar"b'4",
19466                                                                           bVar"b'3",
19467                                                                           bVar"b'2",
19468                                                                           bVar"b'1",
19469                                                                           bVar"b'0"]))),
19470                                                             ITE(EQ(Mop(Cast
19471                                                                          F1,
19472                                                                        LL[bVar"b'22"]),
19473                                                                    LW(1,1)),
19474                                                                 Call
19475                                                                   ("Load",
19476                                                                    CTy"instruction",
19477                                                                    Call
19478                                                                      ("LoadByteUnprivileged",
19479                                                                       CTy"Load",
19480                                                                       TP[bVar"add",
19481                                                                          LT,
19482                                                                          Var("Rt",
19483                                                                              F4),
19484                                                                          Var("Rn",
19485                                                                              F4),
19486                                                                          Var("m",
19487                                                                              CTy"offset1")])),
19488                                                                 Call
19489                                                                   ("Load",
19490                                                                    CTy"instruction",
19491                                                                    Call
19492                                                                      ("LoadUnprivileged",
19493                                                                       CTy"Load",
19494                                                                       TP[bVar"add",
19495                                                                          LT,
19496                                                                          Var("Rt",
19497                                                                              F4),
19498                                                                          Var("Rn",
19499                                                                              F4),
19500                                                                          Var("m",
19501                                                                              CTy"offset1")]))))),
19502                                                     ITE(Bop(Or,
19503                                                             EQ(Var("Rt",
19504                                                                    F4),
19505                                                                LW(15,4)),
19506                                                             Bop(Or,
19507                                                                 EQ(Var("Rn",
19508                                                                        F4),
19509                                                                    LW(15,
19510                                                                       4)),
19511                                                                 EQ(Var("Rn",
19512                                                                        F4),
19513                                                                    Var("Rt",
19514                                                                        F4)))),
19515                                                         Apply
19516                                                           (Call
19517                                                              ("DECODE_UNPREDICTABLE",
19518                                                               ATy(qTy,qTy),
19519                                                               TP[Var("mc",
19520                                                                      CTy"MachineCode"),
19521                                                                  LS
19522                                                                   "LoadUnprivileged (immediate)"]),
19523                                                            qVar"s"),
19524                                                         qVar"s")],
19525                                                  TP[Apply
19526                                                       (Call
19527                                                          ("Skip",
19528                                                           ATy(qTy,
19529                                                               CTy"instruction"),
19530                                                           LU),qVar"s"),
19531                                                     qVar"s"]))))),
19532                                 (Bop(And,Mop(Not,bVar"b'27"),
19533                                      Bop(And,Mop(Not,bVar"b'25"),
19534                                          Bop(And,bVar"b'20",
19535                                              Bop(And,bVar"b'19",
19536                                                  Bop(And,bVar"b'18",
19537                                                      Bop(And,bVar"b'17",
19538                                                          bVar"b'16")))))),
19539                                  Let(Var("Rt",F4),
19540                                      Mop(Cast F4,
19541                                          LL[bVar"b'15",bVar"b'14",
19542                                             bVar"b'13",bVar"b'12"]),
19543                                      Let(Var("B",F1),
19544                                          Mop(Cast F1,LL[bVar"b'22"]),
19545                                          Let(TP[bVar"v",qVar"s"],
19546                                              Apply
19547                                                (Call
19548                                                   ("Do",
19549                                                    ATy(qTy,PTy(bTy,qTy)),
19550                                                    TP[Var("cond",F4),LT]),
19551                                                 qVar"state"),
19552                                              ITE(bVar"v",
19553                                                  TP[Let(bVar"add",
19554                                                         EQ(Mop(Cast F1,
19555                                                                LL[bVar"b'23"]),
19556                                                            LW(1,1)),
19557                                                         Let(Var("imm32",
19558                                                                 F32),
19559                                                             Mop(Cast F32,
19560                                                                 Mop(Cast
19561                                                                       (FTy 12),
19562                                                                     LL[bVar"b'11",
19563                                                                        bVar"b'10",
19564                                                                        bVar"b'9",
19565                                                                        bVar"b'8",
19566                                                                        bVar"b'7",
19567                                                                        bVar"b'6",
19568                                                                        bVar"b'5",
19569                                                                        bVar"b'4",
19570                                                                        bVar"b'3",
19571                                                                        bVar"b'2",
19572                                                                        bVar"b'1",
19573                                                                        bVar"b'0"])),
19574                                                             ITE(EQ(Var("B",
19575                                                                        F1),
19576                                                                    LW(1,1)),
19577                                                                 Call
19578                                                                   ("Load",
19579                                                                    CTy"instruction",
19580                                                                    Call
19581                                                                      ("LoadByteLiteral",
19582                                                                       CTy"Load",
19583                                                                       TP[LT,
19584                                                                          bVar"add",
19585                                                                          Var("Rt",
19586                                                                              F4),
19587                                                                          Var("imm32",
19588                                                                              F32)])),
19589                                                                 Call
19590                                                                   ("Load",
19591                                                                    CTy"instruction",
19592                                                                    Call
19593                                                                      ("LoadLiteral",
19594                                                                       CTy"Load",
19595                                                                       TP[bVar"add",
19596                                                                          Var("Rt",
19597                                                                              F4),
19598                                                                          Var("imm32",
19599                                                                              F32)]))))),
19600                                                     ITE(Bop(Or,
19601                                                             Bop(And,
19602                                                                 EQ(Var("B",
19603                                                                        F1),
19604                                                                    LW(1,1)),
19605                                                                 EQ(Var("Rt",
19606                                                                        F4),
19607                                                                    LW(15,
19608                                                                       4))),
19609                                                             Mop(Not,
19610                                                                 Bop(And,
19611                                                                     EQ(Mop(Cast
19612                                                                              F1,
19613                                                                            LL[bVar"b'24"]),
19614                                                                        LW(1,
19615                                                                           1)),
19616                                                                     EQ(Mop(Cast
19617                                                                              F1,
19618                                                                            LL[bVar"b'21"]),
19619                                                                        LW(0,
19620                                                                           1))))),
19621                                                         Apply
19622                                                           (Call
19623                                                              ("DECODE_UNPREDICTABLE",
19624                                                               ATy(qTy,qTy),
19625                                                               TP[Var("mc",
19626                                                                      CTy"MachineCode"),
19627                                                                  LS
19628                                                                   "LoadByte (literal)"]),
19629                                                            qVar"s"),
19630                                                         qVar"s")],
19631                                                  TP[Apply
19632                                                       (Call
19633                                                          ("Skip",
19634                                                           ATy(qTy,
19635                                                               CTy"instruction"),
19636                                                           LU),qVar"s"),
19637                                                     qVar"s"]))))),
19638                                 (Bop(And,Mop(Not,bVar"b'27"),
19639                                      Bop(And,Mop(Not,bVar"b'25"),
19640                                          bVar"b'20")),
19641                                  Let(Var("Rt",F4),
19642                                      Mop(Cast F4,
19643                                          LL[bVar"b'15",bVar"b'14",
19644                                             bVar"b'13",bVar"b'12"]),
19645                                      Let(Var("Rn",F4),
19646                                          Mop(Cast F4,
19647                                              LL[bVar"b'19",bVar"b'18",
19648                                                 bVar"b'17",bVar"b'16"]),
19649                                          Let(Var("B",F1),
19650                                              Mop(Cast F1,LL[bVar"b'22"]),
19651                                              Let(Var("P",F1),
19652                                                  Mop(Cast F1,
19653                                                      LL[bVar"b'24"]),
19654                                                  Let(TP[bVar"v",qVar"s"],
19655                                                      Apply
19656                                                        (Call
19657                                                           ("Do",
19658                                                            ATy(qTy,
19659                                                                PTy(bTy,
19660                                                                    qTy)),
19661                                                            TP[Var("cond",
19662                                                                   F4),LT]),
19663                                                         qVar"state"),
19664                                                      ITE(bVar"v",
19665                                                          Let(bVar"wback",
19666                                                              Bop(Or,
19667                                                                  EQ(Var("P",
19668                                                                         F1),
19669                                                                     LW(0,
19670                                                                        1)),
19671                                                                  EQ(Mop(Cast
19672                                                                           F1,
19673                                                                         LL[bVar"b'21"]),
19674                                                                     LW(1,
19675                                                                        1))),
19676                                                              TP[Let(bVar"add",
19677                                                                     EQ(Mop(Cast
19678                                                                              F1,
19679                                                                            LL[bVar"b'23"]),
19680                                                                        LW(1,
19681                                                                           1)),
19682                                                                     Let(bVar"index",
19683                                                                         EQ(Var("P",
19684                                                                                F1),
19685                                                                            LW(1,
19686                                                                               1)),
19687                                                                         Let(Var("m",
19688                                                                                 CTy"offset1"),
19689                                                                             Call
19690                                                                               ("immediate_form1",
19691                                                                                CTy"offset1",
19692                                                                                Mop(Cast
19693                                                                                      F32,
19694                                                                                    Mop(Cast
19695                                                                                          (FTy 12),
19696                                                                                        LL[bVar"b'11",
19697                                                                                           bVar"b'10",
19698                                                                                           bVar"b'9",
19699                                                                                           bVar"b'8",
19700                                                                                           bVar"b'7",
19701                                                                                           bVar"b'6",
19702                                                                                           bVar"b'5",
19703                                                                                           bVar"b'4",
19704                                                                                           bVar"b'3",
19705                                                                                           bVar"b'2",
19706                                                                                           bVar"b'1",
19707                                                                                           bVar"b'0"]))),
19708                                                                             ITE(EQ(Var("B",
19709                                                                                        F1),
19710                                                                                    LW(1,
19711                                                                                       1)),
19712                                                                                 Call
19713                                                                                   ("Load",
19714                                                                                    CTy"instruction",
19715                                                                                    Call
19716                                                                                      ("LoadByte",
19717                                                                                       CTy"Load",
19718                                                                                       TP[LT,
19719                                                                                          bVar"add",
19720                                                                                          bVar"index",
19721                                                                                          bVar"wback",
19722                                                                                          Var("Rt",
19723                                                                                              F4),
19724                                                                                          Var("Rn",
19725                                                                                              F4),
19726                                                                                          Var("m",
19727                                                                                              CTy"offset1")])),
19728                                                                                 Call
19729                                                                                   ("Load",
19730                                                                                    CTy"instruction",
19731                                                                                    Call
19732                                                                                      ("LoadWord",
19733                                                                                       CTy"Load",
19734                                                                                       TP[bVar"add",
19735                                                                                          bVar"index",
19736                                                                                          bVar"wback",
19737                                                                                          Var("Rt",
19738                                                                                              F4),
19739                                                                                          Var("Rn",
19740                                                                                              F4),
19741                                                                                          Var("m",
19742                                                                                              CTy"offset1")])))))),
19743                                                                 ITE(Bop(Or,
19744                                                                         Bop(And,
19745                                                                             EQ(Var("B",
19746                                                                                    F1),
19747                                                                                LW(1,
19748                                                                                   1)),
19749                                                                             EQ(Var("Rt",
19750                                                                                    F4),
19751                                                                                LW(15,
19752                                                                                   4))),
19753                                                                         Bop(And,
19754                                                                             bVar"wback",
19755                                                                             EQ(Var("Rn",
19756                                                                                    F4),
19757                                                                                Var("Rt",
19758                                                                                    F4)))),
19759                                                                     Apply
19760                                                                       (Call
19761                                                                          ("DECODE_UNPREDICTABLE",
19762                                                                           ATy(qTy,
19763                                                                               qTy),
19764                                                                           TP[Var("mc",
19765                                                                                  CTy"MachineCode"),
19766                                                                              LS
19767                                                                               "LoadWord/Byte (immediate)"]),
19768                                                                        qVar"s"),
19769                                                                     qVar"s")]),
19770                                                          TP[Apply
19771                                                               (Call
19772                                                                  ("Skip",
19773                                                                   ATy(qTy,
19774                                                                       CTy"instruction"),
19775                                                                   LU),
19776                                                                qVar"s"),
19777                                                             qVar"s"]))))))),
19778                                 (Bop(And,Mop(Not,bVar"b'27"),
19779                                      Bop(And,bVar"b'25",
19780                                          Bop(And,Mop(Not,bVar"b'24"),
19781                                              Bop(And,bVar"b'21",
19782                                                  Bop(And,
19783                                                      Mop(Not,bVar"b'20"),
19784                                                      Mop(Not,bVar"b'4")))))),
19785                                  Let(Var("Rm",F4),
19786                                      Mop(Cast F4,
19787                                          LL[bVar"b'3",bVar"b'2",
19788                                             bVar"b'1",bVar"b'0"]),
19789                                      Let(Var("Rt",F4),
19790                                          Mop(Cast F4,
19791                                              LL[bVar"b'15",bVar"b'14",
19792                                                 bVar"b'13",bVar"b'12"]),
19793                                          Let(Var("Rn",F4),
19794                                              Mop(Cast F4,
19795                                                  LL[bVar"b'19",
19796                                                     bVar"b'18",
19797                                                     bVar"b'17",bVar"b'16"]),
19798                                              Let(Var("B",F1),
19799                                                  Mop(Cast F1,
19800                                                      LL[bVar"b'22"]),
19801                                                  Let(TP[bVar"v",qVar"s"],
19802                                                      Apply
19803                                                        (Call
19804                                                           ("Do",
19805                                                            ATy(qTy,
19806                                                                PTy(bTy,
19807                                                                    qTy)),
19808                                                            TP[Var("cond",
19809                                                                   F4),LT]),
19810                                                         qVar"state"),
19811                                                      ITE(bVar"v",
19812                                                          TP[Let(bVar"add",
19813                                                                 EQ(Mop(Cast
19814                                                                          F1,
19815                                                                        LL[bVar"b'23"]),
19816                                                                    LW(1,1)),
19817                                                                 Let(TP[Var("shift_t",
19818                                                                            CTy"SRType"),
19819                                                                        nVar"shift_n"],
19820                                                                     Call
19821                                                                       ("DecodeImmShift",
19822                                                                        PTy(CTy"SRType",
19823                                                                            nTy),
19824                                                                        TP[Mop(Cast
19825                                                                                 (FTy 2),
19826                                                                               LL[bVar"b'6",
19827                                                                                  bVar"b'5"]),
19828                                                                           Mop(Cast
19829                                                                                 (FTy 5),
19830                                                                               LL[bVar"b'11",
19831                                                                                  bVar"b'10",
19832                                                                                  bVar"b'9",
19833                                                                                  bVar"b'8",
19834                                                                                  bVar"b'7"])]),
19835                                                                     Let(Var("m",
19836                                                                             CTy"offset1"),
19837                                                                         Call
19838                                                                           ("register_form1",
19839                                                                            CTy"offset1",
19840                                                                            TP[Var("Rm",
19841                                                                                   F4),
19842                                                                               Var("shift_t",
19843                                                                                   CTy"SRType"),
19844                                                                               nVar"shift_n"]),
19845                                                                         ITE(EQ(Var("B",
19846                                                                                    F1),
19847                                                                                LW(1,
19848                                                                                   1)),
19849                                                                             Call
19850                                                                               ("Store",
19851                                                                                CTy"instruction",
19852                                                                                Call
19853                                                                                  ("StoreByteUnprivileged",
19854                                                                                   CTy"Store",
19855                                                                                   TP[bVar"add",
19856                                                                                      LT,
19857                                                                                      Var("Rt",
19858                                                                                          F4),
19859                                                                                      Var("Rn",
19860                                                                                          F4),
19861                                                                                      Var("m",
19862                                                                                          CTy"offset1")])),
19863                                                                             Call
19864                                                                               ("Store",
19865                                                                                CTy"instruction",
19866                                                                                Call
19867                                                                                  ("StoreUnprivileged",
19868                                                                                   CTy"Store",
19869                                                                                   TP[bVar"add",
19870                                                                                      LT,
19871                                                                                      Var("Rt",
19872                                                                                          F4),
19873                                                                                      Var("Rn",
19874                                                                                          F4),
19875                                                                                      Var("m",
19876                                                                                          CTy"offset1")])))))),
19877                                                             ITE(Bop(Or,
19878                                                                     Bop(And,
19879                                                                         EQ(Var("B",
19880                                                                                F1),
19881                                                                            LW(1,
19882                                                                               1)),
19883                                                                         EQ(Var("Rt",
19884                                                                                F4),
19885                                                                            LW(15,
19886                                                                               4))),
19887                                                                     Bop(Or,
19888                                                                         EQ(Var("Rn",
19889                                                                                F4),
19890                                                                            LW(15,
19891                                                                               4)),
19892                                                                         Bop(Or,
19893                                                                             EQ(Var("Rn",
19894                                                                                    F4),
19895                                                                                Var("Rt",
19896                                                                                    F4)),
19897                                                                             Bop(Or,
19898                                                                                 EQ(Var("Rm",
19899                                                                                        F4),
19900                                                                                    LW(15,
19901                                                                                       4)),
19902                                                                                 Bop(And,
19903                                                                                     Bop(Lt,
19904                                                                                         Apply
19905                                                                                           (Call
19906                                                                                              ("ArchVersion",
19907                                                                                               ATy(qTy,
19908                                                                                                   nTy),
19909                                                                                               LU),
19910                                                                                            qVar"s"),
19911                                                                                         LN
19912                                                                                          6),
19913                                                                                     EQ(Var("Rm",
19914                                                                                            F4),
19915                                                                                        Var("Rn",
19916                                                                                            F4))))))),
19917                                                                 Apply
19918                                                                   (Call
19919                                                                      ("DECODE_UNPREDICTABLE",
19920                                                                       ATy(qTy,
19921                                                                           qTy),
19922                                                                       TP[Var("mc",
19923                                                                              CTy"MachineCode"),
19924                                                                          LS
19925                                                                           "StoreUnprivileged (regiser)"]),
19926                                                                    qVar"s"),
19927                                                                 qVar"s")],
19928                                                          TP[Apply
19929                                                               (Call
19930                                                                  ("Skip",
19931                                                                   ATy(qTy,
19932                                                                       CTy"instruction"),
19933                                                                   LU),
19934                                                                qVar"s"),
19935                                                             qVar"s"]))))))),
19936                                 (Bop(And,Mop(Not,bVar"b'27"),
19937                                      Bop(And,bVar"b'25",
19938                                          Bop(And,Mop(Not,bVar"b'20"),
19939                                              Mop(Not,bVar"b'4")))),
19940                                  Let(Var("Rm",F4),
19941                                      Mop(Cast F4,
19942                                          LL[bVar"b'3",bVar"b'2",
19943                                             bVar"b'1",bVar"b'0"]),
19944                                      Let(Var("Rt",F4),
19945                                          Mop(Cast F4,
19946                                              LL[bVar"b'15",bVar"b'14",
19947                                                 bVar"b'13",bVar"b'12"]),
19948                                          Let(Var("Rn",F4),
19949                                              Mop(Cast F4,
19950                                                  LL[bVar"b'19",
19951                                                     bVar"b'18",
19952                                                     bVar"b'17",bVar"b'16"]),
19953                                              Let(Var("B",F1),
19954                                                  Mop(Cast F1,
19955                                                      LL[bVar"b'22"]),
19956                                                  Let(Var("P",F1),
19957                                                      Mop(Cast F1,
19958                                                          LL[bVar"b'24"]),
19959                                                      Let(TP[bVar"v",
19960                                                             qVar"s"],
19961                                                          Apply
19962                                                            (Call
19963                                                               ("Do",
19964                                                                ATy(qTy,
19965                                                                    PTy(bTy,
19966                                                                        qTy)),
19967                                                                TP[Var("cond",
19968                                                                       F4),
19969                                                                   LT]),
19970                                                             qVar"state"),
19971                                                          ITE(bVar"v",
19972                                                              Let(bVar"wback",
19973                                                                  Bop(Or,
19974                                                                      EQ(Var("P",
19975                                                                             F1),
19976                                                                         LW(0,
19977                                                                            1)),
19978                                                                      EQ(Mop(Cast
19979                                                                               F1,
19980                                                                             LL[bVar"b'21"]),
19981                                                                         LW(1,
19982                                                                            1))),
19983                                                                  TP[Let(bVar"add",
19984                                                                         EQ(Mop(Cast
19985                                                                                  F1,
19986                                                                                LL[bVar"b'23"]),
19987                                                                            LW(1,
19988                                                                               1)),
19989                                                                         Let(bVar"index",
19990                                                                             EQ(Var("P",
19991                                                                                    F1),
19992                                                                                LW(1,
19993                                                                                   1)),
19994                                                                             Let(TP[Var("shift_t",
19995                                                                                        CTy"SRType"),
19996                                                                                    nVar"shift_n"],
19997                                                                                 Call
19998                                                                                   ("DecodeImmShift",
19999                                                                                    PTy(CTy"SRType",
20000                                                                                        nTy),
20001                                                                                    TP[Mop(Cast
20002                                                                                             (FTy 2),
20003                                                                                           LL[bVar"b'6",
20004                                                                                              bVar"b'5"]),
20005                                                                                       Mop(Cast
20006                                                                                             (FTy 5),
20007                                                                                           LL[bVar"b'11",
20008                                                                                              bVar"b'10",
20009                                                                                              bVar"b'9",
20010                                                                                              bVar"b'8",
20011                                                                                              bVar"b'7"])]),
20012                                                                                 Let(Var("m",
20013                                                                                         CTy"offset1"),
20014                                                                                     Call
20015                                                                                       ("register_form1",
20016                                                                                        CTy"offset1",
20017                                                                                        TP[Var("Rm",
20018                                                                                               F4),
20019                                                                                           Var("shift_t",
20020                                                                                               CTy"SRType"),
20021                                                                                           nVar"shift_n"]),
20022                                                                                     ITE(EQ(Var("B",
20023                                                                                                F1),
20024                                                                                            LW(1,
20025                                                                                               1)),
20026                                                                                         Call
20027                                                                                           ("Store",
20028                                                                                            CTy"instruction",
20029                                                                                            Call
20030                                                                                              ("StoreByte",
20031                                                                                               CTy"Store",
20032                                                                                               TP[bVar"add",
20033                                                                                                  bVar"index",
20034                                                                                                  bVar"wback",
20035                                                                                                  Var("Rt",
20036                                                                                                      F4),
20037                                                                                                  Var("Rn",
20038                                                                                                      F4),
20039                                                                                                  Var("m",
20040                                                                                                      CTy"offset1")])),
20041                                                                                         Call
20042                                                                                           ("Store",
20043                                                                                            CTy"instruction",
20044                                                                                            Call
20045                                                                                              ("StoreWord",
20046                                                                                               CTy"Store",
20047                                                                                               TP[bVar"add",
20048                                                                                                  bVar"index",
20049                                                                                                  bVar"wback",
20050                                                                                                  Var("Rt",
20051                                                                                                      F4),
20052                                                                                                  Var("Rn",
20053                                                                                                      F4),
20054                                                                                                  Var("m",
20055                                                                                                      CTy"offset1")]))))))),
20056                                                                     ITE(Bop(Or,
20057                                                                             Bop(And,
20058                                                                                 EQ(Var("B",
20059                                                                                        F1),
20060                                                                                    LW(1,
20061                                                                                       1)),
20062                                                                                 EQ(Var("Rt",
20063                                                                                        F4),
20064                                                                                    LW(15,
20065                                                                                       4))),
20066                                                                             Bop(Or,
20067                                                                                 EQ(Var("Rm",
20068                                                                                        F4),
20069                                                                                    LW(15,
20070                                                                                       4)),
20071                                                                                 Bop(Or,
20072                                                                                     Bop(And,
20073                                                                                         bVar"wback",
20074                                                                                         Bop(Or,
20075                                                                                             EQ(Var("Rn",
20076                                                                                                    F4),
20077                                                                                                LW(15,
20078                                                                                                   4)),
20079                                                                                             EQ(Var("Rn",
20080                                                                                                    F4),
20081                                                                                                Var("Rt",
20082                                                                                                    F4)))),
20083                                                                                     Bop(And,
20084                                                                                         Bop(Lt,
20085                                                                                             Apply
20086                                                                                               (Call
20087                                                                                                  ("ArchVersion",
20088                                                                                                   ATy(qTy,
20089                                                                                                       nTy),
20090                                                                                                   LU),
20091                                                                                                qVar"s"),
20092                                                                                             LN
20093                                                                                              6),
20094                                                                                         Bop(And,
20095                                                                                             bVar"wback",
20096                                                                                             EQ(Var("Rm",
20097                                                                                                    F4),
20098                                                                                                Var("Rn",
20099                                                                                                    F4))))))),
20100                                                                         Apply
20101                                                                           (Call
20102                                                                              ("DECODE_UNPREDICTABLE",
20103                                                                               ATy(qTy,
20104                                                                                   qTy),
20105                                                                               TP[Var("mc",
20106                                                                                      CTy"MachineCode"),
20107                                                                                  LS
20108                                                                                   "Store (regiser)"]),
20109                                                                            qVar"s"),
20110                                                                         qVar"s")]),
20111                                                              TP[Apply
20112                                                                   (Call
20113                                                                      ("Skip",
20114                                                                       ATy(qTy,
20115                                                                           CTy"instruction"),
20116                                                                       LU),
20117                                                                    qVar"s"),
20118                                                                 qVar"s"])))))))),
20119                                 (Bop(And,Mop(Not,bVar"b'27"),
20120                                      Bop(And,bVar"b'25",
20121                                          Bop(And,Mop(Not,bVar"b'24"),
20122                                              Bop(And,bVar"b'21",
20123                                                  Bop(And,bVar"b'20",
20124                                                      Mop(Not,bVar"b'4")))))),
20125                                  Let(Var("Rm",F4),
20126                                      Mop(Cast F4,
20127                                          LL[bVar"b'3",bVar"b'2",
20128                                             bVar"b'1",bVar"b'0"]),
20129                                      Let(Var("Rt",F4),
20130                                          Mop(Cast F4,
20131                                              LL[bVar"b'15",bVar"b'14",
20132                                                 bVar"b'13",bVar"b'12"]),
20133                                          Let(Var("Rn",F4),
20134                                              Mop(Cast F4,
20135                                                  LL[bVar"b'19",
20136                                                     bVar"b'18",
20137                                                     bVar"b'17",bVar"b'16"]),
20138                                              Let(TP[bVar"v",qVar"s"],
20139                                                  Apply
20140                                                    (Call
20141                                                       ("Do",
20142                                                        ATy(qTy,
20143                                                            PTy(bTy,qTy)),
20144                                                        TP[Var("cond",F4),
20145                                                           LT]),
20146                                                     qVar"state"),
20147                                                  ITE(bVar"v",
20148                                                      TP[Let(bVar"add",
20149                                                             EQ(Mop(Cast
20150                                                                      F1,
20151                                                                    LL[bVar"b'23"]),
20152                                                                LW(1,1)),
20153                                                             Let(TP[Var("shift_t",
20154                                                                        CTy"SRType"),
20155                                                                    nVar"shift_n"],
20156                                                                 Call
20157                                                                   ("DecodeImmShift",
20158                                                                    PTy(CTy"SRType",
20159                                                                        nTy),
20160                                                                    TP[Mop(Cast
20161                                                                             (FTy 2),
20162                                                                           LL[bVar"b'6",
20163                                                                              bVar"b'5"]),
20164                                                                       Mop(Cast
20165                                                                             (FTy 5),
20166                                                                           LL[bVar"b'11",
20167                                                                              bVar"b'10",
20168                                                                              bVar"b'9",
20169                                                                              bVar"b'8",
20170                                                                              bVar"b'7"])]),
20171                                                                 Let(Var("m",
20172                                                                         CTy"offset1"),
20173                                                                     Call
20174                                                                       ("register_form1",
20175                                                                        CTy"offset1",
20176                                                                        TP[Var("Rm",
20177                                                                               F4),
20178                                                                           Var("shift_t",
20179                                                                               CTy"SRType"),
20180                                                                           nVar"shift_n"]),
20181                                                                     ITE(EQ(Mop(Cast
20182                                                                                  F1,
20183                                                                                LL[bVar"b'22"]),
20184                                                                            LW(1,
20185                                                                               1)),
20186                                                                         Call
20187                                                                           ("Load",
20188                                                                            CTy"instruction",
20189                                                                            Call
20190                                                                              ("LoadByteUnprivileged",
20191                                                                               CTy"Load",
20192                                                                               TP[bVar"add",
20193                                                                                  LT,
20194                                                                                  Var("Rt",
20195                                                                                      F4),
20196                                                                                  Var("Rn",
20197                                                                                      F4),
20198                                                                                  Var("m",
20199                                                                                      CTy"offset1")])),
20200                                                                         Call
20201                                                                           ("Load",
20202                                                                            CTy"instruction",
20203                                                                            Call
20204                                                                              ("LoadUnprivileged",
20205                                                                               CTy"Load",
20206                                                                               TP[bVar"add",
20207                                                                                  LT,
20208                                                                                  Var("Rt",
20209                                                                                      F4),
20210                                                                                  Var("Rn",
20211                                                                                      F4),
20212                                                                                  Var("m",
20213                                                                                      CTy"offset1")])))))),
20214                                                         ITE(Bop(Or,
20215                                                                 EQ(Var("Rt",
20216                                                                        F4),
20217                                                                    LW(15,
20218                                                                       4)),
20219                                                                 Bop(Or,
20220                                                                     EQ(Var("Rn",
20221                                                                            F4),
20222                                                                        LW(15,
20223                                                                           4)),
20224                                                                     Bop(Or,
20225                                                                         EQ(Var("Rn",
20226                                                                                F4),
20227                                                                            Var("Rt",
20228                                                                                F4)),
20229                                                                         Bop(Or,
20230                                                                             EQ(Var("Rm",
20231                                                                                    F4),
20232                                                                                LW(15,
20233                                                                                   4)),
20234                                                                             Bop(And,
20235                                                                                 Bop(Lt,
20236                                                                                     Apply
20237                                                                                       (Call
20238                                                                                          ("ArchVersion",
20239                                                                                           ATy(qTy,
20240                                                                                               nTy),
20241                                                                                           LU),
20242                                                                                        qVar"s"),
20243                                                                                     LN
20244                                                                                      6),
20245                                                                                 EQ(Var("Rm",
20246                                                                                        F4),
20247                                                                                    Var("Rn",
20248                                                                                        F4))))))),
20249                                                             Apply
20250                                                               (Call
20251                                                                  ("DECODE_UNPREDICTABLE",
20252                                                                   ATy(qTy,
20253                                                                       qTy),
20254                                                                   TP[Var("mc",
20255                                                                          CTy"MachineCode"),
20256                                                                      LS
20257                                                                       "LoadUnprivileged (regiser)"]),
20258                                                                qVar"s"),
20259                                                             qVar"s")],
20260                                                      TP[Apply
20261                                                           (Call
20262                                                              ("Skip",
20263                                                               ATy(qTy,
20264                                                                   CTy"instruction"),
20265                                                               LU),qVar"s"),
20266                                                         qVar"s"])))))),
20267                                 (Bop(And,Mop(Not,bVar"b'27"),
20268                                      Bop(And,bVar"b'25",
20269                                          Bop(And,bVar"b'20",
20270                                              Mop(Not,bVar"b'4")))),
20271                                  Let(Var("Rm",F4),
20272                                      Mop(Cast F4,
20273                                          LL[bVar"b'3",bVar"b'2",
20274                                             bVar"b'1",bVar"b'0"]),
20275                                      Let(Var("Rt",F4),
20276                                          Mop(Cast F4,
20277                                              LL[bVar"b'15",bVar"b'14",
20278                                                 bVar"b'13",bVar"b'12"]),
20279                                          Let(Var("Rn",F4),
20280                                              Mop(Cast F4,
20281                                                  LL[bVar"b'19",
20282                                                     bVar"b'18",
20283                                                     bVar"b'17",bVar"b'16"]),
20284                                              Let(Var("B",F1),
20285                                                  Mop(Cast F1,
20286                                                      LL[bVar"b'22"]),
20287                                                  Let(Var("P",F1),
20288                                                      Mop(Cast F1,
20289                                                          LL[bVar"b'24"]),
20290                                                      Let(TP[bVar"v",
20291                                                             qVar"s"],
20292                                                          Apply
20293                                                            (Call
20294                                                               ("Do",
20295                                                                ATy(qTy,
20296                                                                    PTy(bTy,
20297                                                                        qTy)),
20298                                                                TP[Var("cond",
20299                                                                       F4),
20300                                                                   LT]),
20301                                                             qVar"state"),
20302                                                          ITE(bVar"v",
20303                                                              Let(bVar"wback",
20304                                                                  Bop(Or,
20305                                                                      EQ(Var("P",
20306                                                                             F1),
20307                                                                         LW(0,
20308                                                                            1)),
20309                                                                      EQ(Mop(Cast
20310                                                                               F1,
20311                                                                             LL[bVar"b'21"]),
20312                                                                         LW(1,
20313                                                                            1))),
20314                                                                  TP[Let(bVar"add",
20315                                                                         EQ(Mop(Cast
20316                                                                                  F1,
20317                                                                                LL[bVar"b'23"]),
20318                                                                            LW(1,
20319                                                                               1)),
20320                                                                         Let(bVar"index",
20321                                                                             EQ(Var("P",
20322                                                                                    F1),
20323                                                                                LW(1,
20324                                                                                   1)),
20325                                                                             Let(TP[Var("shift_t",
20326                                                                                        CTy"SRType"),
20327                                                                                    nVar"shift_n"],
20328                                                                                 Call
20329                                                                                   ("DecodeImmShift",
20330                                                                                    PTy(CTy"SRType",
20331                                                                                        nTy),
20332                                                                                    TP[Mop(Cast
20333                                                                                             (FTy 2),
20334                                                                                           LL[bVar"b'6",
20335                                                                                              bVar"b'5"]),
20336                                                                                       Mop(Cast
20337                                                                                             (FTy 5),
20338                                                                                           LL[bVar"b'11",
20339                                                                                              bVar"b'10",
20340                                                                                              bVar"b'9",
20341                                                                                              bVar"b'8",
20342                                                                                              bVar"b'7"])]),
20343                                                                                 Let(Var("m",
20344                                                                                         CTy"offset1"),
20345                                                                                     Call
20346                                                                                       ("register_form1",
20347                                                                                        CTy"offset1",
20348                                                                                        TP[Var("Rm",
20349                                                                                               F4),
20350                                                                                           Var("shift_t",
20351                                                                                               CTy"SRType"),
20352                                                                                           nVar"shift_n"]),
20353                                                                                     ITE(EQ(Var("B",
20354                                                                                                F1),
20355                                                                                            LW(1,
20356                                                                                               1)),
20357                                                                                         Call
20358                                                                                           ("Load",
20359                                                                                            CTy"instruction",
20360                                                                                            Call
20361                                                                                              ("LoadByte",
20362                                                                                               CTy"Load",
20363                                                                                               TP[LT,
20364                                                                                                  bVar"add",
20365                                                                                                  bVar"index",
20366                                                                                                  bVar"wback",
20367                                                                                                  Var("Rt",
20368                                                                                                      F4),
20369                                                                                                  Var("Rn",
20370                                                                                                      F4),
20371                                                                                                  Var("m",
20372                                                                                                      CTy"offset1")])),
20373                                                                                         Call
20374                                                                                           ("Load",
20375                                                                                            CTy"instruction",
20376                                                                                            Call
20377                                                                                              ("LoadWord",
20378                                                                                               CTy"Load",
20379                                                                                               TP[bVar"add",
20380                                                                                                  bVar"index",
20381                                                                                                  bVar"wback",
20382                                                                                                  Var("Rt",
20383                                                                                                      F4),
20384                                                                                                  Var("Rn",
20385                                                                                                      F4),
20386                                                                                                  Var("m",
20387                                                                                                      CTy"offset1")]))))))),
20388                                                                     ITE(Bop(Or,
20389                                                                             Bop(And,
20390                                                                                 EQ(Var("B",
20391                                                                                        F1),
20392                                                                                    LW(1,
20393                                                                                       1)),
20394                                                                                 EQ(Var("Rt",
20395                                                                                        F4),
20396                                                                                    LW(15,
20397                                                                                       4))),
20398                                                                             Bop(Or,
20399                                                                                 EQ(Var("Rm",
20400                                                                                        F4),
20401                                                                                    LW(15,
20402                                                                                       4)),
20403                                                                                 Bop(Or,
20404                                                                                     Bop(And,
20405                                                                                         bVar"wback",
20406                                                                                         Bop(Or,
20407                                                                                             EQ(Var("Rn",
20408                                                                                                    F4),
20409                                                                                                LW(15,
20410                                                                                                   4)),
20411                                                                                             EQ(Var("Rn",
20412                                                                                                    F4),
20413                                                                                                Var("Rt",
20414                                                                                                    F4)))),
20415                                                                                     Bop(And,
20416                                                                                         Bop(Lt,
20417                                                                                             Apply
20418                                                                                               (Call
20419                                                                                                  ("ArchVersion",
20420                                                                                                   ATy(qTy,
20421                                                                                                       nTy),
20422                                                                                                   LU),
20423                                                                                                qVar"s"),
20424                                                                                             LN
20425                                                                                              6),
20426                                                                                         Bop(And,
20427                                                                                             bVar"wback",
20428                                                                                             EQ(Var("Rm",
20429                                                                                                    F4),
20430                                                                                                Var("Rn",
20431                                                                                                    F4))))))),
20432                                                                         Apply
20433                                                                           (Call
20434                                                                              ("DECODE_UNPREDICTABLE",
20435                                                                               ATy(qTy,
20436                                                                                   qTy),
20437                                                                               TP[Var("mc",
20438                                                                                      CTy"MachineCode"),
20439                                                                                  LS
20440                                                                                   "LoadWord/Byte (regiser)"]),
20441                                                                            qVar"s"),
20442                                                                         qVar"s")]),
20443                                                              TP[Apply
20444                                                                   (Call
20445                                                                      ("Skip",
20446                                                                       ATy(qTy,
20447                                                                           CTy"instruction"),
20448                                                                       LU),
20449                                                                    qVar"s"),
20450                                                                 qVar"s"])))))))),
20451                                 (Bop(And,Mop(Not,bVar"b'27"),
20452                                      Bop(And,bVar"b'25",
20453                                          Bop(And,Mop(Not,bVar"b'24"),
20454                                              Bop(And,Mop(Not,bVar"b'23"),
20455                                                  bVar"b'4")))),
20456                                  Let(Var("Rm",F4),
20457                                      Mop(Cast F4,
20458                                          LL[bVar"b'3",bVar"b'2",
20459                                             bVar"b'1",bVar"b'0"]),
20460                                      Let(Var("Rd",F4),
20461                                          Mop(Cast F4,
20462                                              LL[bVar"b'15",bVar"b'14",
20463                                                 bVar"b'13",bVar"b'12"]),
20464                                          Let(Var("Rn",F4),
20465                                              Mop(Cast F4,
20466                                                  LL[bVar"b'19",
20467                                                     bVar"b'18",
20468                                                     bVar"b'17",bVar"b'16"]),
20469                                              Let(TP[bVar"v",qVar"s"],
20470                                                  Apply
20471                                                    (Call
20472                                                       ("Do",
20473                                                        ATy(qTy,
20474                                                            PTy(bTy,qTy)),
20475                                                        TP[Var("cond",F4),
20476                                                           Bop(Ge,
20477                                                               Apply
20478                                                                 (Call
20479                                                                    ("ArchVersion",
20480                                                                     ATy(qTy,
20481                                                                         nTy),
20482                                                                     LU),
20483                                                                  qVar"state"),
20484                                                               LN 6)]),
20485                                                     qVar"state"),
20486                                                  ITE(bVar"v",
20487                                                      TP[Call
20488                                                           ("DecodeParallelAdditionSubtraction",
20489                                                            CTy"instruction",
20490                                                            TP[Mop(Cast
20491                                                                     (FTy 2),
20492                                                                   LL[bVar"b'21",
20493                                                                      bVar"b'20"]),
20494                                                               Mop(Cast
20495                                                                     (FTy 3),
20496                                                                   LL[bVar"b'7",
20497                                                                      bVar"b'6",
20498                                                                      bVar"b'5"]),
20499                                                               Mop(Cast F1,
20500                                                                   LL[bVar"b'22"]),
20501                                                               Var("Rd",F4),
20502                                                               Var("Rn",F4),
20503                                                               Var("Rm",F4)]),
20504                                                         ITE(Bop(Or,
20505                                                                 EQ(Var("Rd",
20506                                                                        F4),
20507                                                                    LW(15,
20508                                                                       4)),
20509                                                                 Bop(Or,
20510                                                                     EQ(Var("Rn",
20511                                                                            F4),
20512                                                                        LW(15,
20513                                                                           4)),
20514                                                                     Bop(Or,
20515                                                                         EQ(Var("Rm",
20516                                                                                F4),
20517                                                                            LW(15,
20518                                                                               4)),
20519                                                                         Mop(Not,
20520                                                                             EQ(Mop(Cast
20521                                                                                      F4,
20522                                                                                    LL[bVar"b'11",
20523                                                                                       bVar"b'10",
20524                                                                                       bVar"b'9",
20525                                                                                       bVar"b'8"]),
20526                                                                                LW(15,
20527                                                                                   4)))))),
20528                                                             Apply
20529                                                               (Call
20530                                                                  ("DECODE_UNPREDICTABLE",
20531                                                                   ATy(qTy,
20532                                                                       qTy),
20533                                                                   TP[Var("mc",
20534                                                                          CTy"MachineCode"),
20535                                                                      LS
20536                                                                       "Parallel addition and subtraction"]),
20537                                                                qVar"s"),
20538                                                             qVar"s")],
20539                                                      TP[Apply
20540                                                           (Call
20541                                                              ("Skip",
20542                                                               ATy(qTy,
20543                                                                   CTy"instruction"),
20544                                                               LU),qVar"s"),
20545                                                         qVar"s"])))))),
20546                                 (Bop(And,Mop(Not,bVar"b'27"),
20547                                      Bop(And,bVar"b'25",
20548                                          Bop(And,Mop(Not,bVar"b'24"),
20549                                              Bop(And,bVar"b'23",
20550                                                  Bop(And,
20551                                                      Mop(Not,bVar"b'22"),
20552                                                      Bop(And,
20553                                                          Mop(Not,
20554                                                              bVar"b'21"),
20555                                                          Bop(And,
20556                                                              Mop(Not,
20557                                                                  bVar"b'20"),
20558                                                              Bop(And,
20559                                                                  Mop(Not,
20560                                                                      bVar"b'5"),
20561                                                                  bVar"b'4")))))))),
20562                                  Let(Var("Rm",F4),
20563                                      Mop(Cast F4,
20564                                          LL[bVar"b'3",bVar"b'2",
20565                                             bVar"b'1",bVar"b'0"]),
20566                                      Let(Var("tb",F1),
20567                                          Mop(Cast F1,LL[bVar"b'6"]),
20568                                          Let(Var("Rd",F4),
20569                                              Mop(Cast F4,
20570                                                  LL[bVar"b'15",
20571                                                     bVar"b'14",
20572                                                     bVar"b'13",bVar"b'12"]),
20573                                              Let(Var("Rn",F4),
20574                                                  Mop(Cast F4,
20575                                                      LL[bVar"b'19",
20576                                                         bVar"b'18",
20577                                                         bVar"b'17",
20578                                                         bVar"b'16"]),
20579                                                  Let(TP[bVar"v",qVar"s"],
20580                                                      Apply
20581                                                        (Call
20582                                                           ("Do",
20583                                                            ATy(qTy,
20584                                                                PTy(bTy,
20585                                                                    qTy)),
20586                                                            TP[Var("cond",
20587                                                                   F4),
20588                                                               Bop(Ge,
20589                                                                   Apply
20590                                                                     (Call
20591                                                                        ("ArchVersion",
20592                                                                         ATy(qTy,
20593                                                                             nTy),
20594                                                                         LU),
20595                                                                      qVar"state"),
20596                                                                   LN 6)]),
20597                                                         qVar"state"),
20598                                                      ITE(bVar"v",
20599                                                          TP[Let(TP[Var("shift_t",
20600                                                                        CTy"SRType"),
20601                                                                    nVar"shift_n"],
20602                                                                 Call
20603                                                                   ("DecodeImmShift",
20604                                                                    PTy(CTy"SRType",
20605                                                                        nTy),
20606                                                                    TP[CC[Var("tb",
20607                                                                              F1),
20608                                                                          LW(0,
20609                                                                             1)],
20610                                                                       Mop(Cast
20611                                                                             (FTy 5),
20612                                                                           LL[bVar"b'11",
20613                                                                              bVar"b'10",
20614                                                                              bVar"b'9",
20615                                                                              bVar"b'8",
20616                                                                              bVar"b'7"])]),
20617                                                                 Call
20618                                                                   ("Media",
20619                                                                    CTy"instruction",
20620                                                                    Call
20621                                                                      ("PackHalfword",
20622                                                                       CTy"Media",
20623                                                                       TP[Var("shift_t",
20624                                                                              CTy"SRType"),
20625                                                                          nVar"shift_n",
20626                                                                          EQ(Var("tb",
20627                                                                                 F1),
20628                                                                             LW(1,
20629                                                                                1)),
20630                                                                          Var("Rd",
20631                                                                              F4),
20632                                                                          Var("Rn",
20633                                                                              F4),
20634                                                                          Var("Rm",
20635                                                                              F4)]))),
20636                                                             ITE(Bop(Or,
20637                                                                     EQ(Var("Rd",
20638                                                                            F4),
20639                                                                        LW(15,
20640                                                                           4)),
20641                                                                     Bop(Or,
20642                                                                         EQ(Var("Rn",
20643                                                                                F4),
20644                                                                            LW(15,
20645                                                                               4)),
20646                                                                         EQ(Var("Rm",
20647                                                                                F4),
20648                                                                            LW(15,
20649                                                                               4)))),
20650                                                                 Apply
20651                                                                   (Call
20652                                                                      ("DECODE_UNPREDICTABLE",
20653                                                                       ATy(qTy,
20654                                                                           qTy),
20655                                                                       TP[Var("mc",
20656                                                                              CTy"MachineCode"),
20657                                                                          LS
20658                                                                           "PackHalfword"]),
20659                                                                    qVar"s"),
20660                                                                 qVar"s")],
20661                                                          TP[Apply
20662                                                               (Call
20663                                                                  ("Skip",
20664                                                                   ATy(qTy,
20665                                                                       CTy"instruction"),
20666                                                                   LU),
20667                                                                qVar"s"),
20668                                                             qVar"s"]))))))),
20669                                 (Bop(And,Mop(Not,bVar"b'27"),
20670                                      Bop(And,bVar"b'25",
20671                                          Bop(And,Mop(Not,bVar"b'24"),
20672                                              Bop(And,bVar"b'23",
20673                                                  Bop(And,
20674                                                      Mop(Not,bVar"b'22"),
20675                                                      Bop(And,
20676                                                          Mop(Not,
20677                                                              bVar"b'21"),
20678                                                          Bop(And,
20679                                                              Mop(Not,
20680                                                                  bVar"b'20"),
20681                                                              Bop(And,
20682                                                                  bVar"b'7",
20683                                                                  Bop(And,
20684                                                                      Mop(Not,
20685                                                                          bVar"b'6"),
20686                                                                      Bop(And,
20687                                                                          bVar"b'5",
20688                                                                          bVar"b'4")))))))))),
20689                                  Let(Var("Rm",F4),
20690                                      Mop(Cast F4,
20691                                          LL[bVar"b'3",bVar"b'2",
20692                                             bVar"b'1",bVar"b'0"]),
20693                                      Let(Var("Rd",F4),
20694                                          Mop(Cast F4,
20695                                              LL[bVar"b'15",bVar"b'14",
20696                                                 bVar"b'13",bVar"b'12"]),
20697                                          Let(Var("Rn",F4),
20698                                              Mop(Cast F4,
20699                                                  LL[bVar"b'19",
20700                                                     bVar"b'18",
20701                                                     bVar"b'17",bVar"b'16"]),
20702                                              Let(TP[bVar"v",qVar"s"],
20703                                                  Apply
20704                                                    (Call
20705                                                       ("Do",
20706                                                        ATy(qTy,
20707                                                            PTy(bTy,qTy)),
20708                                                        TP[Var("cond",F4),
20709                                                           Bop(Ge,
20710                                                               Apply
20711                                                                 (Call
20712                                                                    ("ArchVersion",
20713                                                                     ATy(qTy,
20714                                                                         nTy),
20715                                                                     LU),
20716                                                                  qVar"state"),
20717                                                               LN 6)]),
20718                                                     qVar"state"),
20719                                                  ITE(bVar"v",
20720                                                      TP[Call
20721                                                           ("Media",
20722                                                            CTy"instruction",
20723                                                            Call
20724                                                              ("SelectBytes",
20725                                                               CTy"Media",
20726                                                               TP[Var("Rd",
20727                                                                      F4),
20728                                                                  Var("Rn",
20729                                                                      F4),
20730                                                                  Var("Rm",
20731                                                                      F4)])),
20732                                                         ITE(Bop(Or,
20733                                                                 EQ(Var("Rd",
20734                                                                        F4),
20735                                                                    LW(15,
20736                                                                       4)),
20737                                                                 Bop(Or,
20738                                                                     EQ(Var("Rn",
20739                                                                            F4),
20740                                                                        LW(15,
20741                                                                           4)),
20742                                                                     Bop(Or,
20743                                                                         EQ(Var("Rm",
20744                                                                                F4),
20745                                                                            LW(15,
20746                                                                               4)),
20747                                                                         Mop(Not,
20748                                                                             EQ(Mop(Cast
20749                                                                                      F4,
20750                                                                                    LL[bVar"b'11",
20751                                                                                       bVar"b'10",
20752                                                                                       bVar"b'9",
20753                                                                                       bVar"b'8"]),
20754                                                                                LW(15,
20755                                                                                   4)))))),
20756                                                             Apply
20757                                                               (Call
20758                                                                  ("DECODE_UNPREDICTABLE",
20759                                                                   ATy(qTy,
20760                                                                       qTy),
20761                                                                   TP[Var("mc",
20762                                                                          CTy"MachineCode"),
20763                                                                      LS
20764                                                                       "SelectBytes"]),
20765                                                                qVar"s"),
20766                                                             qVar"s")],
20767                                                      TP[Apply
20768                                                           (Call
20769                                                              ("Skip",
20770                                                               ATy(qTy,
20771                                                                   CTy"instruction"),
20772                                                               LU),qVar"s"),
20773                                                         qVar"s"])))))),
20774                                 (Bop(And,Mop(Not,bVar"b'27"),
20775                                      Bop(And,bVar"b'25",
20776                                          Bop(And,Mop(Not,bVar"b'24"),
20777                                              Bop(And,bVar"b'23",
20778                                                  Bop(And,bVar"b'21",
20779                                                      Bop(And,
20780                                                          Mop(Not,
20781                                                              bVar"b'5"),
20782                                                          bVar"b'4")))))),
20783                                  Let(Var("Rn",F4),
20784                                      Mop(Cast F4,
20785                                          LL[bVar"b'3",bVar"b'2",
20786                                             bVar"b'1",bVar"b'0"]),
20787                                      Let(Var("Rd",F4),
20788                                          Mop(Cast F4,
20789                                              LL[bVar"b'15",bVar"b'14",
20790                                                 bVar"b'13",bVar"b'12"]),
20791                                          Let(Var("sat_imm",FTy 5),
20792                                              Mop(Cast(FTy 5),
20793                                                  LL[bVar"b'20",
20794                                                     bVar"b'19",
20795                                                     bVar"b'18",
20796                                                     bVar"b'17",bVar"b'16"]),
20797                                              Let(TP[bVar"v",qVar"s"],
20798                                                  Apply
20799                                                    (Call
20800                                                       ("Do",
20801                                                        ATy(qTy,
20802                                                            PTy(bTy,qTy)),
20803                                                        TP[Var("cond",F4),
20804                                                           Bop(Ge,
20805                                                               Apply
20806                                                                 (Call
20807                                                                    ("ArchVersion",
20808                                                                     ATy(qTy,
20809                                                                         nTy),
20810                                                                     LU),
20811                                                                  qVar"state"),
20812                                                               LN 6)]),
20813                                                     qVar"state"),
20814                                                  ITE(bVar"v",
20815                                                      TP[Let(bVar"unsigned",
20816                                                             EQ(Mop(Cast
20817                                                                      F1,
20818                                                                    LL[bVar"b'22"]),
20819                                                                LW(1,1)),
20820                                                             Let(TP[Var("shift_t",
20821                                                                        CTy"SRType"),
20822                                                                    nVar"shift_n"],
20823                                                                 Call
20824                                                                   ("DecodeImmShift",
20825                                                                    PTy(CTy"SRType",
20826                                                                        nTy),
20827                                                                    TP[CC[Mop(Cast
20828                                                                                F1,
20829                                                                              LL[bVar"b'6"]),
20830                                                                          LW(0,
20831                                                                             1)],
20832                                                                       Mop(Cast
20833                                                                             (FTy 5),
20834                                                                           LL[bVar"b'11",
20835                                                                              bVar"b'10",
20836                                                                              bVar"b'9",
20837                                                                              bVar"b'8",
20838                                                                              bVar"b'7"])]),
20839                                                                 Call
20840                                                                   ("Media",
20841                                                                    CTy"instruction",
20842                                                                    Call
20843                                                                      ("Saturate",
20844                                                                       CTy"Media",
20845                                                                       TP[Var("shift_t",
20846                                                                              CTy"SRType"),
20847                                                                          nVar"shift_n",
20848                                                                          ITE(bVar"unsigned",
20849                                                                              Mop(Cast
20850                                                                                    nTy,
20851                                                                                  Var("sat_imm",
20852                                                                                      FTy 5)),
20853                                                                              Bop(Add,
20854                                                                                  Mop(Cast
20855                                                                                        nTy,
20856                                                                                      Var("sat_imm",
20857                                                                                          FTy 5)),
20858                                                                                  LN
20859                                                                                   1)),
20860                                                                          bVar"unsigned",
20861                                                                          Var("Rd",
20862                                                                              F4),
20863                                                                          Var("Rn",
20864                                                                              F4)])))),
20865                                                         ITE(Bop(Or,
20866                                                                 EQ(Var("Rd",
20867                                                                        F4),
20868                                                                    LW(15,
20869                                                                       4)),
20870                                                                 EQ(Var("Rn",
20871                                                                        F4),
20872                                                                    LW(15,
20873                                                                       4))),
20874                                                             Apply
20875                                                               (Call
20876                                                                  ("DECODE_UNPREDICTABLE",
20877                                                                   ATy(qTy,
20878                                                                       qTy),
20879                                                                   TP[Var("mc",
20880                                                                          CTy"MachineCode"),
20881                                                                      LS
20882                                                                       "Saturate"]),
20883                                                                qVar"s"),
20884                                                             qVar"s")],
20885                                                      TP[Apply
20886                                                           (Call
20887                                                              ("Skip",
20888                                                               ATy(qTy,
20889                                                                   CTy"instruction"),
20890                                                               LU),qVar"s"),
20891                                                         qVar"s"])))))),
20892                                 (Bop(And,Mop(Not,bVar"b'27"),
20893                                      Bop(And,bVar"b'25",
20894                                          Bop(And,Mop(Not,bVar"b'24"),
20895                                              Bop(And,bVar"b'23",
20896                                                  Bop(And,bVar"b'21",
20897                                                      Bop(And,
20898                                                          Mop(Not,
20899                                                              bVar"b'20"),
20900                                                          Bop(And,
20901                                                              Mop(Not,
20902                                                                  bVar"b'7"),
20903                                                              Bop(And,
20904                                                                  Mop(Not,
20905                                                                      bVar"b'6"),
20906                                                                  Bop(And,
20907                                                                      bVar"b'5",
20908                                                                      bVar"b'4"))))))))),
20909                                  Let(Var("Rn",F4),
20910                                      Mop(Cast F4,
20911                                          LL[bVar"b'3",bVar"b'2",
20912                                             bVar"b'1",bVar"b'0"]),
20913                                      Let(Var("Rd",F4),
20914                                          Mop(Cast F4,
20915                                              LL[bVar"b'15",bVar"b'14",
20916                                                 bVar"b'13",bVar"b'12"]),
20917                                          Let(Var("sat_imm",F4),
20918                                              Mop(Cast F4,
20919                                                  LL[bVar"b'19",
20920                                                     bVar"b'18",
20921                                                     bVar"b'17",bVar"b'16"]),
20922                                              Let(TP[bVar"v",qVar"s"],
20923                                                  Apply
20924                                                    (Call
20925                                                       ("Do",
20926                                                        ATy(qTy,
20927                                                            PTy(bTy,qTy)),
20928                                                        TP[Var("cond",F4),
20929                                                           Bop(Ge,
20930                                                               Apply
20931                                                                 (Call
20932                                                                    ("ArchVersion",
20933                                                                     ATy(qTy,
20934                                                                         nTy),
20935                                                                     LU),
20936                                                                  qVar"state"),
20937                                                               LN 6)]),
20938                                                     qVar"state"),
20939                                                  ITE(bVar"v",
20940                                                      TP[Let(bVar"unsigned",
20941                                                             EQ(Mop(Cast
20942                                                                      F1,
20943                                                                    LL[bVar"b'22"]),
20944                                                                LW(1,1)),
20945                                                             Call
20946                                                               ("Media",
20947                                                                CTy"instruction",
20948                                                                Call
20949                                                                  ("Saturate16",
20950                                                                   CTy"Media",
20951                                                                   TP[ITE(bVar"unsigned",
20952                                                                          Mop(Cast
20953                                                                                nTy,
20954                                                                              Var("sat_imm",
20955                                                                                  F4)),
20956                                                                          Bop(Add,
20957                                                                              Mop(Cast
20958                                                                                    nTy,
20959                                                                                  Var("sat_imm",
20960                                                                                      F4)),
20961                                                                              LN
20962                                                                               1)),
20963                                                                      bVar"unsigned",
20964                                                                      Var("Rd",
20965                                                                          F4),
20966                                                                      Var("Rn",
20967                                                                          F4)]))),
20968                                                         ITE(Bop(Or,
20969                                                                 EQ(Var("Rd",
20970                                                                        F4),
20971                                                                    LW(15,
20972                                                                       4)),
20973                                                                 Bop(Or,
20974                                                                     EQ(Var("Rn",
20975                                                                            F4),
20976                                                                        LW(15,
20977                                                                           4)),
20978                                                                     Mop(Not,
20979                                                                         EQ(Mop(Cast
20980                                                                                  F4,
20981                                                                                LL[bVar"b'11",
20982                                                                                   bVar"b'10",
20983                                                                                   bVar"b'9",
20984                                                                                   bVar"b'8"]),
20985                                                                            LW(15,
20986                                                                               4))))),
20987                                                             Apply
20988                                                               (Call
20989                                                                  ("DECODE_UNPREDICTABLE",
20990                                                                   ATy(qTy,
20991                                                                       qTy),
20992                                                                   TP[Var("mc",
20993                                                                          CTy"MachineCode"),
20994                                                                      LS
20995                                                                       "Saturate16"]),
20996                                                                qVar"s"),
20997                                                             qVar"s")],
20998                                                      TP[Apply
20999                                                           (Call
21000                                                              ("Skip",
21001                                                               ATy(qTy,
21002                                                                   CTy"instruction"),
21003                                                               LU),qVar"s"),
21004                                                         qVar"s"])))))),
21005                                 (Bop(And,Mop(Not,bVar"b'27"),
21006                                      Bop(And,bVar"b'25",
21007                                          Bop(And,Mop(Not,bVar"b'24"),
21008                                              Bop(And,bVar"b'23",
21009                                                  Bop(And,
21010                                                      Mop(Not,bVar"b'21"),
21011                                                      Bop(And,
21012                                                          Mop(Not,
21013                                                              bVar"b'20"),
21014                                                          Bop(And,
21015                                                              Mop(Not,
21016                                                                  bVar"b'7"),
21017                                                              Bop(And,
21018                                                                  bVar"b'6",
21019                                                                  Bop(And,
21020                                                                      bVar"b'5",
21021                                                                      bVar"b'4"))))))))),
21022                                  Let(Var("Rm",F4),
21023                                      Mop(Cast F4,
21024                                          LL[bVar"b'3",bVar"b'2",
21025                                             bVar"b'1",bVar"b'0"]),
21026                                      Let(Var("Rd",F4),
21027                                          Mop(Cast F4,
21028                                              LL[bVar"b'15",bVar"b'14",
21029                                                 bVar"b'13",bVar"b'12"]),
21030                                          Let(TP[bVar"v",qVar"s"],
21031                                              Apply
21032                                                (Call
21033                                                   ("Do",
21034                                                    ATy(qTy,PTy(bTy,qTy)),
21035                                                    TP[Var("cond",F4),
21036                                                       Bop(Ge,
21037                                                           Apply
21038                                                             (Call
21039                                                                ("ArchVersion",
21040                                                                 ATy(qTy,
21041                                                                     nTy),
21042                                                                 LU),
21043                                                              qVar"state"),
21044                                                           LN 6)]),
21045                                                 qVar"state"),
21046                                              ITE(bVar"v",
21047                                                  TP[Call
21048                                                       ("Media",
21049                                                        CTy"instruction",
21050                                                        Call
21051                                                          ("ExtendByte16",
21052                                                           CTy"Media",
21053                                                           TP[EQ(Mop(Cast
21054                                                                       F1,
21055                                                                     LL[bVar"b'22"]),
21056                                                                 LW(1,1)),
21057                                                              Var("Rd",F4),
21058                                                              Mop(Cast F4,
21059                                                                  LL[bVar"b'19",
21060                                                                     bVar"b'18",
21061                                                                     bVar"b'17",
21062                                                                     bVar"b'16"]),
21063                                                              Var("Rm",F4),
21064                                                              Mop(Cast nTy,
21065                                                                  CC[Mop(Cast
21066                                                                           (FTy 2),
21067                                                                         LL[bVar"b'11",
21068                                                                            bVar"b'10"]),
21069                                                                     LW(0,
21070                                                                        3)])])),
21071                                                     ITE(Bop(Or,
21072                                                             EQ(Var("Rd",
21073                                                                    F4),
21074                                                                LW(15,4)),
21075                                                             Bop(Or,
21076                                                                 EQ(Var("Rm",
21077                                                                        F4),
21078                                                                    LW(15,
21079                                                                       4)),
21080                                                                 Mop(Not,
21081                                                                     EQ(Mop(Cast
21082                                                                              (FTy 2),
21083                                                                            LL[bVar"b'9",
21084                                                                               bVar"b'8"]),
21085                                                                        LW(0,
21086                                                                           2))))),
21087                                                         Apply
21088                                                           (Call
21089                                                              ("DECODE_UNPREDICTABLE",
21090                                                               ATy(qTy,qTy),
21091                                                               TP[Var("mc",
21092                                                                      CTy"MachineCode"),
21093                                                                  LS
21094                                                                   "ExtendByte16"]),
21095                                                            qVar"s"),
21096                                                         qVar"s")],
21097                                                  TP[Apply
21098                                                       (Call
21099                                                          ("Skip",
21100                                                           ATy(qTy,
21101                                                               CTy"instruction"),
21102                                                           LU),qVar"s"),
21103                                                     qVar"s"]))))),
21104                                 (Bop(And,Mop(Not,bVar"b'27"),
21105                                      Bop(And,bVar"b'25",
21106                                          Bop(And,Mop(Not,bVar"b'24"),
21107                                              Bop(And,bVar"b'23",
21108                                                  Bop(And,bVar"b'21",
21109                                                      Bop(And,
21110                                                          Mop(Not,
21111                                                              bVar"b'20"),
21112                                                          Bop(And,
21113                                                              Mop(Not,
21114                                                                  bVar"b'7"),
21115                                                              Bop(And,
21116                                                                  bVar"b'6",
21117                                                                  Bop(And,
21118                                                                      bVar"b'5",
21119                                                                      bVar"b'4"))))))))),
21120                                  Let(Var("Rm",F4),
21121                                      Mop(Cast F4,
21122                                          LL[bVar"b'3",bVar"b'2",
21123                                             bVar"b'1",bVar"b'0"]),
21124                                      Let(Var("Rd",F4),
21125                                          Mop(Cast F4,
21126                                              LL[bVar"b'15",bVar"b'14",
21127                                                 bVar"b'13",bVar"b'12"]),
21128                                          Let(TP[bVar"v",qVar"s"],
21129                                              Apply
21130                                                (Call
21131                                                   ("Do",
21132                                                    ATy(qTy,PTy(bTy,qTy)),
21133                                                    TP[Var("cond",F4),
21134                                                       Bop(Ge,
21135                                                           Apply
21136                                                             (Call
21137                                                                ("ArchVersion",
21138                                                                 ATy(qTy,
21139                                                                     nTy),
21140                                                                 LU),
21141                                                              qVar"state"),
21142                                                           LN 6)]),
21143                                                 qVar"state"),
21144                                              ITE(bVar"v",
21145                                                  TP[Call
21146                                                       ("Media",
21147                                                        CTy"instruction",
21148                                                        Call
21149                                                          ("ExtendByte",
21150                                                           CTy"Media",
21151                                                           TP[EQ(Mop(Cast
21152                                                                       F1,
21153                                                                     LL[bVar"b'22"]),
21154                                                                 LW(1,1)),
21155                                                              Var("Rd",F4),
21156                                                              Mop(Cast F4,
21157                                                                  LL[bVar"b'19",
21158                                                                     bVar"b'18",
21159                                                                     bVar"b'17",
21160                                                                     bVar"b'16"]),
21161                                                              Var("Rm",F4),
21162                                                              Mop(Cast nTy,
21163                                                                  CC[Mop(Cast
21164                                                                           (FTy 2),
21165                                                                         LL[bVar"b'11",
21166                                                                            bVar"b'10"]),
21167                                                                     LW(0,
21168                                                                        3)])])),
21169                                                     ITE(Bop(Or,
21170                                                             EQ(Var("Rd",
21171                                                                    F4),
21172                                                                LW(15,4)),
21173                                                             Bop(Or,
21174                                                                 EQ(Var("Rm",
21175                                                                        F4),
21176                                                                    LW(15,
21177                                                                       4)),
21178                                                                 Mop(Not,
21179                                                                     EQ(Mop(Cast
21180                                                                              (FTy 2),
21181                                                                            LL[bVar"b'9",
21182                                                                               bVar"b'8"]),
21183                                                                        LW(0,
21184                                                                           2))))),
21185                                                         Apply
21186                                                           (Call
21187                                                              ("DECODE_UNPREDICTABLE",
21188                                                               ATy(qTy,qTy),
21189                                                               TP[Var("mc",
21190                                                                      CTy"MachineCode"),
21191                                                                  LS
21192                                                                   "ExtendByte"]),
21193                                                            qVar"s"),
21194                                                         qVar"s")],
21195                                                  TP[Apply
21196                                                       (Call
21197                                                          ("Skip",
21198                                                           ATy(qTy,
21199                                                               CTy"instruction"),
21200                                                           LU),qVar"s"),
21201                                                     qVar"s"]))))),
21202                                 (Bop(And,Mop(Not,bVar"b'27"),
21203                                      Bop(And,bVar"b'25",
21204                                          Bop(And,Mop(Not,bVar"b'24"),
21205                                              Bop(And,bVar"b'23",
21206                                                  Bop(And,bVar"b'21",
21207                                                      Bop(And,bVar"b'20",
21208                                                          Bop(And,
21209                                                              Mop(Not,
21210                                                                  bVar"b'7"),
21211                                                              Bop(And,
21212                                                                  bVar"b'6",
21213                                                                  Bop(And,
21214                                                                      bVar"b'5",
21215                                                                      bVar"b'4"))))))))),
21216                                  Let(Var("Rm",F4),
21217                                      Mop(Cast F4,
21218                                          LL[bVar"b'3",bVar"b'2",
21219                                             bVar"b'1",bVar"b'0"]),
21220                                      Let(Var("Rd",F4),
21221                                          Mop(Cast F4,
21222                                              LL[bVar"b'15",bVar"b'14",
21223                                                 bVar"b'13",bVar"b'12"]),
21224                                          Let(TP[bVar"v",qVar"s"],
21225                                              Apply
21226                                                (Call
21227                                                   ("Do",
21228                                                    ATy(qTy,PTy(bTy,qTy)),
21229                                                    TP[Var("cond",F4),
21230                                                       Bop(Ge,
21231                                                           Apply
21232                                                             (Call
21233                                                                ("ArchVersion",
21234                                                                 ATy(qTy,
21235                                                                     nTy),
21236                                                                 LU),
21237                                                              qVar"state"),
21238                                                           LN 6)]),
21239                                                 qVar"state"),
21240                                              ITE(bVar"v",
21241                                                  TP[Call
21242                                                       ("Media",
21243                                                        CTy"instruction",
21244                                                        Call
21245                                                          ("ExtendHalfword",
21246                                                           CTy"Media",
21247                                                           TP[EQ(Mop(Cast
21248                                                                       F1,
21249                                                                     LL[bVar"b'22"]),
21250                                                                 LW(1,1)),
21251                                                              Var("Rd",F4),
21252                                                              Mop(Cast F4,
21253                                                                  LL[bVar"b'19",
21254                                                                     bVar"b'18",
21255                                                                     bVar"b'17",
21256                                                                     bVar"b'16"]),
21257                                                              Var("Rm",F4),
21258                                                              Mop(Cast nTy,
21259                                                                  CC[Mop(Cast
21260                                                                           (FTy 2),
21261                                                                         LL[bVar"b'11",
21262                                                                            bVar"b'10"]),
21263                                                                     LW(0,
21264                                                                        3)])])),
21265                                                     ITE(Bop(Or,
21266                                                             EQ(Var("Rd",
21267                                                                    F4),
21268                                                                LW(15,4)),
21269                                                             Bop(Or,
21270                                                                 EQ(Var("Rm",
21271                                                                        F4),
21272                                                                    LW(15,
21273                                                                       4)),
21274                                                                 Mop(Not,
21275                                                                     EQ(Mop(Cast
21276                                                                              (FTy 2),
21277                                                                            LL[bVar"b'9",
21278                                                                               bVar"b'8"]),
21279                                                                        LW(0,
21280                                                                           2))))),
21281                                                         Apply
21282                                                           (Call
21283                                                              ("DECODE_UNPREDICTABLE",
21284                                                               ATy(qTy,qTy),
21285                                                               TP[Var("mc",
21286                                                                      CTy"MachineCode"),
21287                                                                  LS
21288                                                                   "ExtendHalfword"]),
21289                                                            qVar"s"),
21290                                                         qVar"s")],
21291                                                  TP[Apply
21292                                                       (Call
21293                                                          ("Skip",
21294                                                           ATy(qTy,
21295                                                               CTy"instruction"),
21296                                                           LU),qVar"s"),
21297                                                     qVar"s"]))))),
21298                                 (Bop(And,Mop(Not,bVar"b'27"),
21299                                      Bop(And,bVar"b'25",
21300                                          Bop(And,Mop(Not,bVar"b'24"),
21301                                              Bop(And,bVar"b'23",
21302                                                  Bop(And,
21303                                                      Mop(Not,bVar"b'22"),
21304                                                      Bop(And,bVar"b'21",
21305                                                          Bop(And,
21306                                                              bVar"b'20",
21307                                                              Bop(And,
21308                                                                  Mop(Not,
21309                                                                      bVar"b'7"),
21310                                                                  Bop(And,
21311                                                                      Mop(Not,
21312                                                                          bVar"b'6"),
21313                                                                      Bop(And,
21314                                                                          bVar"b'5",
21315                                                                          bVar"b'4")))))))))),
21316                                  Let(Var("Rm",F4),
21317                                      Mop(Cast F4,
21318                                          LL[bVar"b'3",bVar"b'2",
21319                                             bVar"b'1",bVar"b'0"]),
21320                                      Let(Var("Rd",F4),
21321                                          Mop(Cast F4,
21322                                              LL[bVar"b'15",bVar"b'14",
21323                                                 bVar"b'13",bVar"b'12"]),
21324                                          Let(TP[bVar"v",qVar"s"],
21325                                              Apply
21326                                                (Call
21327                                                   ("Do",
21328                                                    ATy(qTy,PTy(bTy,qTy)),
21329                                                    TP[Var("cond",F4),
21330                                                       Bop(Ge,
21331                                                           Apply
21332                                                             (Call
21333                                                                ("ArchVersion",
21334                                                                 ATy(qTy,
21335                                                                     nTy),
21336                                                                 LU),
21337                                                              qVar"state"),
21338                                                           LN 6)]),
21339                                                 qVar"state"),
21340                                              ITE(bVar"v",
21341                                                  TP[Call
21342                                                       ("Media",
21343                                                        CTy"instruction",
21344                                                        Call
21345                                                          ("ByteReverse",
21346                                                           CTy"Media",
21347                                                           TP[Var("Rd",F4),
21348                                                              Var("Rm",F4)])),
21349                                                     ITE(Bop(Or,
21350                                                             EQ(Var("Rd",
21351                                                                    F4),
21352                                                                LW(15,4)),
21353                                                             Bop(Or,
21354                                                                 EQ(Var("Rm",
21355                                                                        F4),
21356                                                                    LW(15,
21357                                                                       4)),
21358                                                                 Mop(Not,
21359                                                                     Bop(And,
21360                                                                         EQ(Mop(Cast
21361                                                                                  F4,
21362                                                                                LL[bVar"b'19",
21363                                                                                   bVar"b'18",
21364                                                                                   bVar"b'17",
21365                                                                                   bVar"b'16"]),
21366                                                                            LW(15,
21367                                                                               4)),
21368                                                                         EQ(Mop(Cast
21369                                                                                  F4,
21370                                                                                LL[bVar"b'11",
21371                                                                                   bVar"b'10",
21372                                                                                   bVar"b'9",
21373                                                                                   bVar"b'8"]),
21374                                                                            LW(15,
21375                                                                               4)))))),
21376                                                         Apply
21377                                                           (Call
21378                                                              ("DECODE_UNPREDICTABLE",
21379                                                               ATy(qTy,qTy),
21380                                                               TP[Var("mc",
21381                                                                      CTy"MachineCode"),
21382                                                                  LS
21383                                                                   "ByteReverse"]),
21384                                                            qVar"s"),
21385                                                         qVar"s")],
21386                                                  TP[Apply
21387                                                       (Call
21388                                                          ("Skip",
21389                                                           ATy(qTy,
21390                                                               CTy"instruction"),
21391                                                           LU),qVar"s"),
21392                                                     qVar"s"]))))),
21393                                 (Bop(And,Mop(Not,bVar"b'27"),
21394                                      Bop(And,bVar"b'25",
21395                                          Bop(And,Mop(Not,bVar"b'24"),
21396                                              Bop(And,bVar"b'23",
21397                                                  Bop(And,
21398                                                      Mop(Not,bVar"b'22"),
21399                                                      Bop(And,bVar"b'21",
21400                                                          Bop(And,
21401                                                              bVar"b'20",
21402                                                              Bop(And,
21403                                                                  bVar"b'7",
21404                                                                  Bop(And,
21405                                                                      Mop(Not,
21406                                                                          bVar"b'6"),
21407                                                                      Bop(And,
21408                                                                          bVar"b'5",
21409                                                                          bVar"b'4")))))))))),
21410                                  Let(Var("Rm",F4),
21411                                      Mop(Cast F4,
21412                                          LL[bVar"b'3",bVar"b'2",
21413                                             bVar"b'1",bVar"b'0"]),
21414                                      Let(Var("Rd",F4),
21415                                          Mop(Cast F4,
21416                                              LL[bVar"b'15",bVar"b'14",
21417                                                 bVar"b'13",bVar"b'12"]),
21418                                          Let(TP[bVar"v",qVar"s"],
21419                                              Apply
21420                                                (Call
21421                                                   ("Do",
21422                                                    ATy(qTy,PTy(bTy,qTy)),
21423                                                    TP[Var("cond",F4),
21424                                                       Bop(Ge,
21425                                                           Apply
21426                                                             (Call
21427                                                                ("ArchVersion",
21428                                                                 ATy(qTy,
21429                                                                     nTy),
21430                                                                 LU),
21431                                                              qVar"state"),
21432                                                           LN 6)]),
21433                                                 qVar"state"),
21434                                              ITE(bVar"v",
21435                                                  TP[Call
21436                                                       ("Media",
21437                                                        CTy"instruction",
21438                                                        Call
21439                                                          ("ByteReversePackedHalfword",
21440                                                           CTy"Media",
21441                                                           TP[Var("Rd",F4),
21442                                                              Var("Rm",F4)])),
21443                                                     ITE(Bop(Or,
21444                                                             EQ(Var("Rd",
21445                                                                    F4),
21446                                                                LW(15,4)),
21447                                                             Bop(Or,
21448                                                                 EQ(Var("Rm",
21449                                                                        F4),
21450                                                                    LW(15,
21451                                                                       4)),
21452                                                                 Mop(Not,
21453                                                                     Bop(And,
21454                                                                         EQ(Mop(Cast
21455                                                                                  F4,
21456                                                                                LL[bVar"b'19",
21457                                                                                   bVar"b'18",
21458                                                                                   bVar"b'17",
21459                                                                                   bVar"b'16"]),
21460                                                                            LW(15,
21461                                                                               4)),
21462                                                                         EQ(Mop(Cast
21463                                                                                  F4,
21464                                                                                LL[bVar"b'11",
21465                                                                                   bVar"b'10",
21466                                                                                   bVar"b'9",
21467                                                                                   bVar"b'8"]),
21468                                                                            LW(15,
21469                                                                               4)))))),
21470                                                         Apply
21471                                                           (Call
21472                                                              ("DECODE_UNPREDICTABLE",
21473                                                               ATy(qTy,qTy),
21474                                                               TP[Var("mc",
21475                                                                      CTy"MachineCode"),
21476                                                                  LS
21477                                                                   "ByteReversePackedHalfword"]),
21478                                                            qVar"s"),
21479                                                         qVar"s")],
21480                                                  TP[Apply
21481                                                       (Call
21482                                                          ("Skip",
21483                                                           ATy(qTy,
21484                                                               CTy"instruction"),
21485                                                           LU),qVar"s"),
21486                                                     qVar"s"]))))),
21487                                 (Bop(And,Mop(Not,bVar"b'27"),
21488                                      Bop(And,bVar"b'25",
21489                                          Bop(And,Mop(Not,bVar"b'24"),
21490                                              Bop(And,bVar"b'23",
21491                                                  Bop(And,bVar"b'22",
21492                                                      Bop(And,bVar"b'21",
21493                                                          Bop(And,
21494                                                              bVar"b'20",
21495                                                              Bop(And,
21496                                                                  bVar"b'7",
21497                                                                  Bop(And,
21498                                                                      Mop(Not,
21499                                                                          bVar"b'6"),
21500                                                                      Bop(And,
21501                                                                          bVar"b'5",
21502                                                                          bVar"b'4")))))))))),
21503                                  Let(Var("Rm",F4),
21504                                      Mop(Cast F4,
21505                                          LL[bVar"b'3",bVar"b'2",
21506                                             bVar"b'1",bVar"b'0"]),
21507                                      Let(Var("Rd",F4),
21508                                          Mop(Cast F4,
21509                                              LL[bVar"b'15",bVar"b'14",
21510                                                 bVar"b'13",bVar"b'12"]),
21511                                          Let(TP[bVar"v",qVar"s"],
21512                                              Apply
21513                                                (Call
21514                                                   ("Do",
21515                                                    ATy(qTy,PTy(bTy,qTy)),
21516                                                    TP[Var("cond",F4),
21517                                                       Bop(Ge,
21518                                                           Apply
21519                                                             (Call
21520                                                                ("ArchVersion",
21521                                                                 ATy(qTy,
21522                                                                     nTy),
21523                                                                 LU),
21524                                                              qVar"state"),
21525                                                           LN 6)]),
21526                                                 qVar"state"),
21527                                              ITE(bVar"v",
21528                                                  TP[Call
21529                                                       ("Media",
21530                                                        CTy"instruction",
21531                                                        Call
21532                                                          ("ByteReverseSignedHalfword",
21533                                                           CTy"Media",
21534                                                           TP[Var("Rd",F4),
21535                                                              Var("Rm",F4)])),
21536                                                     ITE(Bop(Or,
21537                                                             EQ(Var("Rd",
21538                                                                    F4),
21539                                                                LW(15,4)),
21540                                                             Bop(Or,
21541                                                                 EQ(Var("Rm",
21542                                                                        F4),
21543                                                                    LW(15,
21544                                                                       4)),
21545                                                                 Mop(Not,
21546                                                                     Bop(And,
21547                                                                         EQ(Mop(Cast
21548                                                                                  F4,
21549                                                                                LL[bVar"b'19",
21550                                                                                   bVar"b'18",
21551                                                                                   bVar"b'17",
21552                                                                                   bVar"b'16"]),
21553                                                                            LW(15,
21554                                                                               4)),
21555                                                                         EQ(Mop(Cast
21556                                                                                  F4,
21557                                                                                LL[bVar"b'11",
21558                                                                                   bVar"b'10",
21559                                                                                   bVar"b'9",
21560                                                                                   bVar"b'8"]),
21561                                                                            LW(15,
21562                                                                               4)))))),
21563                                                         Apply
21564                                                           (Call
21565                                                              ("DECODE_UNPREDICTABLE",
21566                                                               ATy(qTy,qTy),
21567                                                               TP[Var("mc",
21568                                                                      CTy"MachineCode"),
21569                                                                  LS
21570                                                                   "ByteReverseSignedHalfword"]),
21571                                                            qVar"s"),
21572                                                         qVar"s")],
21573                                                  TP[Apply
21574                                                       (Call
21575                                                          ("Skip",
21576                                                           ATy(qTy,
21577                                                               CTy"instruction"),
21578                                                           LU),qVar"s"),
21579                                                     qVar"s"]))))),
21580                                 (Bop(And,Mop(Not,bVar"b'27"),
21581                                      Bop(And,bVar"b'25",
21582                                          Bop(And,Mop(Not,bVar"b'24"),
21583                                              Bop(And,bVar"b'23",
21584                                                  Bop(And,bVar"b'22",
21585                                                      Bop(And,bVar"b'21",
21586                                                          Bop(And,
21587                                                              bVar"b'20",
21588                                                              Bop(And,
21589                                                                  Mop(Not,
21590                                                                      bVar"b'7"),
21591                                                                  Bop(And,
21592                                                                      Mop(Not,
21593                                                                          bVar"b'6"),
21594                                                                      Bop(And,
21595                                                                          bVar"b'5",
21596                                                                          bVar"b'4")))))))))),
21597                                  Let(Var("Rm",F4),
21598                                      Mop(Cast F4,
21599                                          LL[bVar"b'3",bVar"b'2",
21600                                             bVar"b'1",bVar"b'0"]),
21601                                      Let(Var("Rd",F4),
21602                                          Mop(Cast F4,
21603                                              LL[bVar"b'15",bVar"b'14",
21604                                                 bVar"b'13",bVar"b'12"]),
21605                                          Let(TP[bVar"v",qVar"s"],
21606                                              Apply
21607                                                (Call
21608                                                   ("Do",
21609                                                    ATy(qTy,PTy(bTy,qTy)),
21610                                                    TP[Var("cond",F4),
21611                                                       Bop(Ge,
21612                                                           Apply
21613                                                             (Call
21614                                                                ("ArchVersion",
21615                                                                 ATy(qTy,
21616                                                                     nTy),
21617                                                                 LU),
21618                                                              qVar"state"),
21619                                                           LN 6)]),
21620                                                 qVar"state"),
21621                                              ITE(bVar"v",
21622                                                  TP[Call
21623                                                       ("Media",
21624                                                        CTy"instruction",
21625                                                        Call
21626                                                          ("ReverseBits",
21627                                                           CTy"Media",
21628                                                           TP[Var("Rd",F4),
21629                                                              Var("Rm",F4)])),
21630                                                     ITE(Bop(Or,
21631                                                             EQ(Var("Rd",
21632                                                                    F4),
21633                                                                LW(15,4)),
21634                                                             Bop(Or,
21635                                                                 EQ(Var("Rm",
21636                                                                        F4),
21637                                                                    LW(15,
21638                                                                       4)),
21639                                                                 Mop(Not,
21640                                                                     Bop(And,
21641                                                                         EQ(Mop(Cast
21642                                                                                  F4,
21643                                                                                LL[bVar"b'19",
21644                                                                                   bVar"b'18",
21645                                                                                   bVar"b'17",
21646                                                                                   bVar"b'16"]),
21647                                                                            LW(15,
21648                                                                               4)),
21649                                                                         EQ(Mop(Cast
21650                                                                                  F4,
21651                                                                                LL[bVar"b'11",
21652                                                                                   bVar"b'10",
21653                                                                                   bVar"b'9",
21654                                                                                   bVar"b'8"]),
21655                                                                            LW(15,
21656                                                                               4)))))),
21657                                                         Apply
21658                                                           (Call
21659                                                              ("DECODE_UNPREDICTABLE",
21660                                                               ATy(qTy,qTy),
21661                                                               TP[Var("mc",
21662                                                                      CTy"MachineCode"),
21663                                                                  LS
21664                                                                   "ReverseBits"]),
21665                                                            qVar"s"),
21666                                                         qVar"s")],
21667                                                  TP[Apply
21668                                                       (Call
21669                                                          ("Skip",
21670                                                           ATy(qTy,
21671                                                               CTy"instruction"),
21672                                                           LU),qVar"s"),
21673                                                     qVar"s"]))))),
21674                                 (Bop(And,Mop(Not,bVar"b'27"),
21675                                      Bop(And,bVar"b'25",
21676                                          Bop(And,bVar"b'24",
21677                                              Bop(And,Mop(Not,bVar"b'23"),
21678                                                  Bop(And,
21679                                                      Mop(Not,bVar"b'22"),
21680                                                      Bop(And,
21681                                                          Mop(Not,
21682                                                              bVar"b'21"),
21683                                                          Bop(And,
21684                                                              Mop(Not,
21685                                                                  bVar"b'20"),
21686                                                              Bop(And,
21687                                                                  Mop(Not,
21688                                                                      bVar"b'7"),
21689                                                                  bVar"b'4")))))))),
21690                                  Let(Var("Rn",F4),
21691                                      Mop(Cast F4,
21692                                          LL[bVar"b'3",bVar"b'2",
21693                                             bVar"b'1",bVar"b'0"]),
21694                                      Let(Var("Rm",F4),
21695                                          Mop(Cast F4,
21696                                              LL[bVar"b'11",bVar"b'10",
21697                                                 bVar"b'9",bVar"b'8"]),
21698                                          Let(Var("Rd",F4),
21699                                              Mop(Cast F4,
21700                                                  LL[bVar"b'19",
21701                                                     bVar"b'18",
21702                                                     bVar"b'17",bVar"b'16"]),
21703                                              Let(TP[bVar"v",qVar"s"],
21704                                                  Apply
21705                                                    (Call
21706                                                       ("Do",
21707                                                        ATy(qTy,
21708                                                            PTy(bTy,qTy)),
21709                                                        TP[Var("cond",F4),
21710                                                           Bop(Ge,
21711                                                               Apply
21712                                                                 (Call
21713                                                                    ("ArchVersion",
21714                                                                     ATy(qTy,
21715                                                                         nTy),
21716                                                                     LU),
21717                                                                  qVar"state"),
21718                                                               LN 6)]),
21719                                                     qVar"state"),
21720                                                  ITE(bVar"v",
21721                                                      TP[Call
21722                                                           ("Multiply",
21723                                                            CTy"instruction",
21724                                                            Call
21725                                                              ("SignedMultiplyDual",
21726                                                               CTy"Multiply",
21727                                                               TP[EQ(Mop(Cast
21728                                                                           F1,
21729                                                                         LL[bVar"b'6"]),
21730                                                                     LW(1,
21731                                                                        1)),
21732                                                                  EQ(Mop(Cast
21733                                                                           F1,
21734                                                                         LL[bVar"b'5"]),
21735                                                                     LW(1,
21736                                                                        1)),
21737                                                                  Var("Rd",
21738                                                                      F4),
21739                                                                  Var("Rn",
21740                                                                      F4),
21741                                                                  Var("Rm",
21742                                                                      F4),
21743                                                                  Mop(Cast
21744                                                                        F4,
21745                                                                      LL[bVar"b'15",
21746                                                                         bVar"b'14",
21747                                                                         bVar"b'13",
21748                                                                         bVar"b'12"])])),
21749                                                         ITE(Bop(Or,
21750                                                                 EQ(Var("Rd",
21751                                                                        F4),
21752                                                                    LW(15,
21753                                                                       4)),
21754                                                                 Bop(Or,
21755                                                                     EQ(Var("Rn",
21756                                                                            F4),
21757                                                                        LW(15,
21758                                                                           4)),
21759                                                                     EQ(Var("Rm",
21760                                                                            F4),
21761                                                                        LW(15,
21762                                                                           4)))),
21763                                                             Apply
21764                                                               (Call
21765                                                                  ("DECODE_UNPREDICTABLE",
21766                                                                   ATy(qTy,
21767                                                                       qTy),
21768                                                                   TP[Var("mc",
21769                                                                          CTy"MachineCode"),
21770                                                                      LS
21771                                                                       "SignedMultiplyDual"]),
21772                                                                qVar"s"),
21773                                                             qVar"s")],
21774                                                      TP[Apply
21775                                                           (Call
21776                                                              ("Skip",
21777                                                               ATy(qTy,
21778                                                                   CTy"instruction"),
21779                                                               LU),qVar"s"),
21780                                                         qVar"s"])))))),
21781                                 (Bop(And,Mop(Not,bVar"b'27"),
21782                                      Bop(And,bVar"b'25",
21783                                          Bop(And,bVar"b'24",
21784                                              Bop(And,Mop(Not,bVar"b'23"),
21785                                                  Bop(And,bVar"b'22",
21786                                                      Bop(And,
21787                                                          Mop(Not,
21788                                                              bVar"b'21"),
21789                                                          Bop(And,
21790                                                              Mop(Not,
21791                                                                  bVar"b'20"),
21792                                                              Bop(And,
21793                                                                  Mop(Not,
21794                                                                      bVar"b'7"),
21795                                                                  bVar"b'4")))))))),
21796                                  Let(Var("Rn",F4),
21797                                      Mop(Cast F4,
21798                                          LL[bVar"b'3",bVar"b'2",
21799                                             bVar"b'1",bVar"b'0"]),
21800                                      Let(Var("Rm",F4),
21801                                          Mop(Cast F4,
21802                                              LL[bVar"b'11",bVar"b'10",
21803                                                 bVar"b'9",bVar"b'8"]),
21804                                          Let(Var("RdLo",F4),
21805                                              Mop(Cast F4,
21806                                                  LL[bVar"b'15",
21807                                                     bVar"b'14",
21808                                                     bVar"b'13",bVar"b'12"]),
21809                                              Let(Var("RdHi",F4),
21810                                                  Mop(Cast F4,
21811                                                      LL[bVar"b'19",
21812                                                         bVar"b'18",
21813                                                         bVar"b'17",
21814                                                         bVar"b'16"]),
21815                                                  Let(TP[bVar"v",qVar"s"],
21816                                                      Apply
21817                                                        (Call
21818                                                           ("Do",
21819                                                            ATy(qTy,
21820                                                                PTy(bTy,
21821                                                                    qTy)),
21822                                                            TP[Var("cond",
21823                                                                   F4),
21824                                                               Bop(Ge,
21825                                                                   Apply
21826                                                                     (Call
21827                                                                        ("ArchVersion",
21828                                                                         ATy(qTy,
21829                                                                             nTy),
21830                                                                         LU),
21831                                                                      qVar"state"),
21832                                                                   LN 6)]),
21833                                                         qVar"state"),
21834                                                      ITE(bVar"v",
21835                                                          TP[Call
21836                                                               ("Multiply",
21837                                                                CTy"instruction",
21838                                                                Call
21839                                                                  ("SignedMultiplyLongDual",
21840                                                                   CTy"Multiply",
21841                                                                   TP[EQ(Mop(Cast
21842                                                                               F1,
21843                                                                             LL[bVar"b'6"]),
21844                                                                         LW(1,
21845                                                                            1)),
21846                                                                      EQ(Mop(Cast
21847                                                                               F1,
21848                                                                             LL[bVar"b'5"]),
21849                                                                         LW(1,
21850                                                                            1)),
21851                                                                      Var("RdHi",
21852                                                                          F4),
21853                                                                      Var("RdLo",
21854                                                                          F4),
21855                                                                      Var("Rn",
21856                                                                          F4),
21857                                                                      Var("Rm",
21858                                                                          F4)])),
21859                                                             ITE(Bop(Or,
21860                                                                     EQ(Var("RdLo",
21861                                                                            F4),
21862                                                                        LW(15,
21863                                                                           4)),
21864                                                                     Bop(Or,
21865                                                                         EQ(Var("RdHi",
21866                                                                                F4),
21867                                                                            LW(15,
21868                                                                               4)),
21869                                                                         Bop(Or,
21870                                                                             EQ(Var("Rn",
21871                                                                                    F4),
21872                                                                                LW(15,
21873                                                                                   4)),
21874                                                                             EQ(Var("Rm",
21875                                                                                    F4),
21876                                                                                LW(15,
21877                                                                                   4))))),
21878                                                                 Apply
21879                                                                   (Call
21880                                                                      ("DECODE_UNPREDICTABLE",
21881                                                                       ATy(qTy,
21882                                                                           qTy),
21883                                                                       TP[Var("mc",
21884                                                                              CTy"MachineCode"),
21885                                                                          LS
21886                                                                           "SignedMultiplyLongDual"]),
21887                                                                    qVar"s"),
21888                                                                 qVar"s")],
21889                                                          TP[Apply
21890                                                               (Call
21891                                                                  ("Skip",
21892                                                                   ATy(qTy,
21893                                                                       CTy"instruction"),
21894                                                                   LU),
21895                                                                qVar"s"),
21896                                                             qVar"s"]))))))),
21897                                 (Bop(And,Mop(Not,bVar"b'27"),
21898                                      Bop(And,bVar"b'25",
21899                                          Bop(And,bVar"b'24",
21900                                              Bop(And,Mop(Not,bVar"b'23"),
21901                                                  Bop(And,bVar"b'22",
21902                                                      Bop(And,
21903                                                          Mop(Not,
21904                                                              bVar"b'21"),
21905                                                          Bop(And,
21906                                                              bVar"b'20",
21907                                                              Bop(And,
21908                                                                  Mop(Not,
21909                                                                      bVar"b'7"),
21910                                                                  Bop(And,
21911                                                                      Mop(Not,
21912                                                                          bVar"b'6"),
21913                                                                      bVar"b'4"))))))))),
21914                                  Let(Var("Rn",F4),
21915                                      Mop(Cast F4,
21916                                          LL[bVar"b'3",bVar"b'2",
21917                                             bVar"b'1",bVar"b'0"]),
21918                                      Let(Var("Rm",F4),
21919                                          Mop(Cast F4,
21920                                              LL[bVar"b'11",bVar"b'10",
21921                                                 bVar"b'9",bVar"b'8"]),
21922                                          Let(Var("Rd",F4),
21923                                              Mop(Cast F4,
21924                                                  LL[bVar"b'19",
21925                                                     bVar"b'18",
21926                                                     bVar"b'17",bVar"b'16"]),
21927                                              Let(TP[bVar"v",qVar"s"],
21928                                                  Apply
21929                                                    (Call
21930                                                       ("Do",
21931                                                        ATy(qTy,
21932                                                            PTy(bTy,qTy)),
21933                                                        TP[Var("cond",F4),
21934                                                           Bop(Ge,
21935                                                               Apply
21936                                                                 (Call
21937                                                                    ("ArchVersion",
21938                                                                     ATy(qTy,
21939                                                                         nTy),
21940                                                                     LU),
21941                                                                  qVar"state"),
21942                                                               LN 6)]),
21943                                                     qVar"state"),
21944                                                  ITE(bVar"v",
21945                                                      TP[Call
21946                                                           ("Multiply",
21947                                                            CTy"instruction",
21948                                                            Call
21949                                                              ("SignedMostSignificantMultiply",
21950                                                               CTy"Multiply",
21951                                                               TP[EQ(Mop(Cast
21952                                                                           F1,
21953                                                                         LL[bVar"b'5"]),
21954                                                                     LW(1,
21955                                                                        1)),
21956                                                                  Var("Rd",
21957                                                                      F4),
21958                                                                  Var("Rn",
21959                                                                      F4),
21960                                                                  Var("Rm",
21961                                                                      F4),
21962                                                                  Mop(Cast
21963                                                                        F4,
21964                                                                      LL[bVar"b'15",
21965                                                                         bVar"b'14",
21966                                                                         bVar"b'13",
21967                                                                         bVar"b'12"])])),
21968                                                         ITE(Bop(Or,
21969                                                                 EQ(Var("Rd",
21970                                                                        F4),
21971                                                                    LW(15,
21972                                                                       4)),
21973                                                                 Bop(Or,
21974                                                                     EQ(Var("Rn",
21975                                                                            F4),
21976                                                                        LW(15,
21977                                                                           4)),
21978                                                                     EQ(Var("Rm",
21979                                                                            F4),
21980                                                                        LW(15,
21981                                                                           4)))),
21982                                                             Apply
21983                                                               (Call
21984                                                                  ("DECODE_UNPREDICTABLE",
21985                                                                   ATy(qTy,
21986                                                                       qTy),
21987                                                                   TP[Var("mc",
21988                                                                          CTy"MachineCode"),
21989                                                                      LS
21990                                                                       "SignedMostSignificantMultiply"]),
21991                                                                qVar"s"),
21992                                                             qVar"s")],
21993                                                      TP[Apply
21994                                                           (Call
21995                                                              ("Skip",
21996                                                               ATy(qTy,
21997                                                                   CTy"instruction"),
21998                                                               LU),qVar"s"),
21999                                                         qVar"s"])))))),
22000                                 (Bop(And,Mop(Not,bVar"b'27"),
22001                                      Bop(And,bVar"b'25",
22002                                          Bop(And,bVar"b'24",
22003                                              Bop(And,Mop(Not,bVar"b'23"),
22004                                                  Bop(And,bVar"b'22",
22005                                                      Bop(And,
22006                                                          Mop(Not,
22007                                                              bVar"b'21"),
22008                                                          Bop(And,
22009                                                              bVar"b'20",
22010                                                              Bop(And,
22011                                                                  bVar"b'7",
22012                                                                  Bop(And,
22013                                                                      bVar"b'6",
22014                                                                      bVar"b'4"))))))))),
22015                                  Let(Var("Rn",F4),
22016                                      Mop(Cast F4,
22017                                          LL[bVar"b'3",bVar"b'2",
22018                                             bVar"b'1",bVar"b'0"]),
22019                                      Let(Var("Rm",F4),
22020                                          Mop(Cast F4,
22021                                              LL[bVar"b'11",bVar"b'10",
22022                                                 bVar"b'9",bVar"b'8"]),
22023                                          Let(Var("Ra",F4),
22024                                              Mop(Cast F4,
22025                                                  LL[bVar"b'15",
22026                                                     bVar"b'14",
22027                                                     bVar"b'13",bVar"b'12"]),
22028                                              Let(Var("Rd",F4),
22029                                                  Mop(Cast F4,
22030                                                      LL[bVar"b'19",
22031                                                         bVar"b'18",
22032                                                         bVar"b'17",
22033                                                         bVar"b'16"]),
22034                                                  Let(TP[bVar"v",qVar"s"],
22035                                                      Apply
22036                                                        (Call
22037                                                           ("Do",
22038                                                            ATy(qTy,
22039                                                                PTy(bTy,
22040                                                                    qTy)),
22041                                                            TP[Var("cond",
22042                                                                   F4),
22043                                                               Bop(Ge,
22044                                                                   Apply
22045                                                                     (Call
22046                                                                        ("ArchVersion",
22047                                                                         ATy(qTy,
22048                                                                             nTy),
22049                                                                         LU),
22050                                                                      qVar"state"),
22051                                                                   LN 6)]),
22052                                                         qVar"state"),
22053                                                      ITE(bVar"v",
22054                                                          TP[Call
22055                                                               ("Multiply",
22056                                                                CTy"instruction",
22057                                                                Call
22058                                                                  ("SignedMostSignificantMultiplySubtract",
22059                                                                   CTy"Multiply",
22060                                                                   TP[EQ(Mop(Cast
22061                                                                               F1,
22062                                                                             LL[bVar"b'5"]),
22063                                                                         LW(1,
22064                                                                            1)),
22065                                                                      Var("Rd",
22066                                                                          F4),
22067                                                                      Var("Rn",
22068                                                                          F4),
22069                                                                      Var("Rm",
22070                                                                          F4),
22071                                                                      Var("Ra",
22072                                                                          F4)])),
22073                                                             ITE(Bop(Or,
22074                                                                     EQ(Var("Rd",
22075                                                                            F4),
22076                                                                        LW(15,
22077                                                                           4)),
22078                                                                     Bop(Or,
22079                                                                         EQ(Var("Rn",
22080                                                                                F4),
22081                                                                            LW(15,
22082                                                                               4)),
22083                                                                         Bop(Or,
22084                                                                             EQ(Var("Rm",
22085                                                                                    F4),
22086                                                                                LW(15,
22087                                                                                   4)),
22088                                                                             EQ(Var("Ra",
22089                                                                                    F4),
22090                                                                                LW(15,
22091                                                                                   4))))),
22092                                                                 Apply
22093                                                                   (Call
22094                                                                      ("DECODE_UNPREDICTABLE",
22095                                                                       ATy(qTy,
22096                                                                           qTy),
22097                                                                       TP[Var("mc",
22098                                                                              CTy"MachineCode"),
22099                                                                          LS
22100                                                                           "SignedMostSignificantMultiplySubtract"]),
22101                                                                    qVar"s"),
22102                                                                 qVar"s")],
22103                                                          TP[Apply
22104                                                               (Call
22105                                                                  ("Skip",
22106                                                                   ATy(qTy,
22107                                                                       CTy"instruction"),
22108                                                                   LU),
22109                                                                qVar"s"),
22110                                                             qVar"s"]))))))),
22111                                 (Bop(And,Mop(Not,bVar"b'27"),
22112                                      Bop(And,bVar"b'25",
22113                                          Bop(And,bVar"b'24",
22114                                              Bop(And,bVar"b'23",
22115                                                  Bop(And,
22116                                                      Mop(Not,bVar"b'22"),
22117                                                      Bop(And,
22118                                                          Mop(Not,
22119                                                              bVar"b'21"),
22120                                                          Bop(And,
22121                                                              Mop(Not,
22122                                                                  bVar"b'20"),
22123                                                              Bop(And,
22124                                                                  Mop(Not,
22125                                                                      bVar"b'7"),
22126                                                                  Bop(And,
22127                                                                      Mop(Not,
22128                                                                          bVar"b'6"),
22129                                                                      Bop(And,
22130                                                                          Mop(Not,
22131                                                                              bVar"b'5"),
22132                                                                          bVar"b'4")))))))))),
22133                                  Let(Var("Rn",F4),
22134                                      Mop(Cast F4,
22135                                          LL[bVar"b'3",bVar"b'2",
22136                                             bVar"b'1",bVar"b'0"]),
22137                                      Let(Var("Rm",F4),
22138                                          Mop(Cast F4,
22139                                              LL[bVar"b'11",bVar"b'10",
22140                                                 bVar"b'9",bVar"b'8"]),
22141                                          Let(Var("Rd",F4),
22142                                              Mop(Cast F4,
22143                                                  LL[bVar"b'19",
22144                                                     bVar"b'18",
22145                                                     bVar"b'17",bVar"b'16"]),
22146                                              Let(TP[bVar"v",qVar"s"],
22147                                                  Apply
22148                                                    (Call
22149                                                       ("Do",
22150                                                        ATy(qTy,
22151                                                            PTy(bTy,qTy)),
22152                                                        TP[Var("cond",F4),
22153                                                           Bop(Ge,
22154                                                               Apply
22155                                                                 (Call
22156                                                                    ("ArchVersion",
22157                                                                     ATy(qTy,
22158                                                                         nTy),
22159                                                                     LU),
22160                                                                  qVar"state"),
22161                                                               LN 6)]),
22162                                                     qVar"state"),
22163                                                  ITE(bVar"v",
22164                                                      TP[Call
22165                                                           ("SIMD",
22166                                                            CTy"instruction",
22167                                                            Call
22168                                                              ("UnsignedSumAbsoluteDifferences",
22169                                                               CTy"SIMD",
22170                                                               TP[Var("Rd",
22171                                                                      F4),
22172                                                                  Var("Rn",
22173                                                                      F4),
22174                                                                  Var("Rm",
22175                                                                      F4),
22176                                                                  Mop(Cast
22177                                                                        F4,
22178                                                                      LL[bVar"b'15",
22179                                                                         bVar"b'14",
22180                                                                         bVar"b'13",
22181                                                                         bVar"b'12"])])),
22182                                                         ITE(Bop(Or,
22183                                                                 EQ(Var("Rd",
22184                                                                        F4),
22185                                                                    LW(15,
22186                                                                       4)),
22187                                                                 Bop(Or,
22188                                                                     EQ(Var("Rn",
22189                                                                            F4),
22190                                                                        LW(15,
22191                                                                           4)),
22192                                                                     EQ(Var("Rm",
22193                                                                            F4),
22194                                                                        LW(15,
22195                                                                           4)))),
22196                                                             Apply
22197                                                               (Call
22198                                                                  ("DECODE_UNPREDICTABLE",
22199                                                                   ATy(qTy,
22200                                                                       qTy),
22201                                                                   TP[Var("mc",
22202                                                                          CTy"MachineCode"),
22203                                                                      LS
22204                                                                       "UnsignedSumAbsoluteDifferences"]),
22205                                                                qVar"s"),
22206                                                             qVar"s")],
22207                                                      TP[Apply
22208                                                           (Call
22209                                                              ("Skip",
22210                                                               ATy(qTy,
22211                                                                   CTy"instruction"),
22212                                                               LU),qVar"s"),
22213                                                         qVar"s"])))))),
22214                                 (Bop(And,Mop(Not,bVar"b'27"),
22215                                      Bop(And,bVar"b'25",
22216                                          Bop(And,bVar"b'24",
22217                                              Bop(And,bVar"b'23",
22218                                                  Bop(And,bVar"b'21",
22219                                                      Bop(And,bVar"b'6",
22220                                                          Bop(And,
22221                                                              Mop(Not,
22222                                                                  bVar"b'5"),
22223                                                              bVar"b'4"))))))),
22224                                  Let(Var("Rn",F4),
22225                                      Mop(Cast F4,
22226                                          LL[bVar"b'3",bVar"b'2",
22227                                             bVar"b'1",bVar"b'0"]),
22228                                      Let(Var("Rd",F4),
22229                                          Mop(Cast F4,
22230                                              LL[bVar"b'15",bVar"b'14",
22231                                                 bVar"b'13",bVar"b'12"]),
22232                                          Let(TP[bVar"v",qVar"s"],
22233                                              Apply
22234                                                (Call
22235                                                   ("Do",
22236                                                    ATy(qTy,PTy(bTy,qTy)),
22237                                                    TP[Var("cond",F4),
22238                                                       Bop(Ge,
22239                                                           Apply
22240                                                             (Call
22241                                                                ("ArchVersion",
22242                                                                 ATy(qTy,
22243                                                                     nTy),
22244                                                                 LU),
22245                                                              qVar"state"),
22246                                                           LN 6)]),
22247                                                 qVar"state"),
22248                                              ITE(bVar"v",
22249                                                  Let(nVar"lsbit",
22250                                                      Mop(Cast nTy,
22251                                                          Mop(Cast(FTy 5),
22252                                                              LL[bVar"b'11",
22253                                                                 bVar"b'10",
22254                                                                 bVar"b'9",
22255                                                                 bVar"b'8",
22256                                                                 bVar"b'7"])),
22257                                                      Let(nVar"widthminus1",
22258                                                          Mop(Cast nTy,
22259                                                              Mop(Cast
22260                                                                    (FTy 5),
22261                                                                  LL[bVar"b'20",
22262                                                                     bVar"b'19",
22263                                                                     bVar"b'18",
22264                                                                     bVar"b'17",
22265                                                                     bVar"b'16"])),
22266                                                          TP[Call
22267                                                               ("Media",
22268                                                                CTy"instruction",
22269                                                                Call
22270                                                                  ("BitFieldExtract",
22271                                                                   CTy"Media",
22272                                                                   TP[EQ(Mop(Cast
22273                                                                               F1,
22274                                                                             LL[bVar"b'22"]),
22275                                                                         LW(1,
22276                                                                            1)),
22277                                                                      Var("Rd",
22278                                                                          F4),
22279                                                                      Var("Rn",
22280                                                                          F4),
22281                                                                      nVar"lsbit",
22282                                                                      nVar"widthminus1"])),
22283                                                             ITE(Bop(Or,
22284                                                                     EQ(Var("Rd",
22285                                                                            F4),
22286                                                                        LW(15,
22287                                                                           4)),
22288                                                                     Bop(Or,
22289                                                                         EQ(Var("Rn",
22290                                                                                F4),
22291                                                                            LW(15,
22292                                                                               4)),
22293                                                                         Bop(Lt,
22294                                                                             LN
22295                                                                              31,
22296                                                                             Bop(Add,
22297                                                                                 nVar"lsbit",
22298                                                                                 nVar"widthminus1")))),
22299                                                                 Apply
22300                                                                   (Call
22301                                                                      ("DECODE_UNPREDICTABLE",
22302                                                                       ATy(qTy,
22303                                                                           qTy),
22304                                                                       TP[Var("mc",
22305                                                                              CTy"MachineCode"),
22306                                                                          LS
22307                                                                           "BitFieldExtract"]),
22308                                                                    qVar"s"),
22309                                                                 qVar"s")])),
22310                                                  TP[Apply
22311                                                       (Call
22312                                                          ("Skip",
22313                                                           ATy(qTy,
22314                                                               CTy"instruction"),
22315                                                           LU),qVar"s"),
22316                                                     qVar"s"]))))),
22317                                 (Bop(And,Mop(Not,bVar"b'27"),
22318                                      Bop(And,bVar"b'25",
22319                                          Bop(And,bVar"b'24",
22320                                              Bop(And,bVar"b'23",
22321                                                  Bop(And,bVar"b'22",
22322                                                      Bop(And,
22323                                                          Mop(Not,
22324                                                              bVar"b'21"),
22325                                                          Bop(And,
22326                                                              Mop(Not,
22327                                                                  bVar"b'6"),
22328                                                              Bop(And,
22329                                                                  Mop(Not,
22330                                                                      bVar"b'5"),
22331                                                                  bVar"b'4")))))))),
22332                                  Let(Var("Rd",F4),
22333                                      Mop(Cast F4,
22334                                          LL[bVar"b'15",bVar"b'14",
22335                                             bVar"b'13",bVar"b'12"]),
22336                                      Let(TP[bVar"v",qVar"s"],
22337                                          Apply
22338                                            (Call
22339                                               ("Do",
22340                                                ATy(qTy,PTy(bTy,qTy)),
22341                                                TP[Var("cond",F4),
22342                                                   Bop(Ge,
22343                                                       Apply
22344                                                         (Call
22345                                                            ("ArchVersion",
22346                                                             ATy(qTy,nTy),
22347                                                             LU),
22348                                                          qVar"state"),
22349                                                       LN 6)]),qVar"state"),
22350                                          ITE(bVar"v",
22351                                              Let(nVar"lsbit",
22352                                                  Mop(Cast nTy,
22353                                                      Mop(Cast(FTy 5),
22354                                                          LL[bVar"b'11",
22355                                                             bVar"b'10",
22356                                                             bVar"b'9",
22357                                                             bVar"b'8",
22358                                                             bVar"b'7"])),
22359                                                  Let(nVar"msbit",
22360                                                      Mop(Cast nTy,
22361                                                          Mop(Cast(FTy 5),
22362                                                              LL[bVar"b'20",
22363                                                                 bVar"b'19",
22364                                                                 bVar"b'18",
22365                                                                 bVar"b'17",
22366                                                                 bVar"b'16"])),
22367                                                      TP[Call
22368                                                           ("Media",
22369                                                            CTy"instruction",
22370                                                            Call
22371                                                              ("BitFieldClearOrInsert",
22372                                                               CTy"Media",
22373                                                               TP[Var("Rd",
22374                                                                      F4),
22375                                                                  Mop(Cast
22376                                                                        F4,
22377                                                                      LL[bVar"b'3",
22378                                                                         bVar"b'2",
22379                                                                         bVar"b'1",
22380                                                                         bVar"b'0"]),
22381                                                                  nVar"lsbit",
22382                                                                  nVar"msbit"])),
22383                                                         ITE(Bop(Or,
22384                                                                 EQ(Var("Rd",
22385                                                                        F4),
22386                                                                    LW(15,
22387                                                                       4)),
22388                                                                 Bop(Lt,
22389                                                                     nVar"msbit",
22390                                                                     nVar"lsbit")),
22391                                                             Apply
22392                                                               (Call
22393                                                                  ("DECODE_UNPREDICTABLE",
22394                                                                   ATy(qTy,
22395                                                                       qTy),
22396                                                                   TP[Var("mc",
22397                                                                          CTy"MachineCode"),
22398                                                                      LS
22399                                                                       "BitFieldClearOrInsert"]),
22400                                                                qVar"s"),
22401                                                             qVar"s")])),
22402                                              TP[Apply
22403                                                   (Call
22404                                                      ("Skip",
22405                                                       ATy(qTy,
22406                                                           CTy"instruction"),
22407                                                       LU),qVar"s"),
22408                                                 qVar"s"])))),
22409                                 (Bop(And,bVar"b'27",
22410                                      Bop(And,bVar"b'25",bVar"b'24")),
22411                                  Let(TP[bVar"v",qVar"s"],
22412                                      Apply
22413                                        (Call
22414                                           ("Do",ATy(qTy,PTy(bTy,qTy)),
22415                                            TP[Var("cond",F4),LT]),
22416                                         qVar"state"),
22417                                      TP[ITE(bVar"v",
22418                                             Call
22419                                               ("System",CTy"instruction",
22420                                                Call
22421                                                  ("SupervisorCall",
22422                                                   CTy"System",
22423                                                   Mop(SE F32,
22424                                                       Mop(Cast(FTy 24),
22425                                                           LL[bVar"b'23",
22426                                                              bVar"b'22",
22427                                                              bVar"b'21",
22428                                                              bVar"b'20",
22429                                                              bVar"b'19",
22430                                                              bVar"b'18",
22431                                                              bVar"b'17",
22432                                                              bVar"b'16",
22433                                                              bVar"b'15",
22434                                                              bVar"b'14",
22435                                                              bVar"b'13",
22436                                                              bVar"b'12",
22437                                                              bVar"b'11",
22438                                                              bVar"b'10",
22439                                                              bVar"b'9",
22440                                                              bVar"b'8",
22441                                                              bVar"b'7",
22442                                                              bVar"b'6",
22443                                                              bVar"b'5",
22444                                                              bVar"b'4",
22445                                                              bVar"b'3",
22446                                                              bVar"b'2",
22447                                                              bVar"b'1",
22448                                                              bVar"b'0"])))),
22449                                             Apply
22450                                               (Call
22451                                                  ("Skip",
22452                                                   ATy(qTy,
22453                                                       CTy"instruction"),
22454                                                   LU),qVar"s")),qVar"s"])),
22455                                 (Bop(And,bVar"b'27",
22456                                      Bop(And,bVar"b'11",
22457                                          Bop(And,Mop(Not,bVar"b'10"),
22458                                              bVar"b'9"))),
22459                                  Let(TP[bVar"defined",sVar"unpred",
22460                                         Var("i",CTy"instruction")],
22461                                      Apply
22462                                        (Call
22463                                           ("DecodeVFP",
22464                                            ATy(qTy,
22465                                                PTy(bTy,
22466                                                    PTy(sTy,
22467                                                        CTy"instruction"))),
22468                                            Var("w",F32)),qVar"state"),
22469                                      Let(TP[bVar"v",qVar"s"],
22470                                          Apply
22471                                            (Call
22472                                               ("Do",
22473                                                ATy(qTy,PTy(bTy,qTy)),
22474                                                TP[Var("cond",F4),
22475                                                   bVar"defined"]),
22476                                             qVar"state"),
22477                                          ITE(bVar"v",
22478                                              TP[Var("i",CTy"instruction"),
22479                                                 ITE(Mop(Not,
22480                                                         EQ(sVar"unpred",
22481                                                            LS"")),
22482                                                     Apply
22483                                                       (Call
22484                                                          ("DECODE_UNPREDICTABLE",
22485                                                           ATy(qTy,qTy),
22486                                                           TP[Var("mc",
22487                                                                  CTy"MachineCode"),
22488                                                              CC[LS
22489                                                                  "DecodeVFP: ",
22490                                                                 sVar"unpred"]]),
22491                                                        qVar"s"),qVar"s")],
22492                                              TP[Apply
22493                                                   (Call
22494                                                      ("Skip",
22495                                                       ATy(qTy,
22496                                                           CTy"instruction"),
22497                                                       LU),qVar"s"),
22498                                                 qVar"s"]))))],
22499                                Apply
22500                                  (Call
22501                                     ("UndefinedARM",
22502                                      ATy(qTy,PTy(CTy"instruction",qTy)),
22503                                      Var("cond",F4)),qVar"state"))),
22504                           (bVar"b'27",
22505                            ITB([(Bop(And,Mop(Not,bVar"b'25"),
22506                                      Bop(And,bVar"b'22",
22507                                          Mop(Not,bVar"b'20"))),
22508                                  Let(Var("registers",F16),
22509                                      Mop(Cast F16,
22510                                          LL[bVar"b'15",bVar"b'14",
22511                                             bVar"b'13",bVar"b'12",
22512                                             bVar"b'11",bVar"b'10",
22513                                             bVar"b'9",bVar"b'8",
22514                                             bVar"b'7",bVar"b'6",
22515                                             bVar"b'5",bVar"b'4",
22516                                             bVar"b'3",bVar"b'2",
22517                                             bVar"b'1",bVar"b'0"]),
22518                                      Let(Var("Rn",F4),
22519                                          Mop(Cast F4,
22520                                              LL[bVar"b'19",bVar"b'18",
22521                                                 bVar"b'17",bVar"b'16"]),
22522                                          Let(Var("U",F1),
22523                                              Mop(Cast F1,LL[bVar"b'23"]),
22524                                              Let(TP[bVar"v",qVar"s"],
22525                                                  Apply
22526                                                    (Call
22527                                                       ("Do",
22528                                                        ATy(qTy,
22529                                                            PTy(bTy,qTy)),
22530                                                        TP[Var("cond",F4),
22531                                                           LT]),
22532                                                     qVar"state"),
22533                                                  ITE(bVar"v",
22534                                                      TP[Call
22535                                                           ("Store",
22536                                                            CTy"instruction",
22537                                                            Call
22538                                                              ("StoreMultipleUserRegisters",
22539                                                               CTy"Store",
22540                                                               TP[EQ(Var("U",
22541                                                                         F1),
22542                                                                     LW(1,
22543                                                                        1)),
22544                                                                  EQ(Mop(Cast
22545                                                                           F1,
22546                                                                         LL[bVar"b'24"]),
22547                                                                     Var("U",
22548                                                                         F1)),
22549                                                                  Var("Rn",
22550                                                                      F4),
22551                                                                  Var("registers",
22552                                                                      F16)])),
22553                                                         ITE(Bop(Or,
22554                                                                 EQ(Var("Rn",
22555                                                                        F4),
22556                                                                    LW(15,
22557                                                                       4)),
22558                                                                 Bop(Or,
22559                                                                     Bop(Lt,
22560                                                                         Call
22561                                                                           ("BitCount",
22562                                                                            nTy,
22563                                                                            Var("registers",
22564                                                                                F16)),
22565                                                                         LN
22566                                                                          1),
22567                                                                     Mop(Not,
22568                                                                         EQ(Mop(Cast
22569                                                                                  F1,
22570                                                                                LL[bVar"b'21"]),
22571                                                                            LW(0,
22572                                                                               1))))),
22573                                                             Apply
22574                                                               (Call
22575                                                                  ("DECODE_UNPREDICTABLE",
22576                                                                   ATy(qTy,
22577                                                                       qTy),
22578                                                                   TP[Var("mc",
22579                                                                          CTy"MachineCode"),
22580                                                                      LS
22581                                                                       "StoreMultipleUserRegisters"]),
22582                                                                qVar"s"),
22583                                                             qVar"s")],
22584                                                      TP[Apply
22585                                                           (Call
22586                                                              ("Skip",
22587                                                               ATy(qTy,
22588                                                                   CTy"instruction"),
22589                                                               LU),qVar"s"),
22590                                                         qVar"s"])))))),
22591                                 (Bop(And,Mop(Not,bVar"b'25"),
22592                                      Bop(And,Mop(Not,bVar"b'22"),
22593                                          Mop(Not,bVar"b'20"))),
22594                                  Let(Var("registers",F16),
22595                                      Mop(Cast F16,
22596                                          LL[bVar"b'15",bVar"b'14",
22597                                             bVar"b'13",bVar"b'12",
22598                                             bVar"b'11",bVar"b'10",
22599                                             bVar"b'9",bVar"b'8",
22600                                             bVar"b'7",bVar"b'6",
22601                                             bVar"b'5",bVar"b'4",
22602                                             bVar"b'3",bVar"b'2",
22603                                             bVar"b'1",bVar"b'0"]),
22604                                      Let(Var("Rn",F4),
22605                                          Mop(Cast F4,
22606                                              LL[bVar"b'19",bVar"b'18",
22607                                                 bVar"b'17",bVar"b'16"]),
22608                                          Let(TP[bVar"v",qVar"s"],
22609                                              Apply
22610                                                (Call
22611                                                   ("Do",
22612                                                    ATy(qTy,PTy(bTy,qTy)),
22613                                                    TP[Var("cond",F4),LT]),
22614                                                 qVar"state"),
22615                                              ITE(bVar"v",
22616                                                  TP[Call
22617                                                       ("Store",
22618                                                        CTy"instruction",
22619                                                        Call
22620                                                          ("StoreMultiple",
22621                                                           CTy"Store",
22622                                                           TP[EQ(Mop(Cast
22623                                                                       F1,
22624                                                                     LL[bVar"b'23"]),
22625                                                                 LW(1,1)),
22626                                                              EQ(Mop(Cast
22627                                                                       F1,
22628                                                                     LL[bVar"b'24"]),
22629                                                                 LW(1,1)),
22630                                                              EQ(Mop(Cast
22631                                                                       F1,
22632                                                                     LL[bVar"b'21"]),
22633                                                                 LW(1,1)),
22634                                                              Var("Rn",F4),
22635                                                              Var("registers",
22636                                                                  F16)])),
22637                                                     ITE(Bop(Or,
22638                                                             EQ(Var("Rn",
22639                                                                    F4),
22640                                                                LW(15,4)),
22641                                                             Bop(Lt,
22642                                                                 Call
22643                                                                   ("BitCount",
22644                                                                    nTy,
22645                                                                    Var("registers",
22646                                                                        F16)),
22647                                                                 LN 1)),
22648                                                         Apply
22649                                                           (Call
22650                                                              ("DECODE_UNPREDICTABLE",
22651                                                               ATy(qTy,qTy),
22652                                                               TP[Var("mc",
22653                                                                      CTy"MachineCode"),
22654                                                                  LS
22655                                                                   "StoreMultiple"]),
22656                                                            qVar"s"),
22657                                                         qVar"s")],
22658                                                  TP[Apply
22659                                                       (Call
22660                                                          ("Skip",
22661                                                           ATy(qTy,
22662                                                               CTy"instruction"),
22663                                                           LU),qVar"s"),
22664                                                     qVar"s"]))))),
22665                                 (Bop(And,Mop(Not,bVar"b'25"),
22666                                      Bop(And,bVar"b'22",
22667                                          Bop(And,bVar"b'20",
22668                                              Mop(Not,bVar"b'15")))),
22669                                  Let(Var("registers",FTy 15),
22670                                      Mop(Cast(FTy 15),
22671                                          LL[bVar"b'14",bVar"b'13",
22672                                             bVar"b'12",bVar"b'11",
22673                                             bVar"b'10",bVar"b'9",
22674                                             bVar"b'8",bVar"b'7",
22675                                             bVar"b'6",bVar"b'5",
22676                                             bVar"b'4",bVar"b'3",
22677                                             bVar"b'2",bVar"b'1",bVar"b'0"]),
22678                                      Let(Var("Rn",F4),
22679                                          Mop(Cast F4,
22680                                              LL[bVar"b'19",bVar"b'18",
22681                                                 bVar"b'17",bVar"b'16"]),
22682                                          Let(Var("U",F1),
22683                                              Mop(Cast F1,LL[bVar"b'23"]),
22684                                              Let(TP[bVar"v",qVar"s"],
22685                                                  Apply
22686                                                    (Call
22687                                                       ("Do",
22688                                                        ATy(qTy,
22689                                                            PTy(bTy,qTy)),
22690                                                        TP[Var("cond",F4),
22691                                                           LT]),
22692                                                     qVar"state"),
22693                                                  ITE(bVar"v",
22694                                                      TP[Call
22695                                                           ("Load",
22696                                                            CTy"instruction",
22697                                                            Call
22698                                                              ("LoadMultipleUserRegisters",
22699                                                               CTy"Load",
22700                                                               TP[EQ(Var("U",
22701                                                                         F1),
22702                                                                     LW(1,
22703                                                                        1)),
22704                                                                  EQ(Mop(Cast
22705                                                                           F1,
22706                                                                         LL[bVar"b'24"]),
22707                                                                     Var("U",
22708                                                                         F1)),
22709                                                                  Var("Rn",
22710                                                                      F4),
22711                                                                  Var("registers",
22712                                                                      FTy 15)])),
22713                                                         ITE(Bop(Or,
22714                                                                 EQ(Var("Rn",
22715                                                                        F4),
22716                                                                    LW(15,
22717                                                                       4)),
22718                                                                 Bop(Or,
22719                                                                     Bop(Lt,
22720                                                                         Call
22721                                                                           ("BitCount",
22722                                                                            nTy,
22723                                                                            Var("registers",
22724                                                                                FTy 15)),
22725                                                                         LN
22726                                                                          1),
22727                                                                     Mop(Not,
22728                                                                         EQ(Mop(Cast
22729                                                                                  F1,
22730                                                                                LL[bVar"b'21"]),
22731                                                                            LW(0,
22732                                                                               1))))),
22733                                                             Apply
22734                                                               (Call
22735                                                                  ("DECODE_UNPREDICTABLE",
22736                                                                   ATy(qTy,
22737                                                                       qTy),
22738                                                                   TP[Var("mc",
22739                                                                          CTy"MachineCode"),
22740                                                                      LS
22741                                                                       "LoadMultipleUserRegisters"]),
22742                                                                qVar"s"),
22743                                                             qVar"s")],
22744                                                      TP[Apply
22745                                                           (Call
22746                                                              ("Skip",
22747                                                               ATy(qTy,
22748                                                                   CTy"instruction"),
22749                                                               LU),qVar"s"),
22750                                                         qVar"s"])))))),
22751                                 (Bop(And,Mop(Not,bVar"b'25"),
22752                                      Bop(And,bVar"b'22",
22753                                          Bop(And,bVar"b'20",bVar"b'15"))),
22754                                  Let(Var("registers",FTy 15),
22755                                      Mop(Cast(FTy 15),
22756                                          LL[bVar"b'14",bVar"b'13",
22757                                             bVar"b'12",bVar"b'11",
22758                                             bVar"b'10",bVar"b'9",
22759                                             bVar"b'8",bVar"b'7",
22760                                             bVar"b'6",bVar"b'5",
22761                                             bVar"b'4",bVar"b'3",
22762                                             bVar"b'2",bVar"b'1",bVar"b'0"]),
22763                                      Let(Var("Rn",F4),
22764                                          Mop(Cast F4,
22765                                              LL[bVar"b'19",bVar"b'18",
22766                                                 bVar"b'17",bVar"b'16"]),
22767                                          Let(Var("U",F1),
22768                                              Mop(Cast F1,LL[bVar"b'23"]),
22769                                              Let(TP[bVar"v",qVar"s"],
22770                                                  Apply
22771                                                    (Call
22772                                                       ("Do",
22773                                                        ATy(qTy,
22774                                                            PTy(bTy,qTy)),
22775                                                        TP[Var("cond",F4),
22776                                                           LT]),
22777                                                     qVar"state"),
22778                                                  ITE(bVar"v",
22779                                                      Let(bVar"wback",
22780                                                          EQ(Mop(Cast F1,
22781                                                                 LL[bVar"b'21"]),
22782                                                             LW(1,1)),
22783                                                          TP[Call
22784                                                               ("Load",
22785                                                                CTy"instruction",
22786                                                                Call
22787                                                                  ("LoadMultipleExceptionReturn",
22788                                                                   CTy"Load",
22789                                                                   TP[EQ(Var("U",
22790                                                                             F1),
22791                                                                         LW(1,
22792                                                                            1)),
22793                                                                      EQ(Mop(Cast
22794                                                                               F1,
22795                                                                             LL[bVar"b'24"]),
22796                                                                         Var("U",
22797                                                                             F1)),
22798                                                                      bVar"wback",
22799                                                                      Var("Rn",
22800                                                                          F4),
22801                                                                      Var("registers",
22802                                                                          FTy 15)])),
22803                                                             ITE(Bop(Or,
22804                                                                     EQ(Var("Rn",
22805                                                                            F4),
22806                                                                        LW(15,
22807                                                                           4)),
22808                                                                     Bop(And,
22809                                                                         bVar"wback",
22810                                                                         Bop(And,
22811                                                                             Bop(Bit,
22812                                                                                 Var("registers",
22813                                                                                     FTy 15),
22814                                                                                 Mop(Cast
22815                                                                                       nTy,
22816                                                                                     Var("Rn",
22817                                                                                         F4))),
22818                                                                             Bop(Ge,
22819                                                                                 Apply
22820                                                                                   (Call
22821                                                                                      ("ArchVersion",
22822                                                                                       ATy(qTy,
22823                                                                                           nTy),
22824                                                                                       LU),
22825                                                                                    qVar"s"),
22826                                                                                 LN
22827                                                                                  7)))),
22828                                                                 Apply
22829                                                                   (Call
22830                                                                      ("DECODE_UNPREDICTABLE",
22831                                                                       ATy(qTy,
22832                                                                           qTy),
22833                                                                       TP[Var("mc",
22834                                                                              CTy"MachineCode"),
22835                                                                          LS
22836                                                                           "LoadMultipleExceptionReturn"]),
22837                                                                    qVar"s"),
22838                                                                 qVar"s")]),
22839                                                      TP[Apply
22840                                                           (Call
22841                                                              ("Skip",
22842                                                               ATy(qTy,
22843                                                                   CTy"instruction"),
22844                                                               LU),qVar"s"),
22845                                                         qVar"s"])))))),
22846                                 (Bop(And,Mop(Not,bVar"b'25"),
22847                                      Bop(And,Mop(Not,bVar"b'22"),
22848                                          bVar"b'20")),
22849                                  Let(Var("registers",F16),
22850                                      Mop(Cast F16,
22851                                          LL[bVar"b'15",bVar"b'14",
22852                                             bVar"b'13",bVar"b'12",
22853                                             bVar"b'11",bVar"b'10",
22854                                             bVar"b'9",bVar"b'8",
22855                                             bVar"b'7",bVar"b'6",
22856                                             bVar"b'5",bVar"b'4",
22857                                             bVar"b'3",bVar"b'2",
22858                                             bVar"b'1",bVar"b'0"]),
22859                                      Let(Var("Rn",F4),
22860                                          Mop(Cast F4,
22861                                              LL[bVar"b'19",bVar"b'18",
22862                                                 bVar"b'17",bVar"b'16"]),
22863                                          Let(TP[bVar"v",qVar"s"],
22864                                              Apply
22865                                                (Call
22866                                                   ("Do",
22867                                                    ATy(qTy,PTy(bTy,qTy)),
22868                                                    TP[Var("cond",F4),LT]),
22869                                                 qVar"state"),
22870                                              ITE(bVar"v",
22871                                                  Let(bVar"wback",
22872                                                      EQ(Mop(Cast F1,
22873                                                             LL[bVar"b'21"]),
22874                                                         LW(1,1)),
22875                                                      TP[Call
22876                                                           ("Load",
22877                                                            CTy"instruction",
22878                                                            Call
22879                                                              ("LoadMultiple",
22880                                                               CTy"Load",
22881                                                               TP[EQ(Mop(Cast
22882                                                                           F1,
22883                                                                         LL[bVar"b'23"]),
22884                                                                     LW(1,
22885                                                                        1)),
22886                                                                  EQ(Mop(Cast
22887                                                                           F1,
22888                                                                         LL[bVar"b'24"]),
22889                                                                     LW(1,
22890                                                                        1)),
22891                                                                  bVar"wback",
22892                                                                  Var("Rn",
22893                                                                      F4),
22894                                                                  Var("registers",
22895                                                                      F16)])),
22896                                                         ITE(Bop(Or,
22897                                                                 EQ(Var("Rn",
22898                                                                        F4),
22899                                                                    LW(15,
22900                                                                       4)),
22901                                                                 Bop(Or,
22902                                                                     Bop(Lt,
22903                                                                         Call
22904                                                                           ("BitCount",
22905                                                                            nTy,
22906                                                                            Var("registers",
22907                                                                                F16)),
22908                                                                         LN
22909                                                                          1),
22910                                                                     Bop(And,
22911                                                                         bVar"wback",
22912                                                                         Bop(And,
22913                                                                             Bop(Bit,
22914                                                                                 Var("registers",
22915                                                                                     F16),
22916                                                                                 Mop(Cast
22917                                                                                       nTy,
22918                                                                                     Var("Rn",
22919                                                                                         F4))),
22920                                                                             Bop(Ge,
22921                                                                                 Apply
22922                                                                                   (Call
22923                                                                                      ("ArchVersion",
22924                                                                                       ATy(qTy,
22925                                                                                           nTy),
22926                                                                                       LU),
22927                                                                                    qVar"s"),
22928                                                                                 LN
22929                                                                                  7))))),
22930                                                             Apply
22931                                                               (Call
22932                                                                  ("DECODE_UNPREDICTABLE",
22933                                                                   ATy(qTy,
22934                                                                       qTy),
22935                                                                   TP[Var("mc",
22936                                                                          CTy"MachineCode"),
22937                                                                      LS
22938                                                                       "LoadMultiple"]),
22939                                                                qVar"s"),
22940                                                             qVar"s")]),
22941                                                  TP[Apply
22942                                                       (Call
22943                                                          ("Skip",
22944                                                           ATy(qTy,
22945                                                               CTy"instruction"),
22946                                                           LU),qVar"s"),
22947                                                     qVar"s"]))))),
22948                                 (Bop(And,bVar"b'25",Mop(Not,bVar"b'24")),
22949                                  Let(TP[bVar"v",qVar"s"],
22950                                      Apply
22951                                        (Call
22952                                           ("Do",ATy(qTy,PTy(bTy,qTy)),
22953                                            TP[Var("cond",F4),LT]),
22954                                         qVar"state"),
22955                                      TP[ITE(bVar"v",
22956                                             Call
22957                                               ("Branch",CTy"instruction",
22958                                                Call
22959                                                  ("BranchTarget",
22960                                                   CTy"Branch",
22961                                                   Mop(SE F32,
22962                                                       CC[Mop(Cast(FTy 24),
22963                                                              LL[bVar"b'23",
22964                                                                 bVar"b'22",
22965                                                                 bVar"b'21",
22966                                                                 bVar"b'20",
22967                                                                 bVar"b'19",
22968                                                                 bVar"b'18",
22969                                                                 bVar"b'17",
22970                                                                 bVar"b'16",
22971                                                                 bVar"b'15",
22972                                                                 bVar"b'14",
22973                                                                 bVar"b'13",
22974                                                                 bVar"b'12",
22975                                                                 bVar"b'11",
22976                                                                 bVar"b'10",
22977                                                                 bVar"b'9",
22978                                                                 bVar"b'8",
22979                                                                 bVar"b'7",
22980                                                                 bVar"b'6",
22981                                                                 bVar"b'5",
22982                                                                 bVar"b'4",
22983                                                                 bVar"b'3",
22984                                                                 bVar"b'2",
22985                                                                 bVar"b'1",
22986                                                                 bVar"b'0"]),
22987                                                          LW(0,2)]))),
22988                                             Apply
22989                                               (Call
22990                                                  ("Skip",
22991                                                   ATy(qTy,
22992                                                       CTy"instruction"),
22993                                                   LU),qVar"s")),qVar"s"])),
22994                                 (Bop(And,bVar"b'25",bVar"b'24"),
22995                                  Let(TP[bVar"v",qVar"s"],
22996                                      Apply
22997                                        (Call
22998                                           ("Do",ATy(qTy,PTy(bTy,qTy)),
22999                                            TP[Var("cond",F4),LT]),
23000                                         qVar"state"),
23001                                      TP[ITE(bVar"v",
23002                                             Call
23003                                               ("Branch",CTy"instruction",
23004                                                Call
23005                                                  ("BranchLinkExchangeImmediate",
23006                                                   CTy"Branch",
23007                                                   TP[LC("InstrSet_ARM",
23008                                                         CTy"InstrSet"),
23009                                                      Mop(SE F32,
23010                                                          CC[Mop(Cast
23011                                                                   (FTy 24),
23012                                                                 LL[bVar"b'23",
23013                                                                    bVar"b'22",
23014                                                                    bVar"b'21",
23015                                                                    bVar"b'20",
23016                                                                    bVar"b'19",
23017                                                                    bVar"b'18",
23018                                                                    bVar"b'17",
23019                                                                    bVar"b'16",
23020                                                                    bVar"b'15",
23021                                                                    bVar"b'14",
23022                                                                    bVar"b'13",
23023                                                                    bVar"b'12",
23024                                                                    bVar"b'11",
23025                                                                    bVar"b'10",
23026                                                                    bVar"b'9",
23027                                                                    bVar"b'8",
23028                                                                    bVar"b'7",
23029                                                                    bVar"b'6",
23030                                                                    bVar"b'5",
23031                                                                    bVar"b'4",
23032                                                                    bVar"b'3",
23033                                                                    bVar"b'2",
23034                                                                    bVar"b'1",
23035                                                                    bVar"b'0"]),
23036                                                             LW(0,2)])])),
23037                                             Apply
23038                                               (Call
23039                                                  ("Skip",
23040                                                   ATy(qTy,
23041                                                       CTy"instruction"),
23042                                                   LU),qVar"s")),qVar"s"]))],
23043                                Apply
23044                                  (Call
23045                                     ("UndefinedARM",
23046                                      ATy(qTy,PTy(CTy"instruction",qTy)),
23047                                      Var("cond",F4)),qVar"state"))),
23048                           (bVar"b'25",
23049                            ITB([(Bop(And,bVar"b'24",
23050                                      Bop(And,Mop(Not,bVar"b'23"),
23051                                          Bop(And,Mop(Not,bVar"b'21"),
23052                                              Mop(Not,bVar"b'20")))),
23053                                  Let(Var("Rd",F4),
23054                                      Mop(Cast F4,
23055                                          LL[bVar"b'15",bVar"b'14",
23056                                             bVar"b'13",bVar"b'12"]),
23057                                      Let(TP[bVar"v",qVar"s"],
23058                                          Apply
23059                                            (Call
23060                                               ("Do",
23061                                                ATy(qTy,PTy(bTy,qTy)),
23062                                                TP[Var("cond",F4),
23063                                                   Apply
23064                                                     (Call
23065                                                        ("HaveThumb2",
23066                                                         ATy(qTy,bTy),LU),
23067                                                      qVar"state")]),
23068                                             qVar"state"),
23069                                          ITE(bVar"v",
23070                                              TP[Call
23071                                                   ("Data",
23072                                                    CTy"instruction",
23073                                                    Call
23074                                                      ("MoveHalfword",
23075                                                       CTy"Data",
23076                                                       TP[EQ(Mop(Cast F1,
23077                                                                 LL[bVar"b'22"]),
23078                                                             LW(1,1)),
23079                                                          Var("Rd",F4),
23080                                                          CC[Mop(Cast F4,
23081                                                                 LL[bVar"b'19",
23082                                                                    bVar"b'18",
23083                                                                    bVar"b'17",
23084                                                                    bVar"b'16"]),
23085                                                             Mop(Cast
23086                                                                   (FTy 12),
23087                                                                 LL[bVar"b'11",
23088                                                                    bVar"b'10",
23089                                                                    bVar"b'9",
23090                                                                    bVar"b'8",
23091                                                                    bVar"b'7",
23092                                                                    bVar"b'6",
23093                                                                    bVar"b'5",
23094                                                                    bVar"b'4",
23095                                                                    bVar"b'3",
23096                                                                    bVar"b'2",
23097                                                                    bVar"b'1",
23098                                                                    bVar"b'0"])]])),
23099                                                 ITE(EQ(Var("Rd",F4),
23100                                                        LW(15,4)),
23101                                                     Apply
23102                                                       (Call
23103                                                          ("DECODE_UNPREDICTABLE",
23104                                                           ATy(qTy,qTy),
23105                                                           TP[Var("mc",
23106                                                                  CTy"MachineCode"),
23107                                                              LS
23108                                                               "MoveTopHalfword"]),
23109                                                        qVar"s"),qVar"s")],
23110                                              TP[Apply
23111                                                   (Call
23112                                                      ("Skip",
23113                                                       ATy(qTy,
23114                                                           CTy"instruction"),
23115                                                       LU),qVar"s"),
23116                                                 qVar"s"])))),
23117                                 (Bop(And,bVar"b'24",
23118                                      Bop(And,Mop(Not,bVar"b'23"),
23119                                          Bop(And,Mop(Not,bVar"b'22"),
23120                                              Bop(And,bVar"b'21",
23121                                                  Bop(And,
23122                                                      Mop(Not,bVar"b'20"),
23123                                                      Bop(And,
23124                                                          Mop(Not,
23125                                                              bVar"b'19"),
23126                                                          Bop(And,
23127                                                              Mop(Not,
23128                                                                  bVar"b'18"),
23129                                                              Bop(And,
23130                                                                  Mop(Not,
23131                                                                      bVar"b'17"),
23132                                                                  Mop(Not,
23133                                                                      bVar"b'16"))))))))),
23134                                  Apply
23135                                    (Call
23136                                       ("DecodeHint",
23137                                        ATy(qTy,PTy(CTy"instruction",qTy)),
23138                                        TP[Var("cond",F4),
23139                                           Mop(Cast F8,
23140                                               LL[bVar"b'7",bVar"b'6",
23141                                                  bVar"b'5",bVar"b'4",
23142                                                  bVar"b'3",bVar"b'2",
23143                                                  bVar"b'1",bVar"b'0"])]),
23144                                     ITE(Mop(Not,
23145                                             Bop(And,
23146                                                 EQ(Mop(Cast F4,
23147                                                        LL[bVar"b'15",
23148                                                           bVar"b'14",
23149                                                           bVar"b'13",
23150                                                           bVar"b'12"]),
23151                                                    LW(15,4)),
23152                                                 EQ(Mop(Cast F4,
23153                                                        LL[bVar"b'11",
23154                                                           bVar"b'10",
23155                                                           bVar"b'9",
23156                                                           bVar"b'8"]),
23157                                                    LW(0,4)))),
23158                                         Apply
23159                                           (Call
23160                                              ("DECODE_UNPREDICTABLE",
23161                                               ATy(qTy,qTy),
23162                                               TP[Var("mc",
23163                                                      CTy"MachineCode"),
23164                                                  LS"Hint"]),qVar"state"),
23165                                         qVar"state"))),
23166                                 (Bop(And,bVar"b'24",
23167                                      Bop(And,Mop(Not,bVar"b'23"),
23168                                          Bop(And,bVar"b'21",
23169                                              Mop(Not,bVar"b'20")))),
23170                                  Let(Var("mask",F4),
23171                                      Mop(Cast F4,
23172                                          LL[bVar"b'19",bVar"b'18",
23173                                             bVar"b'17",bVar"b'16"]),
23174                                      Let(TP[bVar"v",qVar"s"],
23175                                          Apply
23176                                            (Call
23177                                               ("Do",
23178                                                ATy(qTy,PTy(bTy,qTy)),
23179                                                TP[Var("cond",F4),LT]),
23180                                             qVar"state"),
23181                                          ITE(bVar"v",
23182                                              Let(TP[Var("v",F32),qVar"s"],
23183                                                  Apply
23184                                                    (Call
23185                                                       ("ARMExpandImm",
23186                                                        ATy(qTy,
23187                                                            PTy(F32,qTy)),
23188                                                        Mop(Cast(FTy 12),
23189                                                            LL[bVar"b'11",
23190                                                               bVar"b'10",
23191                                                               bVar"b'9",
23192                                                               bVar"b'8",
23193                                                               bVar"b'7",
23194                                                               bVar"b'6",
23195                                                               bVar"b'5",
23196                                                               bVar"b'4",
23197                                                               bVar"b'3",
23198                                                               bVar"b'2",
23199                                                               bVar"b'1",
23200                                                               bVar"b'0"])),
23201                                                     ITE(Bop(Or,
23202                                                             EQ(Var("mask",
23203                                                                    F4),
23204                                                                LW(0,4)),
23205                                                             Mop(Not,
23206                                                                 EQ(Mop(Cast
23207                                                                          F4,
23208                                                                        LL[bVar"b'15",
23209                                                                           bVar"b'14",
23210                                                                           bVar"b'13",
23211                                                                           bVar"b'12"]),
23212                                                                    LW(15,
23213                                                                       4)))),
23214                                                         Apply
23215                                                           (Call
23216                                                              ("DECODE_UNPREDICTABLE",
23217                                                               ATy(qTy,qTy),
23218                                                               TP[Var("mc",
23219                                                                      CTy"MachineCode"),
23220                                                                  LS
23221                                                                   "MoveToSpecialFromImmediate"]),
23222                                                            qVar"s"),
23223                                                         qVar"s")),
23224                                                  TP[Call
23225                                                       ("System",
23226                                                        CTy"instruction",
23227                                                        Call
23228                                                          ("MoveToSpecialFromImmediate",
23229                                                           CTy"System",
23230                                                           TP[EQ(Mop(Cast
23231                                                                       F1,
23232                                                                     LL[bVar"b'22"]),
23233                                                                 LW(1,1)),
23234                                                              Var("v",F32),
23235                                                              Var("mask",
23236                                                                  F4)])),
23237                                                     qVar"s"]),
23238                                              TP[Apply
23239                                                   (Call
23240                                                      ("Skip",
23241                                                       ATy(qTy,
23242                                                           CTy"instruction"),
23243                                                       LU),qVar"s"),
23244                                                 qVar"s"]))))],
23245                                Let(Var("imm12",FTy 12),
23246                                    Mop(Cast(FTy 12),
23247                                        LL[bVar"b'11",bVar"b'10",
23248                                           bVar"b'9",bVar"b'8",bVar"b'7",
23249                                           bVar"b'6",bVar"b'5",bVar"b'4",
23250                                           bVar"b'3",bVar"b'2",bVar"b'1",
23251                                           bVar"b'0"]),
23252                                    Let(Var("Rd",F4),
23253                                        Mop(Cast F4,
23254                                            LL[bVar"b'15",bVar"b'14",
23255                                               bVar"b'13",bVar"b'12"]),
23256                                        Let(Var("Rn",F4),
23257                                            Mop(Cast F4,
23258                                                LL[bVar"b'19",bVar"b'18",
23259                                                   bVar"b'17",bVar"b'16"]),
23260                                            Let(Var("opc",F4),
23261                                                Mop(Cast F4,
23262                                                    LL[bVar"b'24",
23263                                                       bVar"b'23",
23264                                                       bVar"b'22",
23265                                                       bVar"b'21"]),
23266                                                Let(TP[bVar"v",qVar"s"],
23267                                                    Apply
23268                                                      (Call
23269                                                         ("Do",
23270                                                          ATy(qTy,
23271                                                              PTy(bTy,qTy)),
23272                                                          TP[Var("cond",F4),
23273                                                             LT]),
23274                                                       qVar"state"),
23275                                                    TP[ITE(bVar"v",
23276                                                           Let(bVar"setflags",
23277                                                               EQ(Mop(Cast
23278                                                                        F1,
23279                                                                      LL[bVar"b'20"]),
23280                                                                  LW(1,1)),
23281                                                               Let(TP[bVar"b'3",
23282                                                                      bVar"b'2",
23283                                                                      bVar"b'1",
23284                                                                      bVar"b'0"],
23285                                                                   BL(4,
23286                                                                      Var("opc",
23287                                                                          F4)),
23288                                                                   ITE(bVar"b'3",
23289                                                                       ITB([(Bop(And,
23290                                                                                 bVar"b'2",
23291                                                                                 bVar"b'0"),
23292                                                                             Call
23293                                                                               ("Data",
23294                                                                                CTy"instruction",
23295                                                                                Call
23296                                                                                  ("Move",
23297                                                                                   CTy"Data",
23298                                                                                   TP[bVar"setflags",
23299                                                                                      Mop(Cast
23300                                                                                            bTy,
23301                                                                                          Mop(Cast
23302                                                                                                F1,
23303                                                                                              LL[bVar"b'1"])),
23304                                                                                      Var("Rd",
23305                                                                                          F4),
23306                                                                                      Var("imm12",
23307                                                                                          FTy 12)]))),
23308                                                                            (Mop(Not,
23309                                                                                 bVar"b'2"),
23310                                                                             Call
23311                                                                               ("Data",
23312                                                                                CTy"instruction",
23313                                                                                Call
23314                                                                                  ("TestCompareImmediate",
23315                                                                                   CTy"Data",
23316                                                                                   TP[Mop(Cast
23317                                                                                            (FTy 2),
23318                                                                                          LL[bVar"b'1",
23319                                                                                             bVar"b'0"]),
23320                                                                                      Var("Rn",
23321                                                                                          F4),
23322                                                                                      Var("imm12",
23323                                                                                          FTy 12)])))],
23324                                                                           Call
23325                                                                             ("Data",
23326                                                                              CTy"instruction",
23327                                                                              Call
23328                                                                                ("ArithLogicImmediate",
23329                                                                                 CTy"Data",
23330                                                                                 TP[Var("opc",
23331                                                                                        F4),
23332                                                                                    bVar"setflags",
23333                                                                                    Var("Rd",
23334                                                                                        F4),
23335                                                                                    Var("Rn",
23336                                                                                        F4),
23337                                                                                    Var("imm12",
23338                                                                                        FTy 12)]))),
23339                                                                       Call
23340                                                                         ("Data",
23341                                                                          CTy"instruction",
23342                                                                          Call
23343                                                                            ("ArithLogicImmediate",
23344                                                                             CTy"Data",
23345                                                                             TP[Var("opc",
23346                                                                                    F4),
23347                                                                                bVar"setflags",
23348                                                                                Var("Rd",
23349                                                                                    F4),
23350                                                                                Var("Rn",
23351                                                                                    F4),
23352                                                                                Var("imm12",
23353                                                                                    FTy 12)]))))),
23354                                                           Apply
23355                                                             (Call
23356                                                                ("Skip",
23357                                                                 ATy(qTy,
23358                                                                     CTy"instruction"),
23359                                                                 LU),
23360                                                              qVar"s")),
23361                                                       qVar"s"]))))))),
23362                           (Bop(And,bVar"b'24",
23363                                Bop(And,Mop(Not,bVar"b'23"),
23364                                    Bop(And,Mop(Not,bVar"b'21"),
23365                                        Bop(And,Mop(Not,bVar"b'20"),
23366                                            Bop(And,bVar"b'9",
23367                                                Bop(And,
23368                                                    Mop(Not,bVar"b'7"),
23369                                                    Bop(And,
23370                                                        Mop(Not,bVar"b'6"),
23371                                                        Bop(And,
23372                                                            Mop(Not,
23373                                                                bVar"b'5"),
23374                                                            Mop(Not,
23375                                                                bVar"b'4"))))))))),
23376                            Let(Var("Rd",F4),
23377                                Mop(Cast F4,
23378                                    LL[bVar"b'15",bVar"b'14",bVar"b'13",
23379                                       bVar"b'12"]),
23380                                Let(TP[bVar"v",qVar"s"],
23381                                    Apply
23382                                      (Call
23383                                         ("Do",ATy(qTy,PTy(bTy,qTy)),
23384                                          TP[Var("cond",F4),
23385                                             Apply
23386                                               (Call
23387                                                  ("HaveVirtExt",
23388                                                   ATy(qTy,bTy),LU),
23389                                                qVar"state")]),qVar"state"),
23390                                    ITE(bVar"v",
23391                                        TP[Call
23392                                             ("System",CTy"instruction",
23393                                              Call
23394                                                ("MoveToRegisterFromBankedOrSpecial",
23395                                                 CTy"System",
23396                                                 TP[EQ(Mop(Cast F1,
23397                                                           LL[bVar"b'22"]),
23398                                                       LW(1,1)),
23399                                                    CC[Mop(Cast F1,
23400                                                           LL[bVar"b'8"]),
23401                                                       Mop(Cast F4,
23402                                                           LL[bVar"b'19",
23403                                                              bVar"b'18",
23404                                                              bVar"b'17",
23405                                                              bVar"b'16"])],
23406                                                    Var("Rd",F4)])),
23407                                           ITE(Bop(Or,
23408                                                   EQ(Var("Rd",F4),
23409                                                      LW(15,4)),
23410                                                   Mop(Not,
23411                                                       Bop(And,
23412                                                           EQ(Mop(Cast
23413                                                                    (FTy 2),
23414                                                                  LL[bVar"b'11",
23415                                                                     bVar"b'10"]),
23416                                                              LW(0,2)),
23417                                                           EQ(Mop(Cast F4,
23418                                                                  LL[bVar"b'3",
23419                                                                     bVar"b'2",
23420                                                                     bVar"b'1",
23421                                                                     bVar"b'0"]),
23422                                                              LW(0,4))))),
23423                                               Apply
23424                                                 (Call
23425                                                    ("DECODE_UNPREDICTABLE",
23426                                                     ATy(qTy,qTy),
23427                                                     TP[Var("mc",
23428                                                            CTy"MachineCode"),
23429                                                        LS
23430                                                         "MoveToRegisterFromBankedOrSpecial"]),
23431                                                  qVar"s"),qVar"s")],
23432                                        TP[Apply
23433                                             (Call
23434                                                ("Skip",
23435                                                 ATy(qTy,CTy"instruction"),
23436                                                 LU),qVar"s"),qVar"s"])))),
23437                           (Bop(And,bVar"b'24",
23438                                Bop(And,Mop(Not,bVar"b'23"),
23439                                    Bop(And,Mop(Not,bVar"b'21"),
23440                                        Bop(And,Mop(Not,bVar"b'20"),
23441                                            Bop(And,Mop(Not,bVar"b'9"),
23442                                                Bop(And,
23443                                                    Mop(Not,bVar"b'7"),
23444                                                    Bop(And,
23445                                                        Mop(Not,bVar"b'6"),
23446                                                        Bop(And,
23447                                                            Mop(Not,
23448                                                                bVar"b'5"),
23449                                                            Mop(Not,
23450                                                                bVar"b'4"))))))))),
23451                            Let(Var("Rd",F4),
23452                                Mop(Cast F4,
23453                                    LL[bVar"b'15",bVar"b'14",bVar"b'13",
23454                                       bVar"b'12"]),
23455                                Let(TP[bVar"v",qVar"s"],
23456                                    Apply
23457                                      (Call
23458                                         ("Do",ATy(qTy,PTy(bTy,qTy)),
23459                                          TP[Var("cond",F4),LT]),
23460                                       qVar"state"),
23461                                    ITE(bVar"v",
23462                                        TP[Call
23463                                             ("System",CTy"instruction",
23464                                              Call
23465                                                ("MoveToRegisterFromSpecial",
23466                                                 CTy"System",
23467                                                 TP[EQ(Mop(Cast F1,
23468                                                           LL[bVar"b'22"]),
23469                                                       LW(1,1)),
23470                                                    Var("Rd",F4)])),
23471                                           ITE(Bop(Or,
23472                                                   EQ(Var("Rd",F4),
23473                                                      LW(15,4)),
23474                                                   Mop(Not,
23475                                                       Bop(And,
23476                                                           EQ(Mop(Cast F4,
23477                                                                  LL[bVar"b'19",
23478                                                                     bVar"b'18",
23479                                                                     bVar"b'17",
23480                                                                     bVar"b'16"]),
23481                                                              LW(15,4)),
23482                                                           Bop(And,
23483                                                               EQ(Mop(Cast
23484                                                                        (FTy 2),
23485                                                                      LL[bVar"b'11",
23486                                                                         bVar"b'10"]),
23487                                                                  LW(0,2)),
23488                                                               Bop(And,
23489                                                                   EQ(Mop(Cast
23490                                                                            F1,
23491                                                                          LL[bVar"b'8"]),
23492                                                                      LW(0,
23493                                                                         1)),
23494                                                                   EQ(Mop(Cast
23495                                                                            F4,
23496                                                                          LL[bVar"b'3",
23497                                                                             bVar"b'2",
23498                                                                             bVar"b'1",
23499                                                                             bVar"b'0"]),
23500                                                                      LW(0,
23501                                                                         4))))))),
23502                                               Apply
23503                                                 (Call
23504                                                    ("DECODE_UNPREDICTABLE",
23505                                                     ATy(qTy,qTy),
23506                                                     TP[Var("mc",
23507                                                            CTy"MachineCode"),
23508                                                        LS
23509                                                         "MoveToRegisterFromSpecial"]),
23510                                                  qVar"s"),qVar"s")],
23511                                        TP[Apply
23512                                             (Call
23513                                                ("Skip",
23514                                                 ATy(qTy,CTy"instruction"),
23515                                                 LU),qVar"s"),qVar"s"])))),
23516                           (Bop(And,bVar"b'24",
23517                                Bop(And,Mop(Not,bVar"b'23"),
23518                                    Bop(And,bVar"b'21",
23519                                        Bop(And,Mop(Not,bVar"b'20"),
23520                                            Bop(And,bVar"b'9",
23521                                                Bop(And,
23522                                                    Mop(Not,bVar"b'7"),
23523                                                    Bop(And,
23524                                                        Mop(Not,bVar"b'6"),
23525                                                        Bop(And,
23526                                                            Mop(Not,
23527                                                                bVar"b'5"),
23528                                                            Mop(Not,
23529                                                                bVar"b'4"))))))))),
23530                            Let(Var("Rn",F4),
23531                                Mop(Cast F4,
23532                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
23533                                       bVar"b'0"]),
23534                                Let(TP[bVar"v",qVar"s"],
23535                                    Apply
23536                                      (Call
23537                                         ("Do",ATy(qTy,PTy(bTy,qTy)),
23538                                          TP[Var("cond",F4),
23539                                             Apply
23540                                               (Call
23541                                                  ("HaveVirtExt",
23542                                                   ATy(qTy,bTy),LU),
23543                                                qVar"state")]),qVar"state"),
23544                                    ITE(bVar"v",
23545                                        TP[Call
23546                                             ("System",CTy"instruction",
23547                                              Call
23548                                                ("MoveToBankedOrSpecialRegister",
23549                                                 CTy"System",
23550                                                 TP[EQ(Mop(Cast F1,
23551                                                           LL[bVar"b'22"]),
23552                                                       LW(1,1)),
23553                                                    CC[Mop(Cast F1,
23554                                                           LL[bVar"b'8"]),
23555                                                       Mop(Cast F4,
23556                                                           LL[bVar"b'19",
23557                                                              bVar"b'18",
23558                                                              bVar"b'17",
23559                                                              bVar"b'16"])],
23560                                                    Var("Rn",F4)])),
23561                                           ITE(Bop(Or,
23562                                                   Bop(In,Var("Rn",F4),
23563                                                       SL[LW(13,4),
23564                                                          LW(15,4)]),
23565                                                   Mop(Not,
23566                                                       Bop(And,
23567                                                           EQ(Mop(Cast F4,
23568                                                                  LL[bVar"b'15",
23569                                                                     bVar"b'14",
23570                                                                     bVar"b'13",
23571                                                                     bVar"b'12"]),
23572                                                              LW(15,4)),
23573                                                           EQ(Mop(Cast
23574                                                                    (FTy 2),
23575                                                                  LL[bVar"b'11",
23576                                                                     bVar"b'10"]),
23577                                                              LW(0,2))))),
23578                                               Apply
23579                                                 (Call
23580                                                    ("DECODE_UNPREDICTABLE",
23581                                                     ATy(qTy,qTy),
23582                                                     TP[Var("mc",
23583                                                            CTy"MachineCode"),
23584                                                        LS
23585                                                         "MoveToBankedOrSpecialRegister"]),
23586                                                  qVar"s"),qVar"s")],
23587                                        TP[Apply
23588                                             (Call
23589                                                ("Skip",
23590                                                 ATy(qTy,CTy"instruction"),
23591                                                 LU),qVar"s"),qVar"s"])))),
23592                           (Bop(And,bVar"b'24",
23593                                Bop(And,Mop(Not,bVar"b'23"),
23594                                    Bop(And,bVar"b'21",
23595                                        Bop(And,Mop(Not,bVar"b'20"),
23596                                            Bop(And,Mop(Not,bVar"b'9"),
23597                                                Bop(And,
23598                                                    Mop(Not,bVar"b'7"),
23599                                                    Bop(And,
23600                                                        Mop(Not,bVar"b'6"),
23601                                                        Bop(And,
23602                                                            Mop(Not,
23603                                                                bVar"b'5"),
23604                                                            Mop(Not,
23605                                                                bVar"b'4"))))))))),
23606                            Let(Var("Rn",F4),
23607                                Mop(Cast F4,
23608                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
23609                                       bVar"b'0"]),
23610                                Let(Var("mask",F4),
23611                                    Mop(Cast F4,
23612                                        LL[bVar"b'19",bVar"b'18",
23613                                           bVar"b'17",bVar"b'16"]),
23614                                    Let(TP[bVar"v",qVar"s"],
23615                                        Apply
23616                                          (Call
23617                                             ("Do",ATy(qTy,PTy(bTy,qTy)),
23618                                              TP[Var("cond",F4),LT]),
23619                                           qVar"state"),
23620                                        ITE(bVar"v",
23621                                            TP[Call
23622                                                 ("System",
23623                                                  CTy"instruction",
23624                                                  Call
23625                                                    ("MoveToSpecialFromRegister",
23626                                                     CTy"System",
23627                                                     TP[EQ(Mop(Cast F1,
23628                                                               LL[bVar"b'22"]),
23629                                                           LW(1,1)),
23630                                                        Var("Rn",F4),
23631                                                        Var("mask",F4)])),
23632                                               ITE(Bop(Or,
23633                                                       EQ(Var("Rn",F4),
23634                                                          LW(15,4)),
23635                                                       Bop(Or,
23636                                                           EQ(Var("mask",
23637                                                                  F4),
23638                                                              LW(0,4)),
23639                                                           Mop(Not,
23640                                                               Bop(And,
23641                                                                   EQ(Mop(Cast
23642                                                                            F4,
23643                                                                          LL[bVar"b'15",
23644                                                                             bVar"b'14",
23645                                                                             bVar"b'13",
23646                                                                             bVar"b'12"]),
23647                                                                      LW(15,
23648                                                                         4)),
23649                                                                   Bop(And,
23650                                                                       EQ(Mop(Cast
23651                                                                                (FTy 2),
23652                                                                              LL[bVar"b'11",
23653                                                                                 bVar"b'10"]),
23654                                                                          LW(0,
23655                                                                             2)),
23656                                                                       EQ(Mop(Cast
23657                                                                                F1,
23658                                                                              LL[bVar"b'8"]),
23659                                                                          LW(0,
23660                                                                             1))))))),
23661                                                   Apply
23662                                                     (Call
23663                                                        ("DECODE_UNPREDICTABLE",
23664                                                         ATy(qTy,qTy),
23665                                                         TP[Var("mc",
23666                                                                CTy"MachineCode"),
23667                                                            LS
23668                                                             "MoveToSpecialFromRegister"]),
23669                                                      qVar"s"),qVar"s")],
23670                                            TP[Apply
23671                                                 (Call
23672                                                    ("Skip",
23673                                                     ATy(qTy,
23674                                                         CTy"instruction"),
23675                                                     LU),qVar"s"),qVar"s"]))))),
23676                           (Bop(And,bVar"b'24",
23677                                Bop(And,Mop(Not,bVar"b'23"),
23678                                    Bop(And,Mop(Not,bVar"b'22"),
23679                                        Bop(And,bVar"b'21",
23680                                            Bop(And,Mop(Not,bVar"b'20"),
23681                                                Bop(And,
23682                                                    Mop(Not,bVar"b'7"),
23683                                                    Bop(And,
23684                                                        Mop(Not,bVar"b'6"),
23685                                                        Bop(And,
23686                                                            Mop(Not,
23687                                                                bVar"b'5"),
23688                                                            bVar"b'4")))))))),
23689                            Let(TP[bVar"v",qVar"s"],
23690                                Apply
23691                                  (Call
23692                                     ("Do",ATy(qTy,PTy(bTy,qTy)),
23693                                      TP[Var("cond",F4),
23694                                         Mop(Not,
23695                                             EQ(Dest
23696                                                  ("Architecture",
23697                                                   CTy"Architecture",
23698                                                   qVar"state"),
23699                                                LC("ARMv4",
23700                                                   CTy"Architecture")))]),
23701                                   qVar"state"),
23702                                ITE(bVar"v",
23703                                    TP[Call
23704                                         ("Branch",CTy"instruction",
23705                                          Call
23706                                            ("BranchExchange",CTy"Branch",
23707                                             Mop(Cast F4,
23708                                                 LL[bVar"b'3",bVar"b'2",
23709                                                    bVar"b'1",bVar"b'0"]))),
23710                                       ITE(Mop(Not,
23711                                               Bop(And,
23712                                                   EQ(Mop(Cast F4,
23713                                                          LL[bVar"b'19",
23714                                                             bVar"b'18",
23715                                                             bVar"b'17",
23716                                                             bVar"b'16"]),
23717                                                      LW(15,4)),
23718                                                   Bop(And,
23719                                                       EQ(Mop(Cast F4,
23720                                                              LL[bVar"b'15",
23721                                                                 bVar"b'14",
23722                                                                 bVar"b'13",
23723                                                                 bVar"b'12"]),
23724                                                          LW(15,4)),
23725                                                       EQ(Mop(Cast F4,
23726                                                              LL[bVar"b'11",
23727                                                                 bVar"b'10",
23728                                                                 bVar"b'9",
23729                                                                 bVar"b'8"]),
23730                                                          LW(15,4))))),
23731                                           Apply
23732                                             (Call
23733                                                ("DECODE_UNPREDICTABLE",
23734                                                 ATy(qTy,qTy),
23735                                                 TP[Var("mc",
23736                                                        CTy"MachineCode"),
23737                                                    LS"BX"]),qVar"s"),
23738                                           qVar"s")],
23739                                    TP[Apply
23740                                         (Call
23741                                            ("Skip",
23742                                             ATy(qTy,CTy"instruction"),LU),
23743                                          qVar"s"),qVar"s"]))),
23744                           (Bop(And,bVar"b'24",
23745                                Bop(And,Mop(Not,bVar"b'23"),
23746                                    Bop(And,bVar"b'22",
23747                                        Bop(And,bVar"b'21",
23748                                            Bop(And,Mop(Not,bVar"b'20"),
23749                                                Bop(And,
23750                                                    Mop(Not,bVar"b'7"),
23751                                                    Bop(And,
23752                                                        Mop(Not,bVar"b'6"),
23753                                                        Bop(And,
23754                                                            Mop(Not,
23755                                                                bVar"b'5"),
23756                                                            bVar"b'4")))))))),
23757                            Let(Var("Rm",F4),
23758                                Mop(Cast F4,
23759                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
23760                                       bVar"b'0"]),
23761                                Let(Var("Rd",F4),
23762                                    Mop(Cast F4,
23763                                        LL[bVar"b'15",bVar"b'14",
23764                                           bVar"b'13",bVar"b'12"]),
23765                                    Let(TP[bVar"v",qVar"s"],
23766                                        Apply
23767                                          (Call
23768                                             ("Do",ATy(qTy,PTy(bTy,qTy)),
23769                                              TP[Var("cond",F4),
23770                                                 Bop(Ge,
23771                                                     Apply
23772                                                       (Call
23773                                                          ("ArchVersion",
23774                                                           ATy(qTy,nTy),LU),
23775                                                        qVar"state"),LN 5)]),
23776                                           qVar"state"),
23777                                        ITE(bVar"v",
23778                                            TP[Call
23779                                                 ("Data",CTy"instruction",
23780                                                  Call
23781                                                    ("CountLeadingZeroes",
23782                                                     CTy"Data",
23783                                                     TP[Var("Rd",F4),
23784                                                        Var("Rm",F4)])),
23785                                               ITE(Bop(Or,
23786                                                       EQ(Var("Rd",F4),
23787                                                          LW(15,4)),
23788                                                       Bop(Or,
23789                                                           EQ(Var("Rm",F4),
23790                                                              LW(15,4)),
23791                                                           Mop(Not,
23792                                                               Bop(And,
23793                                                                   EQ(Mop(Cast
23794                                                                            F4,
23795                                                                          LL[bVar"b'19",
23796                                                                             bVar"b'18",
23797                                                                             bVar"b'17",
23798                                                                             bVar"b'16"]),
23799                                                                      LW(15,
23800                                                                         4)),
23801                                                                   EQ(Mop(Cast
23802                                                                            F4,
23803                                                                          LL[bVar"b'11",
23804                                                                             bVar"b'10",
23805                                                                             bVar"b'9",
23806                                                                             bVar"b'8"]),
23807                                                                      LW(15,
23808                                                                         4)))))),
23809                                                   Apply
23810                                                     (Call
23811                                                        ("DECODE_UNPREDICTABLE",
23812                                                         ATy(qTy,qTy),
23813                                                         TP[Var("mc",
23814                                                                CTy"MachineCode"),
23815                                                            LS
23816                                                             "CountLeadingZeroes"]),
23817                                                      qVar"s"),qVar"s")],
23818                                            TP[Apply
23819                                                 (Call
23820                                                    ("Skip",
23821                                                     ATy(qTy,
23822                                                         CTy"instruction"),
23823                                                     LU),qVar"s"),qVar"s"]))))),
23824                           (Bop(And,bVar"b'24",
23825                                Bop(And,Mop(Not,bVar"b'23"),
23826                                    Bop(And,Mop(Not,bVar"b'22"),
23827                                        Bop(And,bVar"b'21",
23828                                            Bop(And,Mop(Not,bVar"b'20"),
23829                                                Bop(And,
23830                                                    Mop(Not,bVar"b'7"),
23831                                                    Bop(And,
23832                                                        Mop(Not,bVar"b'6"),
23833                                                        Bop(And,bVar"b'5",
23834                                                            bVar"b'4")))))))),
23835                            Let(Var("Rm",F4),
23836                                Mop(Cast F4,
23837                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
23838                                       bVar"b'0"]),
23839                                Let(TP[bVar"v",qVar"s"],
23840                                    Apply
23841                                      (Call
23842                                         ("Do",ATy(qTy,PTy(bTy,qTy)),
23843                                          TP[Var("cond",F4),
23844                                             Bop(Ge,
23845                                                 Apply
23846                                                   (Call
23847                                                      ("ArchVersion",
23848                                                       ATy(qTy,nTy),LU),
23849                                                    qVar"state"),LN 5)]),
23850                                       qVar"state"),
23851                                    ITE(bVar"v",
23852                                        TP[Call
23853                                             ("Branch",CTy"instruction",
23854                                              Call
23855                                                ("BranchLinkExchangeRegister",
23856                                                 CTy"Branch",Var("Rm",F4))),
23857                                           ITE(Bop(Or,
23858                                                   EQ(Var("Rm",F4),
23859                                                      LW(15,4)),
23860                                                   Mop(Not,
23861                                                       Bop(And,
23862                                                           EQ(Mop(Cast F4,
23863                                                                  LL[bVar"b'19",
23864                                                                     bVar"b'18",
23865                                                                     bVar"b'17",
23866                                                                     bVar"b'16"]),
23867                                                              LW(15,4)),
23868                                                           Bop(And,
23869                                                               EQ(Mop(Cast
23870                                                                        F4,
23871                                                                      LL[bVar"b'15",
23872                                                                         bVar"b'14",
23873                                                                         bVar"b'13",
23874                                                                         bVar"b'12"]),
23875                                                                  LW(15,4)),
23876                                                               EQ(Mop(Cast
23877                                                                        F4,
23878                                                                      LL[bVar"b'11",
23879                                                                         bVar"b'10",
23880                                                                         bVar"b'9",
23881                                                                         bVar"b'8"]),
23882                                                                  LW(15,4)))))),
23883                                               Apply
23884                                                 (Call
23885                                                    ("DECODE_UNPREDICTABLE",
23886                                                     ATy(qTy,qTy),
23887                                                     TP[Var("mc",
23888                                                            CTy"MachineCode"),
23889                                                        LS
23890                                                         "BranchLinkExchangeRegister"]),
23891                                                  qVar"s"),qVar"s")],
23892                                        TP[Apply
23893                                             (Call
23894                                                ("Skip",
23895                                                 ATy(qTy,CTy"instruction"),
23896                                                 LU),qVar"s"),qVar"s"])))),
23897                           (Bop(And,bVar"b'24",
23898                                Bop(And,Mop(Not,bVar"b'23"),
23899                                    Bop(And,Mop(Not,bVar"b'20"),
23900                                        Bop(And,Mop(Not,bVar"b'7"),
23901                                            Bop(And,bVar"b'6",
23902                                                Bop(And,
23903                                                    Mop(Not,bVar"b'5"),
23904                                                    bVar"b'4")))))),
23905                            Let(Var("Rm",F4),
23906                                Mop(Cast F4,
23907                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
23908                                       bVar"b'0"]),
23909                                Let(Var("Rd",F4),
23910                                    Mop(Cast F4,
23911                                        LL[bVar"b'15",bVar"b'14",
23912                                           bVar"b'13",bVar"b'12"]),
23913                                    Let(Var("Rn",F4),
23914                                        Mop(Cast F4,
23915                                            LL[bVar"b'19",bVar"b'18",
23916                                               bVar"b'17",bVar"b'16"]),
23917                                        Let(TP[bVar"v",qVar"s"],
23918                                            Apply
23919                                              (Call
23920                                                 ("Do",
23921                                                  ATy(qTy,PTy(bTy,qTy)),
23922                                                  TP[Var("cond",F4),
23923                                                     Apply
23924                                                       (Call
23925                                                          ("HaveDSPSupport",
23926                                                           ATy(qTy,bTy),LU),
23927                                                        qVar"state")]),
23928                                               qVar"state"),
23929                                            ITE(bVar"v",
23930                                                TP[Call
23931                                                     ("Media",
23932                                                      CTy"instruction",
23933                                                      Call
23934                                                        ("SaturatingAddSubtract",
23935                                                         CTy"Media",
23936                                                         TP[Mop(Cast
23937                                                                  (FTy 2),
23938                                                                LL[bVar"b'22",
23939                                                                   bVar"b'21"]),
23940                                                            Var("Rd",F4),
23941                                                            Var("Rm",F4),
23942                                                            Var("Rn",F4)])),
23943                                                   ITE(Bop(Or,
23944                                                           EQ(Var("Rd",F4),
23945                                                              LW(15,4)),
23946                                                           Bop(Or,
23947                                                               EQ(Var("Rn",
23948                                                                      F4),
23949                                                                  LW(15,4)),
23950                                                               Bop(Or,
23951                                                                   EQ(Var("Rm",
23952                                                                          F4),
23953                                                                      LW(15,
23954                                                                         4)),
23955                                                                   Mop(Not,
23956                                                                       EQ(Mop(Cast
23957                                                                                F4,
23958                                                                              LL[bVar"b'11",
23959                                                                                 bVar"b'10",
23960                                                                                 bVar"b'9",
23961                                                                                 bVar"b'8"]),
23962                                                                          LW(0,
23963                                                                             4)))))),
23964                                                       Apply
23965                                                         (Call
23966                                                            ("DECODE_UNPREDICTABLE",
23967                                                             ATy(qTy,qTy),
23968                                                             TP[Var("mc",
23969                                                                    CTy"MachineCode"),
23970                                                                LS
23971                                                                 "SaturatingAddSubtract"]),
23972                                                          qVar"s"),qVar"s")],
23973                                                TP[Apply
23974                                                     (Call
23975                                                        ("Skip",
23976                                                         ATy(qTy,
23977                                                             CTy"instruction"),
23978                                                         LU),qVar"s"),
23979                                                   qVar"s"])))))),
23980                           (Bop(And,bVar"b'24",
23981                                Bop(And,Mop(Not,bVar"b'23"),
23982                                    Bop(And,Mop(Not,bVar"b'22"),
23983                                        Bop(And,bVar"b'21",
23984                                            Bop(And,Mop(Not,bVar"b'20"),
23985                                                Bop(And,
23986                                                    Mop(Not,bVar"b'7"),
23987                                                    Bop(And,bVar"b'6",
23988                                                        Bop(And,bVar"b'5",
23989                                                            bVar"b'4")))))))),
23990                            ITE(Bop(Ge,
23991                                    Apply
23992                                      (Call("ArchVersion",ATy(qTy,nTy),LU),
23993                                       qVar"state"),LN 5),
23994                                TP[Call
23995                                     ("Hint",CTy"instruction",
23996                                      Call
23997                                        ("Breakpoint",CTy"Hint",
23998                                         Mop(Cast F32,
23999                                             CC[Mop(Cast(FTy 12),
24000                                                    LL[bVar"b'19",
24001                                                       bVar"b'18",
24002                                                       bVar"b'17",
24003                                                       bVar"b'16",
24004                                                       bVar"b'15",
24005                                                       bVar"b'14",
24006                                                       bVar"b'13",
24007                                                       bVar"b'12",
24008                                                       bVar"b'11",
24009                                                       bVar"b'10",
24010                                                       bVar"b'9",bVar"b'8"]),
24011                                                Mop(Cast F4,
24012                                                    LL[bVar"b'3",
24013                                                       bVar"b'2",
24014                                                       bVar"b'1",bVar"b'0"])]))),
24015                                   Rupd
24016                                     ("CurrentCondition",
24017                                      TP[ITE(Mop(Not,
24018                                                 EQ(Var("cond",F4),
24019                                                    LW(14,4))),
24020                                             Apply
24021                                               (Call
24022                                                  ("DECODE_UNPREDICTABLE",
24023                                                   ATy(qTy,qTy),
24024                                                   TP[Var("mc",
24025                                                          CTy"MachineCode"),
24026                                                      LS"Breakpoint"]),
24027                                                qVar"state"),qVar"state"),
24028                                         Var("cond",F4)])],
24029                                Let(TP[bVar"v",qVar"s"],
24030                                    Apply
24031                                      (Call
24032                                         ("Do",ATy(qTy,PTy(bTy,qTy)),
24033                                          TP[Var("cond",F4),LF]),
24034                                       qVar"state"),
24035                                    TP[ITE(bVar"v",
24036                                           Call
24037                                             ("Undefined",
24038                                              CTy"instruction",LW(0,32)),
24039                                           Const
24040                                             ("NoOperation",
24041                                              CTy"instruction")),qVar"s"]))),
24042                           (Bop(And,bVar"b'24",
24043                                Bop(And,Mop(Not,bVar"b'23"),
24044                                    Bop(And,bVar"b'22",
24045                                        Bop(And,Mop(Not,bVar"b'21"),
24046                                            Bop(And,Mop(Not,bVar"b'20"),
24047                                                Bop(And,
24048                                                    Mop(Not,bVar"b'7"),
24049                                                    Bop(And,bVar"b'6",
24050                                                        Bop(And,bVar"b'5",
24051                                                            bVar"b'4")))))))),
24052                            Let(TP[bVar"v",qVar"s"],
24053                                Apply
24054                                  (Call
24055                                     ("Do",ATy(qTy,PTy(bTy,qTy)),
24056                                      TP[Var("cond",F4),
24057                                         Apply
24058                                           (Call
24059                                              ("HaveVirtExt",ATy(qTy,bTy),
24060                                               LU),qVar"state")]),
24061                                   qVar"state"),
24062                                ITE(bVar"v",
24063                                    TP[Call
24064                                         ("System",CTy"instruction",
24065                                          Call
24066                                            ("HypervisorCall",CTy"System",
24067                                             CC[Mop(Cast(FTy 12),
24068                                                    LL[bVar"b'19",
24069                                                       bVar"b'18",
24070                                                       bVar"b'17",
24071                                                       bVar"b'16",
24072                                                       bVar"b'15",
24073                                                       bVar"b'14",
24074                                                       bVar"b'13",
24075                                                       bVar"b'12",
24076                                                       bVar"b'11",
24077                                                       bVar"b'10",
24078                                                       bVar"b'9",bVar"b'8"]),
24079                                                Mop(Cast F4,
24080                                                    LL[bVar"b'3",
24081                                                       bVar"b'2",
24082                                                       bVar"b'1",bVar"b'0"])])),
24083                                       ITE(Mop(Not,
24084                                               EQ(Var("cond",F4),LW(14,4))),
24085                                           Apply
24086                                             (Call
24087                                                ("DECODE_UNPREDICTABLE",
24088                                                 ATy(qTy,qTy),
24089                                                 TP[Var("mc",
24090                                                        CTy"MachineCode"),
24091                                                    LS"HypervisorCall"]),
24092                                              qVar"s"),qVar"s")],
24093                                    TP[Apply
24094                                         (Call
24095                                            ("Skip",
24096                                             ATy(qTy,CTy"instruction"),LU),
24097                                          qVar"s"),qVar"s"]))),
24098                           (Bop(And,bVar"b'24",
24099                                Bop(And,Mop(Not,bVar"b'23"),
24100                                    Bop(And,bVar"b'22",
24101                                        Bop(And,bVar"b'21",
24102                                            Bop(And,Mop(Not,bVar"b'20"),
24103                                                Bop(And,
24104                                                    Mop(Not,bVar"b'7"),
24105                                                    Bop(And,bVar"b'6",
24106                                                        Bop(And,bVar"b'5",
24107                                                            bVar"b'4")))))))),
24108                            Let(TP[bVar"v",qVar"s"],
24109                                Apply
24110                                  (Call
24111                                     ("Do",ATy(qTy,PTy(bTy,qTy)),
24112                                      TP[Var("cond",F4),
24113                                         Apply
24114                                           (Call
24115                                              ("HaveSecurityExt",
24116                                               ATy(qTy,bTy),LU),
24117                                            qVar"state")]),qVar"state"),
24118                                ITE(bVar"v",
24119                                    TP[Call
24120                                         ("System",CTy"instruction",
24121                                          Call
24122                                            ("SecureMonitorCall",
24123                                             CTy"System",
24124                                             Mop(Cast F4,
24125                                                 LL[bVar"b'3",bVar"b'2",
24126                                                    bVar"b'1",bVar"b'0"]))),
24127                                       ITE(Mop(Not,
24128                                               EQ(Mop(Cast(FTy 12),
24129                                                      LL[bVar"b'19",
24130                                                         bVar"b'18",
24131                                                         bVar"b'17",
24132                                                         bVar"b'16",
24133                                                         bVar"b'15",
24134                                                         bVar"b'14",
24135                                                         bVar"b'13",
24136                                                         bVar"b'12",
24137                                                         bVar"b'11",
24138                                                         bVar"b'10",
24139                                                         bVar"b'9",
24140                                                         bVar"b'8"]),
24141                                                  LW(0,12))),
24142                                           Apply
24143                                             (Call
24144                                                ("DECODE_UNPREDICTABLE",
24145                                                 ATy(qTy,qTy),
24146                                                 TP[Var("mc",
24147                                                        CTy"MachineCode"),
24148                                                    LS"SMC"]),qVar"s"),
24149                                           qVar"s")],
24150                                    TP[Apply
24151                                         (Call
24152                                            ("Skip",
24153                                             ATy(qTy,CTy"instruction"),LU),
24154                                          qVar"s"),qVar"s"]))),
24155                           (Bop(And,bVar"b'24",
24156                                Bop(And,Mop(Not,bVar"b'23"),
24157                                    Bop(And,Mop(Not,bVar"b'22"),
24158                                        Bop(And,Mop(Not,bVar"b'21"),
24159                                            Bop(And,Mop(Not,bVar"b'20"),
24160                                                Bop(And,bVar"b'7",
24161                                                    Mop(Not,bVar"b'4"))))))),
24162                            Let(Var("Rn",F4),
24163                                Mop(Cast F4,
24164                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
24165                                       bVar"b'0"]),
24166                                Let(Var("Rm",F4),
24167                                    Mop(Cast F4,
24168                                        LL[bVar"b'11",bVar"b'10",
24169                                           bVar"b'9",bVar"b'8"]),
24170                                    Let(Var("Ra",F4),
24171                                        Mop(Cast F4,
24172                                            LL[bVar"b'15",bVar"b'14",
24173                                               bVar"b'13",bVar"b'12"]),
24174                                        Let(Var("Rd",F4),
24175                                            Mop(Cast F4,
24176                                                LL[bVar"b'19",bVar"b'18",
24177                                                   bVar"b'17",bVar"b'16"]),
24178                                            Let(TP[bVar"v",qVar"s"],
24179                                                Apply
24180                                                  (Call
24181                                                     ("Do",
24182                                                      ATy(qTy,PTy(bTy,qTy)),
24183                                                      TP[Var("cond",F4),
24184                                                         Apply
24185                                                           (Call
24186                                                              ("HaveDSPSupport",
24187                                                               ATy(qTy,bTy),
24188                                                               LU),
24189                                                            qVar"state")]),
24190                                                   qVar"state"),
24191                                                ITE(bVar"v",
24192                                                    TP[Call
24193                                                         ("Multiply",
24194                                                          CTy"instruction",
24195                                                          Call
24196                                                            ("Signed16Multiply32Accumulate",
24197                                                             CTy"Multiply",
24198                                                             TP[EQ(Mop(Cast
24199                                                                         F1,
24200                                                                       LL[bVar"b'6"]),
24201                                                                   LW(1,1)),
24202                                                                EQ(Mop(Cast
24203                                                                         F1,
24204                                                                       LL[bVar"b'5"]),
24205                                                                   LW(1,1)),
24206                                                                Var("Rd",
24207                                                                    F4),
24208                                                                Var("Rn",
24209                                                                    F4),
24210                                                                Var("Rm",
24211                                                                    F4),
24212                                                                Var("Ra",
24213                                                                    F4)])),
24214                                                       ITE(Bop(Or,
24215                                                               EQ(Var("Rd",
24216                                                                      F4),
24217                                                                  LW(15,4)),
24218                                                               Bop(Or,
24219                                                                   EQ(Var("Rn",
24220                                                                          F4),
24221                                                                      LW(15,
24222                                                                         4)),
24223                                                                   Bop(Or,
24224                                                                       EQ(Var("Rm",
24225                                                                              F4),
24226                                                                          LW(15,
24227                                                                             4)),
24228                                                                       EQ(Var("Ra",
24229                                                                              F4),
24230                                                                          LW(15,
24231                                                                             4))))),
24232                                                           Apply
24233                                                             (Call
24234                                                                ("DECODE_UNPREDICTABLE",
24235                                                                 ATy(qTy,
24236                                                                     qTy),
24237                                                                 TP[Var("mc",
24238                                                                        CTy"MachineCode"),
24239                                                                    LS
24240                                                                     "Signed16Multiply32Accumulate"]),
24241                                                              qVar"s"),
24242                                                           qVar"s")],
24243                                                    TP[Apply
24244                                                         (Call
24245                                                            ("Skip",
24246                                                             ATy(qTy,
24247                                                                 CTy"instruction"),
24248                                                             LU),qVar"s"),
24249                                                       qVar"s"]))))))),
24250                           (Bop(And,bVar"b'24",
24251                                Bop(And,Mop(Not,bVar"b'23"),
24252                                    Bop(And,Mop(Not,bVar"b'22"),
24253                                        Bop(And,bVar"b'21",
24254                                            Bop(And,Mop(Not,bVar"b'20"),
24255                                                Bop(And,bVar"b'7",
24256                                                    Bop(And,
24257                                                        Mop(Not,bVar"b'5"),
24258                                                        Mop(Not,bVar"b'4")))))))),
24259                            Let(Var("Rn",F4),
24260                                Mop(Cast F4,
24261                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
24262                                       bVar"b'0"]),
24263                                Let(Var("Rm",F4),
24264                                    Mop(Cast F4,
24265                                        LL[bVar"b'11",bVar"b'10",
24266                                           bVar"b'9",bVar"b'8"]),
24267                                    Let(Var("Ra",F4),
24268                                        Mop(Cast F4,
24269                                            LL[bVar"b'15",bVar"b'14",
24270                                               bVar"b'13",bVar"b'12"]),
24271                                        Let(Var("Rd",F4),
24272                                            Mop(Cast F4,
24273                                                LL[bVar"b'19",bVar"b'18",
24274                                                   bVar"b'17",bVar"b'16"]),
24275                                            Let(TP[bVar"v",qVar"s"],
24276                                                Apply
24277                                                  (Call
24278                                                     ("Do",
24279                                                      ATy(qTy,PTy(bTy,qTy)),
24280                                                      TP[Var("cond",F4),
24281                                                         Apply
24282                                                           (Call
24283                                                              ("HaveDSPSupport",
24284                                                               ATy(qTy,bTy),
24285                                                               LU),
24286                                                            qVar"state")]),
24287                                                   qVar"state"),
24288                                                ITE(bVar"v",
24289                                                    TP[Call
24290                                                         ("Multiply",
24291                                                          CTy"instruction",
24292                                                          Call
24293                                                            ("Signed16x32Multiply32Accumulate",
24294                                                             CTy"Multiply",
24295                                                             TP[EQ(Mop(Cast
24296                                                                         F1,
24297                                                                       LL[bVar"b'6"]),
24298                                                                   LW(1,1)),
24299                                                                Var("Rd",
24300                                                                    F4),
24301                                                                Var("Rn",
24302                                                                    F4),
24303                                                                Var("Rm",
24304                                                                    F4),
24305                                                                Var("Ra",
24306                                                                    F4)])),
24307                                                       ITE(Bop(Or,
24308                                                               EQ(Var("Rd",
24309                                                                      F4),
24310                                                                  LW(15,4)),
24311                                                               Bop(Or,
24312                                                                   EQ(Var("Rn",
24313                                                                          F4),
24314                                                                      LW(15,
24315                                                                         4)),
24316                                                                   Bop(Or,
24317                                                                       EQ(Var("Rm",
24318                                                                              F4),
24319                                                                          LW(15,
24320                                                                             4)),
24321                                                                       EQ(Var("Ra",
24322                                                                              F4),
24323                                                                          LW(15,
24324                                                                             4))))),
24325                                                           Apply
24326                                                             (Call
24327                                                                ("DECODE_UNPREDICTABLE",
24328                                                                 ATy(qTy,
24329                                                                     qTy),
24330                                                                 TP[Var("mc",
24331                                                                        CTy"MachineCode"),
24332                                                                    LS
24333                                                                     "Signed16x32Multiply32Accumulate"]),
24334                                                              qVar"s"),
24335                                                           qVar"s")],
24336                                                    TP[Apply
24337                                                         (Call
24338                                                            ("Skip",
24339                                                             ATy(qTy,
24340                                                                 CTy"instruction"),
24341                                                             LU),qVar"s"),
24342                                                       qVar"s"]))))))),
24343                           (Bop(And,bVar"b'24",
24344                                Bop(And,Mop(Not,bVar"b'23"),
24345                                    Bop(And,Mop(Not,bVar"b'22"),
24346                                        Bop(And,bVar"b'21",
24347                                            Bop(And,Mop(Not,bVar"b'20"),
24348                                                Bop(And,bVar"b'7",
24349                                                    Bop(And,bVar"b'5",
24350                                                        Mop(Not,bVar"b'4")))))))),
24351                            Let(Var("Rn",F4),
24352                                Mop(Cast F4,
24353                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
24354                                       bVar"b'0"]),
24355                                Let(Var("Rm",F4),
24356                                    Mop(Cast F4,
24357                                        LL[bVar"b'11",bVar"b'10",
24358                                           bVar"b'9",bVar"b'8"]),
24359                                    Let(Var("Rd",F4),
24360                                        Mop(Cast F4,
24361                                            LL[bVar"b'19",bVar"b'18",
24362                                               bVar"b'17",bVar"b'16"]),
24363                                        Let(TP[bVar"v",qVar"s"],
24364                                            Apply
24365                                              (Call
24366                                                 ("Do",
24367                                                  ATy(qTy,PTy(bTy,qTy)),
24368                                                  TP[Var("cond",F4),
24369                                                     Apply
24370                                                       (Call
24371                                                          ("HaveDSPSupport",
24372                                                           ATy(qTy,bTy),LU),
24373                                                        qVar"state")]),
24374                                               qVar"state"),
24375                                            ITE(bVar"v",
24376                                                TP[Call
24377                                                     ("Multiply",
24378                                                      CTy"instruction",
24379                                                      Call
24380                                                        ("Signed16x32Multiply32Result",
24381                                                         CTy"Multiply",
24382                                                         TP[EQ(Mop(Cast F1,
24383                                                                   LL[bVar"b'6"]),
24384                                                               LW(1,1)),
24385                                                            Var("Rd",F4),
24386                                                            Var("Rn",F4),
24387                                                            Var("Rm",F4)])),
24388                                                   ITE(Bop(Or,
24389                                                           EQ(Var("Rd",F4),
24390                                                              LW(15,4)),
24391                                                           Bop(Or,
24392                                                               EQ(Var("Rn",
24393                                                                      F4),
24394                                                                  LW(15,4)),
24395                                                               Bop(Or,
24396                                                                   EQ(Var("Rm",
24397                                                                          F4),
24398                                                                      LW(15,
24399                                                                         4)),
24400                                                                   Mop(Not,
24401                                                                       EQ(Mop(Cast
24402                                                                                F4,
24403                                                                              LL[bVar"b'15",
24404                                                                                 bVar"b'14",
24405                                                                                 bVar"b'13",
24406                                                                                 bVar"b'12"]),
24407                                                                          LW(0,
24408                                                                             4)))))),
24409                                                       Apply
24410                                                         (Call
24411                                                            ("DECODE_UNPREDICTABLE",
24412                                                             ATy(qTy,qTy),
24413                                                             TP[Var("mc",
24414                                                                    CTy"MachineCode"),
24415                                                                LS
24416                                                                 "Signed16x32Multiply32Result"]),
24417                                                          qVar"s"),qVar"s")],
24418                                                TP[Apply
24419                                                     (Call
24420                                                        ("Skip",
24421                                                         ATy(qTy,
24422                                                             CTy"instruction"),
24423                                                         LU),qVar"s"),
24424                                                   qVar"s"])))))),
24425                           (Bop(And,bVar"b'24",
24426                                Bop(And,Mop(Not,bVar"b'23"),
24427                                    Bop(And,bVar"b'22",
24428                                        Bop(And,Mop(Not,bVar"b'21"),
24429                                            Bop(And,Mop(Not,bVar"b'20"),
24430                                                Bop(And,bVar"b'7",
24431                                                    Mop(Not,bVar"b'4"))))))),
24432                            Let(Var("Rn",F4),
24433                                Mop(Cast F4,
24434                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
24435                                       bVar"b'0"]),
24436                                Let(Var("Rm",F4),
24437                                    Mop(Cast F4,
24438                                        LL[bVar"b'11",bVar"b'10",
24439                                           bVar"b'9",bVar"b'8"]),
24440                                    Let(Var("RdLo",F4),
24441                                        Mop(Cast F4,
24442                                            LL[bVar"b'15",bVar"b'14",
24443                                               bVar"b'13",bVar"b'12"]),
24444                                        Let(Var("RdHi",F4),
24445                                            Mop(Cast F4,
24446                                                LL[bVar"b'19",bVar"b'18",
24447                                                   bVar"b'17",bVar"b'16"]),
24448                                            Let(TP[bVar"v",qVar"s"],
24449                                                Apply
24450                                                  (Call
24451                                                     ("Do",
24452                                                      ATy(qTy,PTy(bTy,qTy)),
24453                                                      TP[Var("cond",F4),
24454                                                         Apply
24455                                                           (Call
24456                                                              ("HaveDSPSupport",
24457                                                               ATy(qTy,bTy),
24458                                                               LU),
24459                                                            qVar"state")]),
24460                                                   qVar"state"),
24461                                                ITE(bVar"v",
24462                                                    TP[Call
24463                                                         ("Multiply",
24464                                                          CTy"instruction",
24465                                                          Call
24466                                                            ("Signed16Multiply64Accumulate",
24467                                                             CTy"Multiply",
24468                                                             TP[EQ(Mop(Cast
24469                                                                         F1,
24470                                                                       LL[bVar"b'6"]),
24471                                                                   LW(1,1)),
24472                                                                EQ(Mop(Cast
24473                                                                         F1,
24474                                                                       LL[bVar"b'5"]),
24475                                                                   LW(1,1)),
24476                                                                Var("RdHi",
24477                                                                    F4),
24478                                                                Var("RdLo",
24479                                                                    F4),
24480                                                                Var("Rn",
24481                                                                    F4),
24482                                                                Var("Rm",
24483                                                                    F4)])),
24484                                                       ITE(Bop(Or,
24485                                                               EQ(Var("RdLo",
24486                                                                      F4),
24487                                                                  LW(15,4)),
24488                                                               Bop(Or,
24489                                                                   EQ(Var("RdHi",
24490                                                                          F4),
24491                                                                      LW(15,
24492                                                                         4)),
24493                                                                   Bop(Or,
24494                                                                       EQ(Var("Rn",
24495                                                                              F4),
24496                                                                          LW(15,
24497                                                                             4)),
24498                                                                       EQ(Var("Rm",
24499                                                                              F4),
24500                                                                          LW(15,
24501                                                                             4))))),
24502                                                           Apply
24503                                                             (Call
24504                                                                ("DECODE_UNPREDICTABLE",
24505                                                                 ATy(qTy,
24506                                                                     qTy),
24507                                                                 TP[Var("mc",
24508                                                                        CTy"MachineCode"),
24509                                                                    LS
24510                                                                     "Signed16Multiply64Accumulate"]),
24511                                                              qVar"s"),
24512                                                           qVar"s")],
24513                                                    TP[Apply
24514                                                         (Call
24515                                                            ("Skip",
24516                                                             ATy(qTy,
24517                                                                 CTy"instruction"),
24518                                                             LU),qVar"s"),
24519                                                       qVar"s"]))))))),
24520                           (Bop(And,bVar"b'24",
24521                                Bop(And,Mop(Not,bVar"b'23"),
24522                                    Bop(And,bVar"b'22",
24523                                        Bop(And,bVar"b'21",
24524                                            Bop(And,Mop(Not,bVar"b'20"),
24525                                                Bop(And,bVar"b'7",
24526                                                    Mop(Not,bVar"b'4"))))))),
24527                            Let(Var("Rn",F4),
24528                                Mop(Cast F4,
24529                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
24530                                       bVar"b'0"]),
24531                                Let(Var("Rm",F4),
24532                                    Mop(Cast F4,
24533                                        LL[bVar"b'11",bVar"b'10",
24534                                           bVar"b'9",bVar"b'8"]),
24535                                    Let(Var("Rd",F4),
24536                                        Mop(Cast F4,
24537                                            LL[bVar"b'19",bVar"b'18",
24538                                               bVar"b'17",bVar"b'16"]),
24539                                        Let(TP[bVar"v",qVar"s"],
24540                                            Apply
24541                                              (Call
24542                                                 ("Do",
24543                                                  ATy(qTy,PTy(bTy,qTy)),
24544                                                  TP[Var("cond",F4),
24545                                                     Apply
24546                                                       (Call
24547                                                          ("HaveDSPSupport",
24548                                                           ATy(qTy,bTy),LU),
24549                                                        qVar"state")]),
24550                                               qVar"state"),
24551                                            ITE(bVar"v",
24552                                                TP[Call
24553                                                     ("Multiply",
24554                                                      CTy"instruction",
24555                                                      Call
24556                                                        ("Signed16Multiply32Result",
24557                                                         CTy"Multiply",
24558                                                         TP[EQ(Mop(Cast F1,
24559                                                                   LL[bVar"b'6"]),
24560                                                               LW(1,1)),
24561                                                            EQ(Mop(Cast F1,
24562                                                                   LL[bVar"b'5"]),
24563                                                               LW(1,1)),
24564                                                            Var("Rd",F4),
24565                                                            Var("Rn",F4),
24566                                                            Var("Rm",F4)])),
24567                                                   ITE(Bop(Or,
24568                                                           EQ(Var("Rd",F4),
24569                                                              LW(15,4)),
24570                                                           Bop(Or,
24571                                                               EQ(Var("Rn",
24572                                                                      F4),
24573                                                                  LW(15,4)),
24574                                                               Bop(Or,
24575                                                                   EQ(Var("Rm",
24576                                                                          F4),
24577                                                                      LW(15,
24578                                                                         4)),
24579                                                                   Mop(Not,
24580                                                                       EQ(Mop(Cast
24581                                                                                F4,
24582                                                                              LL[bVar"b'15",
24583                                                                                 bVar"b'14",
24584                                                                                 bVar"b'13",
24585                                                                                 bVar"b'12"]),
24586                                                                          LW(0,
24587                                                                             4)))))),
24588                                                       Apply
24589                                                         (Call
24590                                                            ("DECODE_UNPREDICTABLE",
24591                                                             ATy(qTy,qTy),
24592                                                             TP[Var("mc",
24593                                                                    CTy"MachineCode"),
24594                                                                LS
24595                                                                 "Signed16Multiply32Result"]),
24596                                                          qVar"s"),qVar"s")],
24597                                                TP[Apply
24598                                                     (Call
24599                                                        ("Skip",
24600                                                         ATy(qTy,
24601                                                             CTy"instruction"),
24602                                                         LU),qVar"s"),
24603                                                   qVar"s"])))))),
24604                           (Bop(And,bVar"b'24",
24605                                Bop(And,Mop(Not,bVar"b'23"),
24606                                    Bop(And,bVar"b'22",
24607                                        Bop(And,bVar"b'21",
24608                                            Bop(And,Mop(Not,bVar"b'20"),
24609                                                Bop(And,
24610                                                    Mop(Not,bVar"b'19"),
24611                                                    Bop(And,
24612                                                        Mop(Not,bVar"b'18"),
24613                                                        Bop(And,
24614                                                            Mop(Not,
24615                                                                bVar"b'17"),
24616                                                            Bop(And,
24617                                                                Mop(Not,
24618                                                                    bVar"b'16"),
24619                                                                Bop(And,
24620                                                                    Mop(Not,
24621                                                                        bVar"b'15"),
24622                                                                    Bop(And,
24623                                                                        Mop(Not,
24624                                                                            bVar"b'14"),
24625                                                                        Bop(And,
24626                                                                            Mop(Not,
24627                                                                                bVar"b'13"),
24628                                                                            Bop(And,
24629                                                                                Mop(Not,
24630                                                                                    bVar"b'12"),
24631                                                                                Bop(And,
24632                                                                                    Mop(Not,
24633                                                                                        bVar"b'11"),
24634                                                                                    Bop(And,
24635                                                                                        Mop(Not,
24636                                                                                            bVar"b'10"),
24637                                                                                        Bop(And,
24638                                                                                            Mop(Not,
24639                                                                                                bVar"b'9"),
24640                                                                                            Bop(And,
24641                                                                                                Mop(Not,
24642                                                                                                    bVar"b'8"),
24643                                                                                                Bop(And,
24644                                                                                                    Mop(Not,
24645                                                                                                        bVar"b'7"),
24646                                                                                                    Bop(And,
24647                                                                                                        bVar"b'6",
24648                                                                                                        Bop(And,
24649                                                                                                            bVar"b'5",
24650                                                                                                            Bop(And,
24651                                                                                                                Mop(Not,
24652                                                                                                                    bVar"b'4"),
24653                                                                                                                Bop(And,
24654                                                                                                                    bVar"b'3",
24655                                                                                                                    Bop(And,
24656                                                                                                                        bVar"b'2",
24657                                                                                                                        Bop(And,
24658                                                                                                                            bVar"b'1",
24659                                                                                                                            Mop(Not,
24660                                                                                                                                bVar"b'0"))))))))))))))))))))))))),
24661                            Let(TP[bVar"v",qVar"s"],
24662                                Apply
24663                                  (Call
24664                                     ("Do",ATy(qTy,PTy(bTy,qTy)),
24665                                      TP[Var("cond",F4),
24666                                         Apply
24667                                           (Call
24668                                              ("HaveVirtExt",ATy(qTy,bTy),
24669                                               LU),qVar"state")]),
24670                                   qVar"state"),
24671                                TP[ITE(bVar"v",
24672                                       Call
24673                                         ("System",CTy"instruction",
24674                                          Const
24675                                            ("ExceptionReturn",CTy"System")),
24676                                       Apply
24677                                         (Call
24678                                            ("Skip",
24679                                             ATy(qTy,CTy"instruction"),LU),
24680                                          qVar"s")),qVar"s"])),
24681                           (Bop(And,bVar"b'24",
24682                                Bop(And,Mop(Not,bVar"b'23"),
24683                                    Bop(And,Mop(Not,bVar"b'20"),
24684                                        Mop(Not,bVar"b'7")))),
24685                            TP[Call("Undefined",CTy"instruction",LW(0,32)),
24686                               qVar"state"]),
24687                           (Mop(Not,bVar"b'4"),
24688                            Let(Var("Rm",F4),
24689                                Mop(Cast F4,
24690                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
24691                                       bVar"b'0"]),
24692                                Let(Var("Rd",F4),
24693                                    Mop(Cast F4,
24694                                        LL[bVar"b'15",bVar"b'14",
24695                                           bVar"b'13",bVar"b'12"]),
24696                                    Let(Var("Rn",F4),
24697                                        Mop(Cast F4,
24698                                            LL[bVar"b'19",bVar"b'18",
24699                                               bVar"b'17",bVar"b'16"]),
24700                                        Let(Var("opc",F4),
24701                                            Mop(Cast F4,
24702                                                LL[bVar"b'24",bVar"b'23",
24703                                                   bVar"b'22",bVar"b'21"]),
24704                                            Let(TP[bVar"v",qVar"s"],
24705                                                Apply
24706                                                  (Call
24707                                                     ("Do",
24708                                                      ATy(qTy,PTy(bTy,qTy)),
24709                                                      TP[Var("cond",F4),LT]),
24710                                                   qVar"state"),
24711                                                TP[ITE(bVar"v",
24712                                                       Let(bVar"setflags",
24713                                                           EQ(Mop(Cast F1,
24714                                                                  LL[bVar"b'20"]),
24715                                                              LW(1,1)),
24716                                                           Let(TP[Var("shift_t",
24717                                                                      CTy"SRType"),
24718                                                                  nVar"shift_n"],
24719                                                               Call
24720                                                                 ("DecodeImmShift",
24721                                                                  PTy(CTy"SRType",
24722                                                                      nTy),
24723                                                                  TP[Mop(Cast
24724                                                                           (FTy 2),
24725                                                                         LL[bVar"b'6",
24726                                                                            bVar"b'5"]),
24727                                                                     Mop(Cast
24728                                                                           (FTy 5),
24729                                                                         LL[bVar"b'11",
24730                                                                            bVar"b'10",
24731                                                                            bVar"b'9",
24732                                                                            bVar"b'8",
24733                                                                            bVar"b'7"])]),
24734                                                               ITB([(EQ(EX(Var("opc",
24735                                                                               F4),
24736                                                                           LN
24737                                                                            3,
24738                                                                           LN
24739                                                                            2,
24740                                                                           FTy 2),
24741                                                                        LW(2,
24742                                                                           2)),
24743                                                                     Call
24744                                                                       ("Data",
24745                                                                        CTy"instruction",
24746                                                                        Call
24747                                                                          ("TestCompareRegister",
24748                                                                           CTy"Data",
24749                                                                           TP[EX(Var("opc",
24750                                                                                     F4),
24751                                                                                 LN
24752                                                                                  1,
24753                                                                                 LN
24754                                                                                  0,
24755                                                                                 FTy 2),
24756                                                                              Var("Rn",
24757                                                                                  F4),
24758                                                                              Var("Rm",
24759                                                                                  F4),
24760                                                                              Var("shift_t",
24761                                                                                  CTy"SRType"),
24762                                                                              nVar"shift_n"]))),
24763                                                                    (Bop(In,
24764                                                                         Var("opc",
24765                                                                             F4),
24766                                                                         SL[LW(13,
24767                                                                               4),
24768                                                                            LW(15,
24769                                                                               4)]),
24770                                                                     Call
24771                                                                       ("Data",
24772                                                                        CTy"instruction",
24773                                                                        Call
24774                                                                          ("ShiftImmediate",
24775                                                                           CTy"Data",
24776                                                                           TP[Bop(Bit,
24777                                                                                  Var("opc",
24778                                                                                      F4),
24779                                                                                  LN
24780                                                                                   1),
24781                                                                              bVar"setflags",
24782                                                                              Var("Rd",
24783                                                                                  F4),
24784                                                                              Var("Rm",
24785                                                                                  F4),
24786                                                                              Var("shift_t",
24787                                                                                  CTy"SRType"),
24788                                                                              nVar"shift_n"])))],
24789                                                                   Call
24790                                                                     ("Data",
24791                                                                      CTy"instruction",
24792                                                                      Call
24793                                                                        ("Register",
24794                                                                         CTy"Data",
24795                                                                         TP[Var("opc",
24796                                                                                F4),
24797                                                                            bVar"setflags",
24798                                                                            Var("Rd",
24799                                                                                F4),
24800                                                                            Var("Rn",
24801                                                                                F4),
24802                                                                            Var("Rm",
24803                                                                                F4),
24804                                                                            Var("shift_t",
24805                                                                                CTy"SRType"),
24806                                                                            nVar"shift_n"]))))),
24807                                                       Apply
24808                                                         (Call
24809                                                            ("Skip",
24810                                                             ATy(qTy,
24811                                                                 CTy"instruction"),
24812                                                             LU),qVar"s")),
24813                                                   qVar"s"])))))),
24814                           (Bop(And,Mop(Not,bVar"b'7"),bVar"b'4"),
24815                            Let(Var("Rm",F4),
24816                                Mop(Cast F4,
24817                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
24818                                       bVar"b'0"]),
24819                                Let(Var("Rs",F4),
24820                                    Mop(Cast F4,
24821                                        LL[bVar"b'11",bVar"b'10",
24822                                           bVar"b'9",bVar"b'8"]),
24823                                    Let(Var("Rd",F4),
24824                                        Mop(Cast F4,
24825                                            LL[bVar"b'15",bVar"b'14",
24826                                               bVar"b'13",bVar"b'12"]),
24827                                        Let(Var("Rn",F4),
24828                                            Mop(Cast F4,
24829                                                LL[bVar"b'19",bVar"b'18",
24830                                                   bVar"b'17",bVar"b'16"]),
24831                                            Let(Var("opc",F4),
24832                                                Mop(Cast F4,
24833                                                    LL[bVar"b'24",
24834                                                       bVar"b'23",
24835                                                       bVar"b'22",
24836                                                       bVar"b'21"]),
24837                                                Let(TP[bVar"v",qVar"s"],
24838                                                    Apply
24839                                                      (Call
24840                                                         ("Do",
24841                                                          ATy(qTy,
24842                                                              PTy(bTy,qTy)),
24843                                                          TP[Var("cond",F4),
24844                                                             LT]),
24845                                                       qVar"state"),
24846                                                    ITE(bVar"v",
24847                                                        TP[Let(bVar"setflags",
24848                                                               EQ(Mop(Cast
24849                                                                        F1,
24850                                                                      LL[bVar"b'20"]),
24851                                                                  LW(1,1)),
24852                                                               Let(Var("shift_t",
24853                                                                       CTy"SRType"),
24854                                                                   Call
24855                                                                     ("DecodeRegShift",
24856                                                                      CTy"SRType",
24857                                                                      Mop(Cast
24858                                                                            (FTy 2),
24859                                                                          LL[bVar"b'6",
24860                                                                             bVar"b'5"])),
24861                                                                   ITE(Bop(Or,
24862                                                                           EQ(Var("opc",
24863                                                                                  F4),
24864                                                                              LW(13,
24865                                                                                 4)),
24866                                                                           EQ(Var("opc",
24867                                                                                  F4),
24868                                                                              LW(15,
24869                                                                                 4))),
24870                                                                       Call
24871                                                                         ("Data",
24872                                                                          CTy"instruction",
24873                                                                          Call
24874                                                                            ("ShiftRegister",
24875                                                                             CTy"Data",
24876                                                                             TP[Bop(Bit,
24877                                                                                    Var("opc",
24878                                                                                        F4),
24879                                                                                    LN
24880                                                                                     1),
24881                                                                                bVar"setflags",
24882                                                                                Var("Rd",
24883                                                                                    F4),
24884                                                                                Var("Rm",
24885                                                                                    F4),
24886                                                                                Var("shift_t",
24887                                                                                    CTy"SRType"),
24888                                                                                Var("Rs",
24889                                                                                    F4)])),
24890                                                                       Call
24891                                                                         ("Data",
24892                                                                          CTy"instruction",
24893                                                                          Call
24894                                                                            ("RegisterShiftedRegister",
24895                                                                             CTy"Data",
24896                                                                             TP[Var("opc",
24897                                                                                    F4),
24898                                                                                bVar"setflags",
24899                                                                                Var("Rd",
24900                                                                                    F4),
24901                                                                                Var("Rn",
24902                                                                                    F4),
24903                                                                                Var("Rm",
24904                                                                                    F4),
24905                                                                                Var("shift_t",
24906                                                                                    CTy"SRType"),
24907                                                                                Var("Rs",
24908                                                                                    F4)]))))),
24909                                                           ITE(Bop(Or,
24910                                                                   Bop(And,
24911                                                                       EQ(Var("Rd",
24912                                                                              F4),
24913                                                                          LW(15,
24914                                                                             4)),
24915                                                                       Mop(Not,
24916                                                                           EQ(EX(Var("opc",
24917                                                                                     F4),
24918                                                                                 LN
24919                                                                                  3,
24920                                                                                 LN
24921                                                                                  2,
24922                                                                                 FTy 2),
24923                                                                              LW(2,
24924                                                                                 2)))),
24925                                                                   Bop(Or,
24926                                                                       EQ(Var("Rn",
24927                                                                              F4),
24928                                                                          LW(15,
24929                                                                             4)),
24930                                                                       Bop(Or,
24931                                                                           EQ(Var("Rm",
24932                                                                                  F4),
24933                                                                              LW(15,
24934                                                                                 4)),
24935                                                                           EQ(Var("Rs",
24936                                                                                  F4),
24937                                                                              LW(15,
24938                                                                                 4))))),
24939                                                               Apply
24940                                                                 (Call
24941                                                                    ("DECODE_UNPREDICTABLE",
24942                                                                     ATy(qTy,
24943                                                                         qTy),
24944                                                                     TP[Var("mc",
24945                                                                            CTy"MachineCode"),
24946                                                                        LS
24947                                                                         "RegisterShiftedRegister"]),
24948                                                                  qVar"s"),
24949                                                               qVar"s")],
24950                                                        TP[Apply
24951                                                             (Call
24952                                                                ("Skip",
24953                                                                 ATy(qTy,
24954                                                                     CTy"instruction"),
24955                                                                 LU),
24956                                                              qVar"s"),
24957                                                           qVar"s"])))))))),
24958                           (Bop(And,Mop(Not,bVar"b'24"),
24959                                Bop(And,Mop(Not,bVar"b'23"),
24960                                    Bop(And,Mop(Not,bVar"b'22"),
24961                                        Bop(And,bVar"b'7",
24962                                            Bop(And,Mop(Not,bVar"b'6"),
24963                                                Bop(And,
24964                                                    Mop(Not,bVar"b'5"),
24965                                                    bVar"b'4")))))),
24966                            Let(Var("Rn",F4),
24967                                Mop(Cast F4,
24968                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
24969                                       bVar"b'0"]),
24970                                Let(Var("Rm",F4),
24971                                    Mop(Cast F4,
24972                                        LL[bVar"b'11",bVar"b'10",
24973                                           bVar"b'9",bVar"b'8"]),
24974                                    Let(Var("Ra",F4),
24975                                        Mop(Cast F4,
24976                                            LL[bVar"b'15",bVar"b'14",
24977                                               bVar"b'13",bVar"b'12"]),
24978                                        Let(Var("Rd",F4),
24979                                            Mop(Cast F4,
24980                                                LL[bVar"b'19",bVar"b'18",
24981                                                   bVar"b'17",bVar"b'16"]),
24982                                            Let(Var("A",F1),
24983                                                Mop(Cast F1,LL[bVar"b'21"]),
24984                                                Let(TP[bVar"v",qVar"s"],
24985                                                    Apply
24986                                                      (Call
24987                                                         ("Do",
24988                                                          ATy(qTy,
24989                                                              PTy(bTy,qTy)),
24990                                                          TP[Var("cond",F4),
24991                                                             LT]),
24992                                                       qVar"state"),
24993                                                    ITE(bVar"v",
24994                                                        TP[Let(bVar"setflags",
24995                                                               EQ(Mop(Cast
24996                                                                        F1,
24997                                                                      LL[bVar"b'20"]),
24998                                                                  LW(1,1)),
24999                                                               ITE(EQ(Var("A",
25000                                                                          F1),
25001                                                                      LW(1,
25002                                                                         1)),
25003                                                                   Call
25004                                                                     ("Multiply",
25005                                                                      CTy"instruction",
25006                                                                      Call
25007                                                                        ("MultiplyAccumulate",
25008                                                                         CTy"Multiply",
25009                                                                         TP[bVar"setflags",
25010                                                                            Var("Rd",
25011                                                                                F4),
25012                                                                            Var("Rn",
25013                                                                                F4),
25014                                                                            Var("Rm",
25015                                                                                F4),
25016                                                                            Var("Ra",
25017                                                                                F4)])),
25018                                                                   Call
25019                                                                     ("Multiply",
25020                                                                      CTy"instruction",
25021                                                                      Call
25022                                                                        ("Multiply32",
25023                                                                         CTy"Multiply",
25024                                                                         TP[bVar"setflags",
25025                                                                            Var("Rd",
25026                                                                                F4),
25027                                                                            Var("Rn",
25028                                                                                F4),
25029                                                                            Var("Rm",
25030                                                                                F4)])))),
25031                                                           ITE(Bop(Or,
25032                                                                   EQ(Var("Rd",
25033                                                                          F4),
25034                                                                      LW(15,
25035                                                                         4)),
25036                                                                   Bop(Or,
25037                                                                       EQ(Var("Rn",
25038                                                                              F4),
25039                                                                          LW(15,
25040                                                                             4)),
25041                                                                       Bop(Or,
25042                                                                           EQ(Var("Rm",
25043                                                                                  F4),
25044                                                                              LW(15,
25045                                                                                 4)),
25046                                                                           Bop(Or,
25047                                                                               Bop(And,
25048                                                                                   EQ(Var("A",
25049                                                                                          F1),
25050                                                                                      LW(1,
25051                                                                                         1)),
25052                                                                                   EQ(Var("Ra",
25053                                                                                          F4),
25054                                                                                      LW(15,
25055                                                                                         4))),
25056                                                                               Bop(And,
25057                                                                                   Bop(Lt,
25058                                                                                       Apply
25059                                                                                         (Call
25060                                                                                            ("ArchVersion",
25061                                                                                             ATy(qTy,
25062                                                                                                 nTy),
25063                                                                                             LU),
25064                                                                                          qVar"s"),
25065                                                                                       LN
25066                                                                                        6),
25067                                                                                   EQ(Var("Rd",
25068                                                                                          F4),
25069                                                                                      Var("Rn",
25070                                                                                          F4))))))),
25071                                                               Apply
25072                                                                 (Call
25073                                                                    ("DECODE_UNPREDICTABLE",
25074                                                                     ATy(qTy,
25075                                                                         qTy),
25076                                                                     TP[Var("mc",
25077                                                                            CTy"MachineCode"),
25078                                                                        LS
25079                                                                         "Multiply"]),
25080                                                                  qVar"s"),
25081                                                               qVar"s")],
25082                                                        TP[Apply
25083                                                             (Call
25084                                                                ("Skip",
25085                                                                 ATy(qTy,
25086                                                                     CTy"instruction"),
25087                                                                 LU),
25088                                                              qVar"s"),
25089                                                           qVar"s"])))))))),
25090                           (Bop(And,Mop(Not,bVar"b'24"),
25091                                Bop(And,Mop(Not,bVar"b'23"),
25092                                    Bop(And,bVar"b'22",
25093                                        Bop(And,Mop(Not,bVar"b'21"),
25094                                            Bop(And,Mop(Not,bVar"b'20"),
25095                                                Bop(And,bVar"b'7",
25096                                                    Bop(And,
25097                                                        Mop(Not,bVar"b'6"),
25098                                                        Bop(And,
25099                                                            Mop(Not,
25100                                                                bVar"b'5"),
25101                                                            bVar"b'4")))))))),
25102                            Let(Var("Rn",F4),
25103                                Mop(Cast F4,
25104                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
25105                                       bVar"b'0"]),
25106                                Let(Var("Rm",F4),
25107                                    Mop(Cast F4,
25108                                        LL[bVar"b'11",bVar"b'10",
25109                                           bVar"b'9",bVar"b'8"]),
25110                                    Let(Var("RdLo",F4),
25111                                        Mop(Cast F4,
25112                                            LL[bVar"b'15",bVar"b'14",
25113                                               bVar"b'13",bVar"b'12"]),
25114                                        Let(Var("RdHi",F4),
25115                                            Mop(Cast F4,
25116                                                LL[bVar"b'19",bVar"b'18",
25117                                                   bVar"b'17",bVar"b'16"]),
25118                                            Let(TP[bVar"v",qVar"s"],
25119                                                Apply
25120                                                  (Call
25121                                                     ("Do",
25122                                                      ATy(qTy,PTy(bTy,qTy)),
25123                                                      TP[Var("cond",F4),
25124                                                         Bop(Ge,
25125                                                             Apply
25126                                                               (Call
25127                                                                  ("ArchVersion",
25128                                                                   ATy(qTy,
25129                                                                       nTy),
25130                                                                   LU),
25131                                                                qVar"state"),
25132                                                             LN 6)]),
25133                                                   qVar"state"),
25134                                                ITE(bVar"v",
25135                                                    TP[Call
25136                                                         ("Multiply",
25137                                                          CTy"instruction",
25138                                                          Call
25139                                                            ("MultiplyAccumulateAccumulate",
25140                                                             CTy"Multiply",
25141                                                             TP[Var("RdHi",
25142                                                                    F4),
25143                                                                Var("RdLo",
25144                                                                    F4),
25145                                                                Var("Rn",
25146                                                                    F4),
25147                                                                Var("Rm",
25148                                                                    F4)])),
25149                                                       ITE(Bop(Or,
25150                                                               EQ(Var("RdHi",
25151                                                                      F4),
25152                                                                  LW(15,4)),
25153                                                               Bop(Or,
25154                                                                   EQ(Var("RdLo",
25155                                                                          F4),
25156                                                                      LW(15,
25157                                                                         4)),
25158                                                                   Bop(Or,
25159                                                                       EQ(Var("Rn",
25160                                                                              F4),
25161                                                                          LW(15,
25162                                                                             4)),
25163                                                                       Bop(Or,
25164                                                                           EQ(Var("Rm",
25165                                                                                  F4),
25166                                                                              LW(15,
25167                                                                                 4)),
25168                                                                           EQ(Var("RdHi",
25169                                                                                  F4),
25170                                                                              Var("RdLo",
25171                                                                                  F4)))))),
25172                                                           Apply
25173                                                             (Call
25174                                                                ("DECODE_UNPREDICTABLE",
25175                                                                 ATy(qTy,
25176                                                                     qTy),
25177                                                                 TP[Var("mc",
25178                                                                        CTy"MachineCode"),
25179                                                                    LS
25180                                                                     "MultiplyAccumulateAccumulate"]),
25181                                                              qVar"s"),
25182                                                           qVar"s")],
25183                                                    TP[Apply
25184                                                         (Call
25185                                                            ("Skip",
25186                                                             ATy(qTy,
25187                                                                 CTy"instruction"),
25188                                                             LU),qVar"s"),
25189                                                       qVar"s"]))))))),
25190                           (Bop(And,Mop(Not,bVar"b'24"),
25191                                Bop(And,Mop(Not,bVar"b'23"),
25192                                    Bop(And,bVar"b'22",
25193                                        Bop(And,bVar"b'21",
25194                                            Bop(And,Mop(Not,bVar"b'20"),
25195                                                Bop(And,bVar"b'7",
25196                                                    Bop(And,
25197                                                        Mop(Not,bVar"b'6"),
25198                                                        Bop(And,
25199                                                            Mop(Not,
25200                                                                bVar"b'5"),
25201                                                            bVar"b'4")))))))),
25202                            Let(Var("Rn",F4),
25203                                Mop(Cast F4,
25204                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
25205                                       bVar"b'0"]),
25206                                Let(Var("Rm",F4),
25207                                    Mop(Cast F4,
25208                                        LL[bVar"b'11",bVar"b'10",
25209                                           bVar"b'9",bVar"b'8"]),
25210                                    Let(Var("Ra",F4),
25211                                        Mop(Cast F4,
25212                                            LL[bVar"b'15",bVar"b'14",
25213                                               bVar"b'13",bVar"b'12"]),
25214                                        Let(Var("Rd",F4),
25215                                            Mop(Cast F4,
25216                                                LL[bVar"b'19",bVar"b'18",
25217                                                   bVar"b'17",bVar"b'16"]),
25218                                            Let(TP[bVar"v",qVar"s"],
25219                                                Apply
25220                                                  (Call
25221                                                     ("Do",
25222                                                      ATy(qTy,PTy(bTy,qTy)),
25223                                                      TP[Var("cond",F4),
25224                                                         Apply
25225                                                           (Call
25226                                                              ("HaveThumb2",
25227                                                               ATy(qTy,bTy),
25228                                                               LU),
25229                                                            qVar"state")]),
25230                                                   qVar"state"),
25231                                                ITE(bVar"v",
25232                                                    TP[Call
25233                                                         ("Multiply",
25234                                                          CTy"instruction",
25235                                                          Call
25236                                                            ("MultiplySubtract",
25237                                                             CTy"Multiply",
25238                                                             TP[Var("Rd",
25239                                                                    F4),
25240                                                                Var("Rn",
25241                                                                    F4),
25242                                                                Var("Rm",
25243                                                                    F4),
25244                                                                Var("Ra",
25245                                                                    F4)])),
25246                                                       ITE(Bop(Or,
25247                                                               EQ(Var("Rd",
25248                                                                      F4),
25249                                                                  LW(15,4)),
25250                                                               Bop(Or,
25251                                                                   EQ(Var("Rn",
25252                                                                          F4),
25253                                                                      LW(15,
25254                                                                         4)),
25255                                                                   Bop(Or,
25256                                                                       EQ(Var("Rm",
25257                                                                              F4),
25258                                                                          LW(15,
25259                                                                             4)),
25260                                                                       EQ(Var("Ra",
25261                                                                              F4),
25262                                                                          LW(15,
25263                                                                             4))))),
25264                                                           Apply
25265                                                             (Call
25266                                                                ("DECODE_UNPREDICTABLE",
25267                                                                 ATy(qTy,
25268                                                                     qTy),
25269                                                                 TP[Var("mc",
25270                                                                        CTy"MachineCode"),
25271                                                                    LS
25272                                                                     "MultiplySubtract"]),
25273                                                              qVar"s"),
25274                                                           qVar"s")],
25275                                                    TP[Apply
25276                                                         (Call
25277                                                            ("Skip",
25278                                                             ATy(qTy,
25279                                                                 CTy"instruction"),
25280                                                             LU),qVar"s"),
25281                                                       qVar"s"]))))))),
25282                           (Bop(And,Mop(Not,bVar"b'24"),
25283                                Bop(And,bVar"b'23",
25284                                    Bop(And,bVar"b'7",
25285                                        Bop(And,Mop(Not,bVar"b'6"),
25286                                            Bop(And,Mop(Not,bVar"b'5"),
25287                                                bVar"b'4"))))),
25288                            Let(Var("Rn",F4),
25289                                Mop(Cast F4,
25290                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
25291                                       bVar"b'0"]),
25292                                Let(Var("Rm",F4),
25293                                    Mop(Cast F4,
25294                                        LL[bVar"b'11",bVar"b'10",
25295                                           bVar"b'9",bVar"b'8"]),
25296                                    Let(Var("RdLo",F4),
25297                                        Mop(Cast F4,
25298                                            LL[bVar"b'15",bVar"b'14",
25299                                               bVar"b'13",bVar"b'12"]),
25300                                        Let(Var("RdHi",F4),
25301                                            Mop(Cast F4,
25302                                                LL[bVar"b'19",bVar"b'18",
25303                                                   bVar"b'17",bVar"b'16"]),
25304                                            Let(TP[bVar"v",qVar"s"],
25305                                                Apply
25306                                                  (Call
25307                                                     ("Do",
25308                                                      ATy(qTy,PTy(bTy,qTy)),
25309                                                      TP[Var("cond",F4),LT]),
25310                                                   qVar"state"),
25311                                                ITE(bVar"v",
25312                                                    TP[Call
25313                                                         ("Multiply",
25314                                                          CTy"instruction",
25315                                                          Call
25316                                                            ("MultiplyLong",
25317                                                             CTy"Multiply",
25318                                                             TP[EQ(Mop(Cast
25319                                                                         F1,
25320                                                                       LL[bVar"b'21"]),
25321                                                                   LW(1,1)),
25322                                                                EQ(Mop(Cast
25323                                                                         F1,
25324                                                                       LL[bVar"b'22"]),
25325                                                                   LW(1,1)),
25326                                                                EQ(Mop(Cast
25327                                                                         F1,
25328                                                                       LL[bVar"b'20"]),
25329                                                                   LW(1,1)),
25330                                                                Var("RdHi",
25331                                                                    F4),
25332                                                                Var("RdLo",
25333                                                                    F4),
25334                                                                Var("Rn",
25335                                                                    F4),
25336                                                                Var("Rm",
25337                                                                    F4)])),
25338                                                       ITE(Bop(Or,
25339                                                               EQ(Var("RdLo",
25340                                                                      F4),
25341                                                                  LW(15,4)),
25342                                                               Bop(Or,
25343                                                                   EQ(Var("RdHi",
25344                                                                          F4),
25345                                                                      LW(15,
25346                                                                         4)),
25347                                                                   Bop(Or,
25348                                                                       EQ(Var("Rn",
25349                                                                              F4),
25350                                                                          LW(15,
25351                                                                             4)),
25352                                                                       Bop(Or,
25353                                                                           EQ(Var("Rm",
25354                                                                                  F4),
25355                                                                              LW(15,
25356                                                                                 4)),
25357                                                                           Bop(Or,
25358                                                                               EQ(Var("RdHi",
25359                                                                                      F4),
25360                                                                                  Var("RdLo",
25361                                                                                      F4)),
25362                                                                               Bop(And,
25363                                                                                   Bop(Lt,
25364                                                                                       Apply
25365                                                                                         (Call
25366                                                                                            ("ArchVersion",
25367                                                                                             ATy(qTy,
25368                                                                                                 nTy),
25369                                                                                             LU),
25370                                                                                          qVar"s"),
25371                                                                                       LN
25372                                                                                        6),
25373                                                                                   Bop(Or,
25374                                                                                       EQ(Var("RdHi",
25375                                                                                              F4),
25376                                                                                          Var("Rn",
25377                                                                                              F4)),
25378                                                                                       EQ(Var("RdLo",
25379                                                                                              F4),
25380                                                                                          Var("Rn",
25381                                                                                              F4))))))))),
25382                                                           Apply
25383                                                             (Call
25384                                                                ("DECODE_UNPREDICTABLE",
25385                                                                 ATy(qTy,
25386                                                                     qTy),
25387                                                                 TP[Var("mc",
25388                                                                        CTy"MachineCode"),
25389                                                                    LS
25390                                                                     "MultiplyLong"]),
25391                                                              qVar"s"),
25392                                                           qVar"s")],
25393                                                    TP[Apply
25394                                                         (Call
25395                                                            ("Skip",
25396                                                             ATy(qTy,
25397                                                                 CTy"instruction"),
25398                                                             LU),qVar"s"),
25399                                                       qVar"s"]))))))),
25400                           (Bop(And,bVar"b'24",
25401                                Bop(And,Mop(Not,bVar"b'23"),
25402                                    Bop(And,Mop(Not,bVar"b'21"),
25403                                        Bop(And,Mop(Not,bVar"b'20"),
25404                                            Bop(And,bVar"b'7",
25405                                                Bop(And,
25406                                                    Mop(Not,bVar"b'6"),
25407                                                    Bop(And,
25408                                                        Mop(Not,bVar"b'5"),
25409                                                        bVar"b'4"))))))),
25410                            Let(Var("Rt2",F4),
25411                                Mop(Cast F4,
25412                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
25413                                       bVar"b'0"]),
25414                                Let(Var("Rt",F4),
25415                                    Mop(Cast F4,
25416                                        LL[bVar"b'15",bVar"b'14",
25417                                           bVar"b'13",bVar"b'12"]),
25418                                    Let(Var("Rn",F4),
25419                                        Mop(Cast F4,
25420                                            LL[bVar"b'19",bVar"b'18",
25421                                               bVar"b'17",bVar"b'16"]),
25422                                        Let(TP[bVar"v",qVar"s"],
25423                                            Apply
25424                                              (Call
25425                                                 ("Do",
25426                                                  ATy(qTy,PTy(bTy,qTy)),
25427                                                  TP[Var("cond",F4),LT]),
25428                                               qVar"state"),
25429                                            ITE(bVar"v",
25430                                                TP[Call
25431                                                     ("Swap",
25432                                                      CTy"instruction",
25433                                                      TP[EQ(Mop(Cast F1,
25434                                                                LL[bVar"b'22"]),
25435                                                            LW(1,1)),
25436                                                         Var("Rt",F4),
25437                                                         Var("Rt2",F4),
25438                                                         Var("Rn",F4)]),
25439                                                   ITE(Bop(Or,
25440                                                           EQ(Var("Rt",F4),
25441                                                              LW(15,4)),
25442                                                           Bop(Or,
25443                                                               EQ(Var("Rt2",
25444                                                                      F4),
25445                                                                  LW(15,4)),
25446                                                               Bop(Or,
25447                                                                   EQ(Var("Rn",
25448                                                                          F4),
25449                                                                      LW(15,
25450                                                                         4)),
25451                                                                   Bop(Or,
25452                                                                       EQ(Var("Rn",
25453                                                                              F4),
25454                                                                          Var("Rt",
25455                                                                              F4)),
25456                                                                       Bop(Or,
25457                                                                           EQ(Var("Rn",
25458                                                                                  F4),
25459                                                                              Var("Rt2",
25460                                                                                  F4)),
25461                                                                           Mop(Not,
25462                                                                               EQ(Mop(Cast
25463                                                                                        F4,
25464                                                                                      LL[bVar"b'11",
25465                                                                                         bVar"b'10",
25466                                                                                         bVar"b'9",
25467                                                                                         bVar"b'8"]),
25468                                                                                  LW(0,
25469                                                                                     4)))))))),
25470                                                       Apply
25471                                                         (Call
25472                                                            ("DECODE_UNPREDICTABLE",
25473                                                             ATy(qTy,qTy),
25474                                                             TP[Var("mc",
25475                                                                    CTy"MachineCode"),
25476                                                                LS"Swap"]),
25477                                                          qVar"s"),qVar"s")],
25478                                                TP[Apply
25479                                                     (Call
25480                                                        ("Skip",
25481                                                         ATy(qTy,
25482                                                             CTy"instruction"),
25483                                                         LU),qVar"s"),
25484                                                   qVar"s"])))))),
25485                           (Bop(And,bVar"b'24",
25486                                Bop(And,bVar"b'23",
25487                                    Bop(And,Mop(Not,bVar"b'22"),
25488                                        Bop(And,Mop(Not,bVar"b'21"),
25489                                            Bop(And,Mop(Not,bVar"b'20"),
25490                                                Bop(And,bVar"b'7",
25491                                                    Bop(And,
25492                                                        Mop(Not,bVar"b'6"),
25493                                                        Bop(And,
25494                                                            Mop(Not,
25495                                                                bVar"b'5"),
25496                                                            bVar"b'4")))))))),
25497                            Let(Var("Rt",F4),
25498                                Mop(Cast F4,
25499                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
25500                                       bVar"b'0"]),
25501                                Let(Var("Rd",F4),
25502                                    Mop(Cast F4,
25503                                        LL[bVar"b'15",bVar"b'14",
25504                                           bVar"b'13",bVar"b'12"]),
25505                                    Let(Var("Rn",F4),
25506                                        Mop(Cast F4,
25507                                            LL[bVar"b'19",bVar"b'18",
25508                                               bVar"b'17",bVar"b'16"]),
25509                                        Let(TP[bVar"v",qVar"s"],
25510                                            Apply
25511                                              (Call
25512                                                 ("Do",
25513                                                  ATy(qTy,PTy(bTy,qTy)),
25514                                                  TP[Var("cond",F4),
25515                                                     Bop(Ge,
25516                                                         Apply
25517                                                           (Call
25518                                                              ("ArchVersion",
25519                                                               ATy(qTy,nTy),
25520                                                               LU),
25521                                                            qVar"state"),
25522                                                         LN 6)]),
25523                                               qVar"state"),
25524                                            ITE(bVar"v",
25525                                                TP[Call
25526                                                     ("Store",
25527                                                      CTy"instruction",
25528                                                      Call
25529                                                        ("StoreExclusive",
25530                                                         CTy"Store",
25531                                                         TP[Var("Rd",F4),
25532                                                            Var("Rt",F4),
25533                                                            Var("Rn",F4),
25534                                                            LW(0,32)])),
25535                                                   ITE(Bop(Or,
25536                                                           EQ(Var("Rd",F4),
25537                                                              LW(15,4)),
25538                                                           Bop(Or,
25539                                                               EQ(Var("Rt",
25540                                                                      F4),
25541                                                                  LW(15,4)),
25542                                                               Bop(Or,
25543                                                                   EQ(Var("Rn",
25544                                                                          F4),
25545                                                                      LW(15,
25546                                                                         4)),
25547                                                                   Bop(Or,
25548                                                                       EQ(Var("Rd",
25549                                                                              F4),
25550                                                                          Var("Rn",
25551                                                                              F4)),
25552                                                                       Bop(Or,
25553                                                                           EQ(Var("Rd",
25554                                                                                  F4),
25555                                                                              Var("Rt",
25556                                                                                  F4)),
25557                                                                           Mop(Not,
25558                                                                               EQ(Mop(Cast
25559                                                                                        F4,
25560                                                                                      LL[bVar"b'11",
25561                                                                                         bVar"b'10",
25562                                                                                         bVar"b'9",
25563                                                                                         bVar"b'8"]),
25564                                                                                  LW(15,
25565                                                                                     4)))))))),
25566                                                       Apply
25567                                                         (Call
25568                                                            ("DECODE_UNPREDICTABLE",
25569                                                             ATy(qTy,qTy),
25570                                                             TP[Var("mc",
25571                                                                    CTy"MachineCode"),
25572                                                                LS
25573                                                                 "StoreExclusive"]),
25574                                                          qVar"s"),qVar"s")],
25575                                                TP[Apply
25576                                                     (Call
25577                                                        ("Skip",
25578                                                         ATy(qTy,
25579                                                             CTy"instruction"),
25580                                                         LU),qVar"s"),
25581                                                   qVar"s"])))))),
25582                           (Bop(And,bVar"b'24",
25583                                Bop(And,bVar"b'23",
25584                                    Bop(And,Mop(Not,bVar"b'22"),
25585                                        Bop(And,Mop(Not,bVar"b'21"),
25586                                            Bop(And,bVar"b'20",
25587                                                Bop(And,bVar"b'7",
25588                                                    Bop(And,
25589                                                        Mop(Not,bVar"b'6"),
25590                                                        Bop(And,
25591                                                            Mop(Not,
25592                                                                bVar"b'5"),
25593                                                            bVar"b'4")))))))),
25594                            Let(Var("Rt",F4),
25595                                Mop(Cast F4,
25596                                    LL[bVar"b'15",bVar"b'14",bVar"b'13",
25597                                       bVar"b'12"]),
25598                                Let(Var("Rn",F4),
25599                                    Mop(Cast F4,
25600                                        LL[bVar"b'19",bVar"b'18",
25601                                           bVar"b'17",bVar"b'16"]),
25602                                    Let(TP[bVar"v",qVar"s"],
25603                                        Apply
25604                                          (Call
25605                                             ("Do",ATy(qTy,PTy(bTy,qTy)),
25606                                              TP[Var("cond",F4),
25607                                                 Bop(Ge,
25608                                                     Apply
25609                                                       (Call
25610                                                          ("ArchVersion",
25611                                                           ATy(qTy,nTy),LU),
25612                                                        qVar"state"),LN 6)]),
25613                                           qVar"state"),
25614                                        ITE(bVar"v",
25615                                            TP[Call
25616                                                 ("Load",CTy"instruction",
25617                                                  Call
25618                                                    ("LoadExclusive",
25619                                                     CTy"Load",
25620                                                     TP[Var("Rt",F4),
25621                                                        Var("Rn",F4),
25622                                                        LW(0,32)])),
25623                                               ITE(Bop(Or,
25624                                                       EQ(Var("Rt",F4),
25625                                                          LW(15,4)),
25626                                                       Bop(Or,
25627                                                           EQ(Var("Rn",F4),
25628                                                              LW(15,4)),
25629                                                           Mop(Not,
25630                                                               Bop(And,
25631                                                                   EQ(Mop(Cast
25632                                                                            F4,
25633                                                                          LL[bVar"b'11",
25634                                                                             bVar"b'10",
25635                                                                             bVar"b'9",
25636                                                                             bVar"b'8"]),
25637                                                                      LW(15,
25638                                                                         4)),
25639                                                                   EQ(Mop(Cast
25640                                                                            F4,
25641                                                                          LL[bVar"b'3",
25642                                                                             bVar"b'2",
25643                                                                             bVar"b'1",
25644                                                                             bVar"b'0"]),
25645                                                                      LW(15,
25646                                                                         4)))))),
25647                                                   Apply
25648                                                     (Call
25649                                                        ("DECODE_UNPREDICTABLE",
25650                                                         ATy(qTy,qTy),
25651                                                         TP[Var("mc",
25652                                                                CTy"MachineCode"),
25653                                                            LS
25654                                                             "LoadExclusive"]),
25655                                                      qVar"s"),qVar"s")],
25656                                            TP[Apply
25657                                                 (Call
25658                                                    ("Skip",
25659                                                     ATy(qTy,
25660                                                         CTy"instruction"),
25661                                                     LU),qVar"s"),qVar"s"]))))),
25662                           (Bop(And,bVar"b'24",
25663                                Bop(And,bVar"b'23",
25664                                    Bop(And,Mop(Not,bVar"b'22"),
25665                                        Bop(And,bVar"b'21",
25666                                            Bop(And,Mop(Not,bVar"b'20"),
25667                                                Bop(And,bVar"b'7",
25668                                                    Bop(And,
25669                                                        Mop(Not,bVar"b'6"),
25670                                                        Bop(And,
25671                                                            Mop(Not,
25672                                                                bVar"b'5"),
25673                                                            bVar"b'4")))))))),
25674                            Let(Var("Rt",F4),
25675                                Mop(Cast F4,
25676                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
25677                                       bVar"b'0"]),
25678                                Let(Var("Rd",F4),
25679                                    Mop(Cast F4,
25680                                        LL[bVar"b'15",bVar"b'14",
25681                                           bVar"b'13",bVar"b'12"]),
25682                                    Let(Var("Rn",F4),
25683                                        Mop(Cast F4,
25684                                            LL[bVar"b'19",bVar"b'18",
25685                                               bVar"b'17",bVar"b'16"]),
25686                                        Let(TP[bVar"v",qVar"s"],
25687                                            Apply
25688                                              (Call
25689                                                 ("Do",
25690                                                  ATy(qTy,PTy(bTy,qTy)),
25691                                                  TP[Var("cond",F4),
25692                                                     Bop(In,
25693                                                         Dest
25694                                                           ("Architecture",
25695                                                            CTy"Architecture",
25696                                                            qVar"state"),
25697                                                         SL[LC("ARMv6K",
25698                                                               CTy"Architecture"),
25699                                                            LC("ARMv7_A",
25700                                                               CTy"Architecture"),
25701                                                            LC("ARMv7_R",
25702                                                               CTy"Architecture")])]),
25703                                               qVar"state"),
25704                                            ITE(bVar"v",
25705                                                Let(Var("Rt2",F4),
25706                                                    Bop(Add,Var("Rt",F4),
25707                                                        LW(1,4)),
25708                                                    TP[Call
25709                                                         ("Store",
25710                                                          CTy"instruction",
25711                                                          Call
25712                                                            ("StoreExclusiveDoubleword",
25713                                                             CTy"Store",
25714                                                             TP[Var("Rd",
25715                                                                    F4),
25716                                                                Var("Rt",
25717                                                                    F4),
25718                                                                Var("Rt2",
25719                                                                    F4),
25720                                                                Var("Rn",
25721                                                                    F4)])),
25722                                                       ITE(Bop(Or,
25723                                                               EQ(Var("Rd",
25724                                                                      F4),
25725                                                                  LW(15,4)),
25726                                                               Bop(Or,
25727                                                                   Bop(Bit,
25728                                                                       Var("Rt",
25729                                                                           F4),
25730                                                                       LN
25731                                                                        0),
25732                                                                   Bop(Or,
25733                                                                       EQ(Var("Rt",
25734                                                                              F4),
25735                                                                          LW(14,
25736                                                                             4)),
25737                                                                       Bop(Or,
25738                                                                           EQ(Var("Rn",
25739                                                                                  F4),
25740                                                                              LW(15,
25741                                                                                 4)),
25742                                                                           Bop(Or,
25743                                                                               EQ(Var("Rd",
25744                                                                                      F4),
25745                                                                                  Var("Rn",
25746                                                                                      F4)),
25747                                                                               Bop(Or,
25748                                                                                   EQ(Var("Rd",
25749                                                                                          F4),
25750                                                                                      Var("Rt",
25751                                                                                          F4)),
25752                                                                                   Bop(Or,
25753                                                                                       EQ(Var("Rd",
25754                                                                                              F4),
25755                                                                                          Var("Rt2",
25756                                                                                              F4)),
25757                                                                                       Mop(Not,
25758                                                                                           EQ(Mop(Cast
25759                                                                                                    F4,
25760                                                                                                  LL[bVar"b'11",
25761                                                                                                     bVar"b'10",
25762                                                                                                     bVar"b'9",
25763                                                                                                     bVar"b'8"]),
25764                                                                                              LW(15,
25765                                                                                                 4)))))))))),
25766                                                           Apply
25767                                                             (Call
25768                                                                ("DECODE_UNPREDICTABLE",
25769                                                                 ATy(qTy,
25770                                                                     qTy),
25771                                                                 TP[Var("mc",
25772                                                                        CTy"MachineCode"),
25773                                                                    LS
25774                                                                     "StoreExclusiveDoubleword"]),
25775                                                              qVar"s"),
25776                                                           qVar"s")]),
25777                                                TP[Apply
25778                                                     (Call
25779                                                        ("Skip",
25780                                                         ATy(qTy,
25781                                                             CTy"instruction"),
25782                                                         LU),qVar"s"),
25783                                                   qVar"s"])))))),
25784                           (Bop(And,bVar"b'24",
25785                                Bop(And,bVar"b'23",
25786                                    Bop(And,Mop(Not,bVar"b'22"),
25787                                        Bop(And,bVar"b'21",
25788                                            Bop(And,bVar"b'20",
25789                                                Bop(And,bVar"b'7",
25790                                                    Bop(And,
25791                                                        Mop(Not,bVar"b'6"),
25792                                                        Bop(And,
25793                                                            Mop(Not,
25794                                                                bVar"b'5"),
25795                                                            bVar"b'4")))))))),
25796                            Let(Var("Rt",F4),
25797                                Mop(Cast F4,
25798                                    LL[bVar"b'15",bVar"b'14",bVar"b'13",
25799                                       bVar"b'12"]),
25800                                Let(Var("Rn",F4),
25801                                    Mop(Cast F4,
25802                                        LL[bVar"b'19",bVar"b'18",
25803                                           bVar"b'17",bVar"b'16"]),
25804                                    Let(TP[bVar"v",qVar"s"],
25805                                        Apply
25806                                          (Call
25807                                             ("Do",ATy(qTy,PTy(bTy,qTy)),
25808                                              TP[Var("cond",F4),
25809                                                 Bop(In,
25810                                                     Dest
25811                                                       ("Architecture",
25812                                                        CTy"Architecture",
25813                                                        qVar"state"),
25814                                                     SL[LC("ARMv6K",
25815                                                           CTy"Architecture"),
25816                                                        LC("ARMv7_A",
25817                                                           CTy"Architecture"),
25818                                                        LC("ARMv7_R",
25819                                                           CTy"Architecture")])]),
25820                                           qVar"state"),
25821                                        ITE(bVar"v",
25822                                            TP[Call
25823                                                 ("Load",CTy"instruction",
25824                                                  Call
25825                                                    ("LoadExclusiveDoubleword",
25826                                                     CTy"Load",
25827                                                     TP[Var("Rt",F4),
25828                                                        Bop(Add,
25829                                                            Var("Rt",F4),
25830                                                            LW(1,4)),
25831                                                        Var("Rn",F4)])),
25832                                               ITE(Bop(Or,
25833                                                       Bop(Bit,
25834                                                           Var("Rt",F4),
25835                                                           LN 0),
25836                                                       Bop(Or,
25837                                                           EQ(Var("Rt",F4),
25838                                                              LW(14,4)),
25839                                                           Bop(Or,
25840                                                               EQ(Var("Rn",
25841                                                                      F4),
25842                                                                  LW(15,4)),
25843                                                               Mop(Not,
25844                                                                   Bop(And,
25845                                                                       EQ(Mop(Cast
25846                                                                                F4,
25847                                                                              LL[bVar"b'11",
25848                                                                                 bVar"b'10",
25849                                                                                 bVar"b'9",
25850                                                                                 bVar"b'8"]),
25851                                                                          LW(15,
25852                                                                             4)),
25853                                                                       EQ(Mop(Cast
25854                                                                                F4,
25855                                                                              LL[bVar"b'3",
25856                                                                                 bVar"b'2",
25857                                                                                 bVar"b'1",
25858                                                                                 bVar"b'0"]),
25859                                                                          LW(15,
25860                                                                             4))))))),
25861                                                   Apply
25862                                                     (Call
25863                                                        ("DECODE_UNPREDICTABLE",
25864                                                         ATy(qTy,qTy),
25865                                                         TP[Var("mc",
25866                                                                CTy"MachineCode"),
25867                                                            LS
25868                                                             "LoadExclusiveDoubleword"]),
25869                                                      qVar"s"),qVar"s")],
25870                                            TP[Apply
25871                                                 (Call
25872                                                    ("Skip",
25873                                                     ATy(qTy,
25874                                                         CTy"instruction"),
25875                                                     LU),qVar"s"),qVar"s"]))))),
25876                           (Bop(And,bVar"b'24",
25877                                Bop(And,bVar"b'23",
25878                                    Bop(And,bVar"b'22",
25879                                        Bop(And,Mop(Not,bVar"b'21"),
25880                                            Bop(And,Mop(Not,bVar"b'20"),
25881                                                Bop(And,bVar"b'7",
25882                                                    Bop(And,
25883                                                        Mop(Not,bVar"b'6"),
25884                                                        Bop(And,
25885                                                            Mop(Not,
25886                                                                bVar"b'5"),
25887                                                            bVar"b'4")))))))),
25888                            Let(Var("Rt",F4),
25889                                Mop(Cast F4,
25890                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
25891                                       bVar"b'0"]),
25892                                Let(Var("Rd",F4),
25893                                    Mop(Cast F4,
25894                                        LL[bVar"b'15",bVar"b'14",
25895                                           bVar"b'13",bVar"b'12"]),
25896                                    Let(Var("Rn",F4),
25897                                        Mop(Cast F4,
25898                                            LL[bVar"b'19",bVar"b'18",
25899                                               bVar"b'17",bVar"b'16"]),
25900                                        Let(TP[bVar"v",qVar"s"],
25901                                            Apply
25902                                              (Call
25903                                                 ("Do",
25904                                                  ATy(qTy,PTy(bTy,qTy)),
25905                                                  TP[Var("cond",F4),
25906                                                     Bop(In,
25907                                                         Dest
25908                                                           ("Architecture",
25909                                                            CTy"Architecture",
25910                                                            qVar"state"),
25911                                                         SL[LC("ARMv6K",
25912                                                               CTy"Architecture"),
25913                                                            LC("ARMv7_A",
25914                                                               CTy"Architecture"),
25915                                                            LC("ARMv7_R",
25916                                                               CTy"Architecture")])]),
25917                                               qVar"state"),
25918                                            ITE(bVar"v",
25919                                                TP[Call
25920                                                     ("Store",
25921                                                      CTy"instruction",
25922                                                      Call
25923                                                        ("StoreExclusiveByte",
25924                                                         CTy"Store",
25925                                                         TP[Var("Rd",F4),
25926                                                            Var("Rt",F4),
25927                                                            Var("Rn",F4)])),
25928                                                   ITE(Bop(Or,
25929                                                           EQ(Var("Rd",F4),
25930                                                              LW(15,4)),
25931                                                           Bop(Or,
25932                                                               EQ(Var("Rt",
25933                                                                      F4),
25934                                                                  LW(15,4)),
25935                                                               Bop(Or,
25936                                                                   EQ(Var("Rn",
25937                                                                          F4),
25938                                                                      LW(15,
25939                                                                         4)),
25940                                                                   Bop(Or,
25941                                                                       EQ(Var("Rd",
25942                                                                              F4),
25943                                                                          Var("Rn",
25944                                                                              F4)),
25945                                                                       Bop(Or,
25946                                                                           EQ(Var("Rd",
25947                                                                                  F4),
25948                                                                              Var("Rt",
25949                                                                                  F4)),
25950                                                                           Mop(Not,
25951                                                                               EQ(Mop(Cast
25952                                                                                        F4,
25953                                                                                      LL[bVar"b'11",
25954                                                                                         bVar"b'10",
25955                                                                                         bVar"b'9",
25956                                                                                         bVar"b'8"]),
25957                                                                                  LW(15,
25958                                                                                     4)))))))),
25959                                                       Apply
25960                                                         (Call
25961                                                            ("DECODE_UNPREDICTABLE",
25962                                                             ATy(qTy,qTy),
25963                                                             TP[Var("mc",
25964                                                                    CTy"MachineCode"),
25965                                                                LS
25966                                                                 "StoreExclusiveByte"]),
25967                                                          qVar"s"),qVar"s")],
25968                                                TP[Apply
25969                                                     (Call
25970                                                        ("Skip",
25971                                                         ATy(qTy,
25972                                                             CTy"instruction"),
25973                                                         LU),qVar"s"),
25974                                                   qVar"s"])))))),
25975                           (Bop(And,bVar"b'24",
25976                                Bop(And,bVar"b'23",
25977                                    Bop(And,bVar"b'22",
25978                                        Bop(And,Mop(Not,bVar"b'21"),
25979                                            Bop(And,bVar"b'20",
25980                                                Bop(And,bVar"b'7",
25981                                                    Bop(And,
25982                                                        Mop(Not,bVar"b'6"),
25983                                                        Bop(And,
25984                                                            Mop(Not,
25985                                                                bVar"b'5"),
25986                                                            bVar"b'4")))))))),
25987                            Let(Var("Rt",F4),
25988                                Mop(Cast F4,
25989                                    LL[bVar"b'15",bVar"b'14",bVar"b'13",
25990                                       bVar"b'12"]),
25991                                Let(Var("Rn",F4),
25992                                    Mop(Cast F4,
25993                                        LL[bVar"b'19",bVar"b'18",
25994                                           bVar"b'17",bVar"b'16"]),
25995                                    Let(TP[bVar"v",qVar"s"],
25996                                        Apply
25997                                          (Call
25998                                             ("Do",ATy(qTy,PTy(bTy,qTy)),
25999                                              TP[Var("cond",F4),
26000                                                 Bop(In,
26001                                                     Dest
26002                                                       ("Architecture",
26003                                                        CTy"Architecture",
26004                                                        qVar"state"),
26005                                                     SL[LC("ARMv6K",
26006                                                           CTy"Architecture"),
26007                                                        LC("ARMv7_A",
26008                                                           CTy"Architecture"),
26009                                                        LC("ARMv7_R",
26010                                                           CTy"Architecture")])]),
26011                                           qVar"state"),
26012                                        ITE(bVar"v",
26013                                            TP[Call
26014                                                 ("Load",CTy"instruction",
26015                                                  Call
26016                                                    ("LoadExclusiveByte",
26017                                                     CTy"Load",
26018                                                     TP[Var("Rt",F4),
26019                                                        Var("Rn",F4)])),
26020                                               ITE(Bop(Or,
26021                                                       EQ(Var("Rt",F4),
26022                                                          LW(15,4)),
26023                                                       Bop(Or,
26024                                                           EQ(Var("Rn",F4),
26025                                                              LW(15,4)),
26026                                                           Mop(Not,
26027                                                               Bop(And,
26028                                                                   EQ(Mop(Cast
26029                                                                            F4,
26030                                                                          LL[bVar"b'11",
26031                                                                             bVar"b'10",
26032                                                                             bVar"b'9",
26033                                                                             bVar"b'8"]),
26034                                                                      LW(15,
26035                                                                         4)),
26036                                                                   EQ(Mop(Cast
26037                                                                            F4,
26038                                                                          LL[bVar"b'3",
26039                                                                             bVar"b'2",
26040                                                                             bVar"b'1",
26041                                                                             bVar"b'0"]),
26042                                                                      LW(15,
26043                                                                         4)))))),
26044                                                   Apply
26045                                                     (Call
26046                                                        ("DECODE_UNPREDICTABLE",
26047                                                         ATy(qTy,qTy),
26048                                                         TP[Var("mc",
26049                                                                CTy"MachineCode"),
26050                                                            LS
26051                                                             "LoadExclusiveByte"]),
26052                                                      qVar"s"),qVar"s")],
26053                                            TP[Apply
26054                                                 (Call
26055                                                    ("Skip",
26056                                                     ATy(qTy,
26057                                                         CTy"instruction"),
26058                                                     LU),qVar"s"),qVar"s"]))))),
26059                           (Bop(And,bVar"b'24",
26060                                Bop(And,bVar"b'23",
26061                                    Bop(And,bVar"b'22",
26062                                        Bop(And,bVar"b'21",
26063                                            Bop(And,Mop(Not,bVar"b'20"),
26064                                                Bop(And,bVar"b'7",
26065                                                    Bop(And,
26066                                                        Mop(Not,bVar"b'6"),
26067                                                        Bop(And,
26068                                                            Mop(Not,
26069                                                                bVar"b'5"),
26070                                                            bVar"b'4")))))))),
26071                            Let(Var("Rt",F4),
26072                                Mop(Cast F4,
26073                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
26074                                       bVar"b'0"]),
26075                                Let(Var("Rd",F4),
26076                                    Mop(Cast F4,
26077                                        LL[bVar"b'15",bVar"b'14",
26078                                           bVar"b'13",bVar"b'12"]),
26079                                    Let(Var("Rn",F4),
26080                                        Mop(Cast F4,
26081                                            LL[bVar"b'19",bVar"b'18",
26082                                               bVar"b'17",bVar"b'16"]),
26083                                        Let(TP[bVar"v",qVar"s"],
26084                                            Apply
26085                                              (Call
26086                                                 ("Do",
26087                                                  ATy(qTy,PTy(bTy,qTy)),
26088                                                  TP[Var("cond",F4),
26089                                                     Bop(In,
26090                                                         Dest
26091                                                           ("Architecture",
26092                                                            CTy"Architecture",
26093                                                            qVar"state"),
26094                                                         SL[LC("ARMv6K",
26095                                                               CTy"Architecture"),
26096                                                            LC("ARMv7_A",
26097                                                               CTy"Architecture"),
26098                                                            LC("ARMv7_R",
26099                                                               CTy"Architecture")])]),
26100                                               qVar"state"),
26101                                            ITE(bVar"v",
26102                                                TP[Call
26103                                                     ("Store",
26104                                                      CTy"instruction",
26105                                                      Call
26106                                                        ("StoreExclusiveHalf",
26107                                                         CTy"Store",
26108                                                         TP[Var("Rd",F4),
26109                                                            Var("Rt",F4),
26110                                                            Var("Rn",F4)])),
26111                                                   ITE(Bop(Or,
26112                                                           EQ(Var("Rd",F4),
26113                                                              LW(15,4)),
26114                                                           Bop(Or,
26115                                                               EQ(Var("Rt",
26116                                                                      F4),
26117                                                                  LW(15,4)),
26118                                                               Bop(Or,
26119                                                                   EQ(Var("Rn",
26120                                                                          F4),
26121                                                                      LW(15,
26122                                                                         4)),
26123                                                                   Bop(Or,
26124                                                                       EQ(Var("Rd",
26125                                                                              F4),
26126                                                                          Var("Rn",
26127                                                                              F4)),
26128                                                                       Bop(Or,
26129                                                                           EQ(Var("Rd",
26130                                                                                  F4),
26131                                                                              Var("Rt",
26132                                                                                  F4)),
26133                                                                           Mop(Not,
26134                                                                               EQ(Mop(Cast
26135                                                                                        F4,
26136                                                                                      LL[bVar"b'11",
26137                                                                                         bVar"b'10",
26138                                                                                         bVar"b'9",
26139                                                                                         bVar"b'8"]),
26140                                                                                  LW(15,
26141                                                                                     4)))))))),
26142                                                       Apply
26143                                                         (Call
26144                                                            ("DECODE_UNPREDICTABLE",
26145                                                             ATy(qTy,qTy),
26146                                                             TP[Var("mc",
26147                                                                    CTy"MachineCode"),
26148                                                                LS
26149                                                                 "StoreExclusiveHalf"]),
26150                                                          qVar"s"),qVar"s")],
26151                                                TP[Apply
26152                                                     (Call
26153                                                        ("Skip",
26154                                                         ATy(qTy,
26155                                                             CTy"instruction"),
26156                                                         LU),qVar"s"),
26157                                                   qVar"s"])))))),
26158                           (Bop(And,bVar"b'24",
26159                                Bop(And,bVar"b'23",
26160                                    Bop(And,bVar"b'22",
26161                                        Bop(And,bVar"b'21",
26162                                            Bop(And,bVar"b'20",
26163                                                Bop(And,bVar"b'7",
26164                                                    Bop(And,
26165                                                        Mop(Not,bVar"b'6"),
26166                                                        Bop(And,
26167                                                            Mop(Not,
26168                                                                bVar"b'5"),
26169                                                            bVar"b'4")))))))),
26170                            Let(Var("Rt",F4),
26171                                Mop(Cast F4,
26172                                    LL[bVar"b'15",bVar"b'14",bVar"b'13",
26173                                       bVar"b'12"]),
26174                                Let(Var("Rn",F4),
26175                                    Mop(Cast F4,
26176                                        LL[bVar"b'19",bVar"b'18",
26177                                           bVar"b'17",bVar"b'16"]),
26178                                    Let(TP[bVar"v",qVar"s"],
26179                                        Apply
26180                                          (Call
26181                                             ("Do",ATy(qTy,PTy(bTy,qTy)),
26182                                              TP[Var("cond",F4),
26183                                                 Bop(In,
26184                                                     Dest
26185                                                       ("Architecture",
26186                                                        CTy"Architecture",
26187                                                        qVar"state"),
26188                                                     SL[LC("ARMv6K",
26189                                                           CTy"Architecture"),
26190                                                        LC("ARMv7_A",
26191                                                           CTy"Architecture"),
26192                                                        LC("ARMv7_R",
26193                                                           CTy"Architecture")])]),
26194                                           qVar"state"),
26195                                        ITE(bVar"v",
26196                                            TP[Call
26197                                                 ("Load",CTy"instruction",
26198                                                  Call
26199                                                    ("LoadExclusiveHalf",
26200                                                     CTy"Load",
26201                                                     TP[Var("Rt",F4),
26202                                                        Var("Rn",F4)])),
26203                                               ITE(Bop(Or,
26204                                                       EQ(Var("Rt",F4),
26205                                                          LW(15,4)),
26206                                                       Bop(Or,
26207                                                           EQ(Var("Rn",F4),
26208                                                              LW(15,4)),
26209                                                           Mop(Not,
26210                                                               Bop(And,
26211                                                                   EQ(Mop(Cast
26212                                                                            F4,
26213                                                                          LL[bVar"b'11",
26214                                                                             bVar"b'10",
26215                                                                             bVar"b'9",
26216                                                                             bVar"b'8"]),
26217                                                                      LW(15,
26218                                                                         4)),
26219                                                                   EQ(Mop(Cast
26220                                                                            F4,
26221                                                                          LL[bVar"b'3",
26222                                                                             bVar"b'2",
26223                                                                             bVar"b'1",
26224                                                                             bVar"b'0"]),
26225                                                                      LW(15,
26226                                                                         4)))))),
26227                                                   Apply
26228                                                     (Call
26229                                                        ("DECODE_UNPREDICTABLE",
26230                                                         ATy(qTy,qTy),
26231                                                         TP[Var("mc",
26232                                                                CTy"MachineCode"),
26233                                                            LS
26234                                                             "LoadExclusiveHalf"]),
26235                                                      qVar"s"),qVar"s")],
26236                                            TP[Apply
26237                                                 (Call
26238                                                    ("Skip",
26239                                                     ATy(qTy,
26240                                                         CTy"instruction"),
26241                                                     LU),qVar"s"),qVar"s"]))))),
26242                           (Bop(And,Mop(Not,bVar"b'24"),
26243                                Bop(And,Mop(Not,bVar"b'22"),
26244                                    Bop(And,bVar"b'21",
26245                                        Bop(And,Mop(Not,bVar"b'20"),
26246                                            Bop(And,bVar"b'7",
26247                                                Bop(And,
26248                                                    Mop(Not,bVar"b'6"),
26249                                                    Bop(And,bVar"b'5",
26250                                                        bVar"b'4"))))))),
26251                            Let(Var("Rm",F4),
26252                                Mop(Cast F4,
26253                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
26254                                       bVar"b'0"]),
26255                                Let(Var("Rt",F4),
26256                                    Mop(Cast F4,
26257                                        LL[bVar"b'15",bVar"b'14",
26258                                           bVar"b'13",bVar"b'12"]),
26259                                    Let(Var("Rn",F4),
26260                                        Mop(Cast F4,
26261                                            LL[bVar"b'19",bVar"b'18",
26262                                               bVar"b'17",bVar"b'16"]),
26263                                        Let(TP[bVar"v",qVar"s"],
26264                                            Apply
26265                                              (Call
26266                                                 ("Do",
26267                                                  ATy(qTy,PTy(bTy,qTy)),
26268                                                  TP[Var("cond",F4),
26269                                                     Apply
26270                                                       (Call
26271                                                          ("HaveThumb2",
26272                                                           ATy(qTy,bTy),LU),
26273                                                        qVar"state")]),
26274                                               qVar"state"),
26275                                            ITE(bVar"v",
26276                                                TP[Call
26277                                                     ("Store",
26278                                                      CTy"instruction",
26279                                                      Call
26280                                                        ("StoreHalfUnprivileged",
26281                                                         CTy"Store",
26282                                                         TP[EQ(Mop(Cast F1,
26283                                                                   LL[bVar"b'23"]),
26284                                                               LW(1,1)),
26285                                                            LT,
26286                                                            Var("Rt",F4),
26287                                                            Var("Rn",F4),
26288                                                            Call
26289                                                              ("register_form2",
26290                                                               CTy"offset2",
26291                                                               Var("Rm",F4))])),
26292                                                   ITE(Bop(Or,
26293                                                           EQ(Var("Rt",F4),
26294                                                              LW(15,4)),
26295                                                           Bop(Or,
26296                                                               EQ(Var("Rn",
26297                                                                      F4),
26298                                                                  LW(15,4)),
26299                                                               Bop(Or,
26300                                                                   EQ(Var("Rn",
26301                                                                          F4),
26302                                                                      Var("Rt",
26303                                                                          F4)),
26304                                                                   Bop(Or,
26305                                                                       EQ(Var("Rm",
26306                                                                              F4),
26307                                                                          LW(15,
26308                                                                             4)),
26309                                                                       Mop(Not,
26310                                                                           EQ(Mop(Cast
26311                                                                                    F4,
26312                                                                                  LL[bVar"b'11",
26313                                                                                     bVar"b'10",
26314                                                                                     bVar"b'9",
26315                                                                                     bVar"b'8"]),
26316                                                                              LW(0,
26317                                                                                 4))))))),
26318                                                       Apply
26319                                                         (Call
26320                                                            ("DECODE_UNPREDICTABLE",
26321                                                             ATy(qTy,qTy),
26322                                                             TP[Var("mc",
26323                                                                    CTy"MachineCode"),
26324                                                                LS
26325                                                                 "StoreHalfUnprivileged"]),
26326                                                          qVar"s"),qVar"s")],
26327                                                TP[Apply
26328                                                     (Call
26329                                                        ("Skip",
26330                                                         ATy(qTy,
26331                                                             CTy"instruction"),
26332                                                         LU),qVar"s"),
26333                                                   qVar"s"])))))),
26334                           (Bop(And,Mop(Not,bVar"b'22"),
26335                                Bop(And,Mop(Not,bVar"b'20"),
26336                                    Bop(And,bVar"b'7",
26337                                        Bop(And,Mop(Not,bVar"b'6"),
26338                                            Bop(And,bVar"b'5",bVar"b'4"))))),
26339                            Let(Var("Rm",F4),
26340                                Mop(Cast F4,
26341                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
26342                                       bVar"b'0"]),
26343                                Let(Var("Rt",F4),
26344                                    Mop(Cast F4,
26345                                        LL[bVar"b'15",bVar"b'14",
26346                                           bVar"b'13",bVar"b'12"]),
26347                                    Let(Var("Rn",F4),
26348                                        Mop(Cast F4,
26349                                            LL[bVar"b'19",bVar"b'18",
26350                                               bVar"b'17",bVar"b'16"]),
26351                                        Let(Var("P",F1),
26352                                            Mop(Cast F1,LL[bVar"b'24"]),
26353                                            Let(TP[bVar"v",qVar"s"],
26354                                                Apply
26355                                                  (Call
26356                                                     ("Do",
26357                                                      ATy(qTy,PTy(bTy,qTy)),
26358                                                      TP[Var("cond",F4),LT]),
26359                                                   qVar"state"),
26360                                                ITE(bVar"v",
26361                                                    Let(bVar"wback",
26362                                                        Bop(Or,
26363                                                            EQ(Var("P",F1),
26364                                                               LW(0,1)),
26365                                                            EQ(Mop(Cast F1,
26366                                                                   LL[bVar"b'21"]),
26367                                                               LW(1,1))),
26368                                                        TP[Call
26369                                                             ("Store",
26370                                                              CTy"instruction",
26371                                                              Call
26372                                                                ("StoreHalf",
26373                                                                 CTy"Store",
26374                                                                 TP[EQ(Mop(Cast
26375                                                                             F1,
26376                                                                           LL[bVar"b'23"]),
26377                                                                       LW(1,
26378                                                                          1)),
26379                                                                    EQ(Var("P",
26380                                                                           F1),
26381                                                                       LW(1,
26382                                                                          1)),
26383                                                                    bVar"wback",
26384                                                                    Var("Rt",
26385                                                                        F4),
26386                                                                    Var("Rn",
26387                                                                        F4),
26388                                                                    Call
26389                                                                      ("register_form1",
26390                                                                       CTy"offset1",
26391                                                                       TP[Var("Rm",
26392                                                                              F4),
26393                                                                          LC("SRType_LSL",
26394                                                                             CTy"SRType"),
26395                                                                          LN
26396                                                                           0])])),
26397                                                           ITE(Bop(Or,
26398                                                                   EQ(Var("Rt",
26399                                                                          F4),
26400                                                                      LW(15,
26401                                                                         4)),
26402                                                                   Bop(Or,
26403                                                                       EQ(Var("Rm",
26404                                                                              F4),
26405                                                                          LW(15,
26406                                                                             4)),
26407                                                                       Bop(Or,
26408                                                                           Bop(And,
26409                                                                               bVar"wback",
26410                                                                               Bop(Or,
26411                                                                                   EQ(Var("Rn",
26412                                                                                          F4),
26413                                                                                      LW(15,
26414                                                                                         4)),
26415                                                                                   EQ(Var("Rn",
26416                                                                                          F4),
26417                                                                                      Var("Rt",
26418                                                                                          F4)))),
26419                                                                           Bop(Or,
26420                                                                               Bop(And,
26421                                                                                   Bop(Lt,
26422                                                                                       Apply
26423                                                                                         (Call
26424                                                                                            ("ArchVersion",
26425                                                                                             ATy(qTy,
26426                                                                                                 nTy),
26427                                                                                             LU),
26428                                                                                          qVar"s"),
26429                                                                                       LN
26430                                                                                        6),
26431                                                                                   Bop(And,
26432                                                                                       bVar"wback",
26433                                                                                       EQ(Var("Rm",
26434                                                                                              F4),
26435                                                                                          Var("Rn",
26436                                                                                              F4)))),
26437                                                                               Mop(Not,
26438                                                                                   EQ(Mop(Cast
26439                                                                                            F4,
26440                                                                                          LL[bVar"b'11",
26441                                                                                             bVar"b'10",
26442                                                                                             bVar"b'9",
26443                                                                                             bVar"b'8"]),
26444                                                                                      LW(0,
26445                                                                                         4))))))),
26446                                                               Apply
26447                                                                 (Call
26448                                                                    ("DECODE_UNPREDICTABLE",
26449                                                                     ATy(qTy,
26450                                                                         qTy),
26451                                                                     TP[Var("mc",
26452                                                                            CTy"MachineCode"),
26453                                                                        LS
26454                                                                         "StoreHalf"]),
26455                                                                  qVar"s"),
26456                                                               qVar"s")]),
26457                                                    TP[Apply
26458                                                         (Call
26459                                                            ("Skip",
26460                                                             ATy(qTy,
26461                                                                 CTy"instruction"),
26462                                                             LU),qVar"s"),
26463                                                       qVar"s"]))))))),
26464                           (Bop(And,Mop(Not,bVar"b'24"),
26465                                Bop(And,Mop(Not,bVar"b'22"),
26466                                    Bop(And,bVar"b'21",
26467                                        Bop(And,bVar"b'20",
26468                                            Bop(And,bVar"b'7",bVar"b'4"))))),
26469                            Let(Var("Rm",F4),
26470                                Mop(Cast F4,
26471                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
26472                                       bVar"b'0"]),
26473                                Let(Var("H",F1),
26474                                    Mop(Cast F1,LL[bVar"b'5"]),
26475                                    Let(Var("S",F1),
26476                                        Mop(Cast F1,LL[bVar"b'6"]),
26477                                        Let(Var("Rt",F4),
26478                                            Mop(Cast F4,
26479                                                LL[bVar"b'15",bVar"b'14",
26480                                                   bVar"b'13",bVar"b'12"]),
26481                                            Let(Var("Rn",F4),
26482                                                Mop(Cast F4,
26483                                                    LL[bVar"b'19",
26484                                                       bVar"b'18",
26485                                                       bVar"b'17",
26486                                                       bVar"b'16"]),
26487                                                Let(TP[bVar"v",qVar"s"],
26488                                                    Apply
26489                                                      (Call
26490                                                         ("Do",
26491                                                          ATy(qTy,
26492                                                              PTy(bTy,qTy)),
26493                                                          TP[Var("cond",F4),
26494                                                             Bop(And,
26495                                                                 Bop(Or,
26496                                                                     Mop(Not,
26497                                                                         EQ(Var("H",
26498                                                                                F1),
26499                                                                            LW(0,
26500                                                                               1))),
26501                                                                     EQ(Var("S",
26502                                                                            F1),
26503                                                                        LW(1,
26504                                                                           1))),
26505                                                                 Apply
26506                                                                   (Call
26507                                                                      ("HaveThumb2",
26508                                                                       ATy(qTy,
26509                                                                           bTy),
26510                                                                       LU),
26511                                                                    qVar"state"))]),
26512                                                       qVar"state"),
26513                                                    ITE(bVar"v",
26514                                                        TP[Let(bVar"add",
26515                                                               EQ(Mop(Cast
26516                                                                        F1,
26517                                                                      LL[bVar"b'23"]),
26518                                                                  LW(1,1)),
26519                                                               Let(Var("m",
26520                                                                       CTy"offset2"),
26521                                                                   Call
26522                                                                     ("register_form2",
26523                                                                      CTy"offset2",
26524                                                                      Var("Rm",
26525                                                                          F4)),
26526                                                                   ITE(EQ(Var("H",
26527                                                                              F1),
26528                                                                          LW(1,
26529                                                                             1)),
26530                                                                       Call
26531                                                                         ("Load",
26532                                                                          CTy"instruction",
26533                                                                          Call
26534                                                                            ("LoadHalfUnprivileged",
26535                                                                             CTy"Load",
26536                                                                             TP[EQ(Var("S",
26537                                                                                       F1),
26538                                                                                   LW(0,
26539                                                                                      1)),
26540                                                                                bVar"add",
26541                                                                                LT,
26542                                                                                Var("Rt",
26543                                                                                    F4),
26544                                                                                Var("Rn",
26545                                                                                    F4),
26546                                                                                Var("m",
26547                                                                                    CTy"offset2")])),
26548                                                                       Call
26549                                                                         ("Load",
26550                                                                          CTy"instruction",
26551                                                                          Call
26552                                                                            ("LoadSignedByteUnprivileged",
26553                                                                             CTy"Load",
26554                                                                             TP[bVar"add",
26555                                                                                LT,
26556                                                                                Var("Rt",
26557                                                                                    F4),
26558                                                                                Var("Rn",
26559                                                                                    F4),
26560                                                                                Var("m",
26561                                                                                    CTy"offset2")]))))),
26562                                                           ITE(Bop(Or,
26563                                                                   EQ(Var("Rt",
26564                                                                          F4),
26565                                                                      LW(15,
26566                                                                         4)),
26567                                                                   Bop(Or,
26568                                                                       EQ(Var("Rn",
26569                                                                              F4),
26570                                                                          LW(15,
26571                                                                             4)),
26572                                                                       Bop(Or,
26573                                                                           EQ(Var("Rn",
26574                                                                                  F4),
26575                                                                              Var("Rt",
26576                                                                                  F4)),
26577                                                                           Bop(Or,
26578                                                                               EQ(Var("Rm",
26579                                                                                      F4),
26580                                                                                  LW(15,
26581                                                                                     4)),
26582                                                                               Mop(Not,
26583                                                                                   EQ(Mop(Cast
26584                                                                                            F4,
26585                                                                                          LL[bVar"b'11",
26586                                                                                             bVar"b'10",
26587                                                                                             bVar"b'9",
26588                                                                                             bVar"b'8"]),
26589                                                                                      LW(0,
26590                                                                                         4))))))),
26591                                                               Apply
26592                                                                 (Call
26593                                                                    ("DECODE_UNPREDICTABLE",
26594                                                                     ATy(qTy,
26595                                                                         qTy),
26596                                                                     TP[Var("mc",
26597                                                                            CTy"MachineCode"),
26598                                                                        LS
26599                                                                         "LoadHalf/Byte (unprivileged)"]),
26600                                                                  qVar"s"),
26601                                                               qVar"s")],
26602                                                        TP[Apply
26603                                                             (Call
26604                                                                ("Skip",
26605                                                                 ATy(qTy,
26606                                                                     CTy"instruction"),
26607                                                                 LU),
26608                                                              qVar"s"),
26609                                                           qVar"s"])))))))),
26610                           (Bop(And,Mop(Not,bVar"b'22"),
26611                                Bop(And,bVar"b'20",
26612                                    Bop(And,bVar"b'7",bVar"b'4"))),
26613                            Let(Var("Rm",F4),
26614                                Mop(Cast F4,
26615                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
26616                                       bVar"b'0"]),
26617                                Let(Var("H",F1),
26618                                    Mop(Cast F1,LL[bVar"b'5"]),
26619                                    Let(Var("S",F1),
26620                                        Mop(Cast F1,LL[bVar"b'6"]),
26621                                        Let(Var("Rt",F4),
26622                                            Mop(Cast F4,
26623                                                LL[bVar"b'15",bVar"b'14",
26624                                                   bVar"b'13",bVar"b'12"]),
26625                                            Let(Var("Rn",F4),
26626                                                Mop(Cast F4,
26627                                                    LL[bVar"b'19",
26628                                                       bVar"b'18",
26629                                                       bVar"b'17",
26630                                                       bVar"b'16"]),
26631                                                Let(Var("P",F1),
26632                                                    Mop(Cast F1,
26633                                                        LL[bVar"b'24"]),
26634                                                    Let(TP[bVar"v",qVar"s"],
26635                                                        Apply
26636                                                          (Call
26637                                                             ("Do",
26638                                                              ATy(qTy,
26639                                                                  PTy(bTy,
26640                                                                      qTy)),
26641                                                              TP[Var("cond",
26642                                                                     F4),
26643                                                                 Bop(Or,
26644                                                                     Mop(Not,
26645                                                                         EQ(Var("H",
26646                                                                                F1),
26647                                                                            LW(0,
26648                                                                               1))),
26649                                                                     EQ(Var("S",
26650                                                                            F1),
26651                                                                        LW(1,
26652                                                                           1)))]),
26653                                                           qVar"state"),
26654                                                        ITE(bVar"v",
26655                                                            Let(bVar"wback",
26656                                                                Bop(Or,
26657                                                                    EQ(Var("P",
26658                                                                           F1),
26659                                                                       LW(0,
26660                                                                          1)),
26661                                                                    EQ(Mop(Cast
26662                                                                             F1,
26663                                                                           LL[bVar"b'21"]),
26664                                                                       LW(1,
26665                                                                          1))),
26666                                                                TP[Let(bVar"index",
26667                                                                       EQ(Var("P",
26668                                                                              F1),
26669                                                                          LW(1,
26670                                                                             1)),
26671                                                                       Let(bVar"add",
26672                                                                           EQ(Mop(Cast
26673                                                                                    F1,
26674                                                                                  LL[bVar"b'23"]),
26675                                                                              LW(1,
26676                                                                                 1)),
26677                                                                           Let(bVar"unsigned",
26678                                                                               EQ(Var("S",
26679                                                                                      F1),
26680                                                                                  LW(0,
26681                                                                                     1)),
26682                                                                               Let(Var("m",
26683                                                                                       CTy"offset1"),
26684                                                                                   Call
26685                                                                                     ("register_form1",
26686                                                                                      CTy"offset1",
26687                                                                                      TP[Var("Rm",
26688                                                                                             F4),
26689                                                                                         LC("SRType_LSL",
26690                                                                                            CTy"SRType"),
26691                                                                                         LN
26692                                                                                          0]),
26693                                                                                   ITE(EQ(Var("H",
26694                                                                                              F1),
26695                                                                                          LW(1,
26696                                                                                             1)),
26697                                                                                       Call
26698                                                                                         ("Load",
26699                                                                                          CTy"instruction",
26700                                                                                          Call
26701                                                                                            ("LoadHalf",
26702                                                                                             CTy"Load",
26703                                                                                             TP[bVar"unsigned",
26704                                                                                                bVar"add",
26705                                                                                                bVar"index",
26706                                                                                                bVar"wback",
26707                                                                                                Var("Rt",
26708                                                                                                    F4),
26709                                                                                                Var("Rn",
26710                                                                                                    F4),
26711                                                                                                Var("m",
26712                                                                                                    CTy"offset1")])),
26713                                                                                       Call
26714                                                                                         ("Load",
26715                                                                                          CTy"instruction",
26716                                                                                          Call
26717                                                                                            ("LoadByte",
26718                                                                                             CTy"Load",
26719                                                                                             TP[bVar"unsigned",
26720                                                                                                bVar"add",
26721                                                                                                bVar"index",
26722                                                                                                bVar"wback",
26723                                                                                                Var("Rt",
26724                                                                                                    F4),
26725                                                                                                Var("Rn",
26726                                                                                                    F4),
26727                                                                                                Var("m",
26728                                                                                                    CTy"offset1")]))))))),
26729                                                                   ITE(Bop(Or,
26730                                                                           EQ(Var("Rt",
26731                                                                                  F4),
26732                                                                              LW(15,
26733                                                                                 4)),
26734                                                                           Bop(Or,
26735                                                                               EQ(Var("Rm",
26736                                                                                      F4),
26737                                                                                  LW(15,
26738                                                                                     4)),
26739                                                                               Bop(Or,
26740                                                                                   Bop(And,
26741                                                                                       Bop(Lt,
26742                                                                                           Apply
26743                                                                                             (Call
26744                                                                                                ("ArchVersion",
26745                                                                                                 ATy(qTy,
26746                                                                                                     nTy),
26747                                                                                                 LU),
26748                                                                                              qVar"s"),
26749                                                                                           LN
26750                                                                                            6),
26751                                                                                       Bop(And,
26752                                                                                           bVar"wback",
26753                                                                                           EQ(Var("Rm",
26754                                                                                                  F4),
26755                                                                                              Var("Rn",
26756                                                                                                  F4)))),
26757                                                                                   Mop(Not,
26758                                                                                       EQ(Mop(Cast
26759                                                                                                F4,
26760                                                                                              LL[bVar"b'11",
26761                                                                                                 bVar"b'10",
26762                                                                                                 bVar"b'9",
26763                                                                                                 bVar"b'8"]),
26764                                                                                          LW(0,
26765                                                                                             4)))))),
26766                                                                       Apply
26767                                                                         (Call
26768                                                                            ("DECODE_UNPREDICTABLE",
26769                                                                             ATy(qTy,
26770                                                                                 qTy),
26771                                                                             TP[Var("mc",
26772                                                                                    CTy"MachineCode"),
26773                                                                                LS
26774                                                                                 "LoadHalf/Byte"]),
26775                                                                          qVar"s"),
26776                                                                       qVar"s")]),
26777                                                            TP[Apply
26778                                                                 (Call
26779                                                                    ("Skip",
26780                                                                     ATy(qTy,
26781                                                                         CTy"instruction"),
26782                                                                     LU),
26783                                                                  qVar"s"),
26784                                                               qVar"s"]))))))))),
26785                           (Bop(And,Mop(Not,bVar"b'22"),
26786                                Bop(And,Mop(Not,bVar"b'20"),
26787                                    Bop(And,bVar"b'7",
26788                                        Bop(And,bVar"b'6",bVar"b'4")))),
26789                            Let(Var("Rm",F4),
26790                                Mop(Cast F4,
26791                                    LL[bVar"b'3",bVar"b'2",bVar"b'1",
26792                                       bVar"b'0"]),
26793                                Let(Var("Rt",F4),
26794                                    Mop(Cast F4,
26795                                        LL[bVar"b'15",bVar"b'14",
26796                                           bVar"b'13",bVar"b'12"]),
26797                                    Let(Var("Rn",F4),
26798                                        Mop(Cast F4,
26799                                            LL[bVar"b'19",bVar"b'18",
26800                                               bVar"b'17",bVar"b'16"]),
26801                                        Let(Var("W",F1),
26802                                            Mop(Cast F1,LL[bVar"b'21"]),
26803                                            Let(Var("P",F1),
26804                                                Mop(Cast F1,LL[bVar"b'24"]),
26805                                                Let(TP[bVar"v",qVar"s"],
26806                                                    Apply
26807                                                      (Call
26808                                                         ("Do",
26809                                                          ATy(qTy,
26810                                                              PTy(bTy,qTy)),
26811                                                          TP[Var("cond",F4),
26812                                                             Apply
26813                                                               (Call
26814                                                                  ("HaveDSPSupport",
26815                                                                   ATy(qTy,
26816                                                                       bTy),
26817                                                                   LU),
26818                                                                qVar"state")]),
26819                                                       qVar"state"),
26820                                                    ITE(bVar"v",
26821                                                        Let(Var("Rt2",F4),
26822                                                            Bop(Add,
26823                                                                Var("Rt",
26824                                                                    F4),
26825                                                                LW(1,4)),
26826                                                            Let(bVar"wback",
26827                                                                Bop(Or,
26828                                                                    EQ(Var("P",
26829                                                                           F1),
26830                                                                       LW(0,
26831                                                                          1)),
26832                                                                    EQ(Var("W",
26833                                                                           F1),
26834                                                                       LW(1,
26835                                                                          1))),
26836                                                                Let(bVar"store",
26837                                                                    EQ(Mop(Cast
26838                                                                             F1,
26839                                                                           LL[bVar"b'5"]),
26840                                                                       LW(1,
26841                                                                          1)),
26842                                                                    TP[Let(bVar"index",
26843                                                                           EQ(Var("P",
26844                                                                                  F1),
26845                                                                              LW(1,
26846                                                                                 1)),
26847                                                                           Let(bVar"add",
26848                                                                               EQ(Mop(Cast
26849                                                                                        F1,
26850                                                                                      LL[bVar"b'23"]),
26851                                                                                  LW(1,
26852                                                                                     1)),
26853                                                                               Let(Var("m",
26854                                                                                       CTy"offset2"),
26855                                                                                   Call
26856                                                                                     ("register_form2",
26857                                                                                      CTy"offset2",
26858                                                                                      Var("Rm",
26859                                                                                          F4)),
26860                                                                                   ITE(bVar"store",
26861                                                                                       Call
26862                                                                                         ("Store",
26863                                                                                          CTy"instruction",
26864                                                                                          Call
26865                                                                                            ("StoreDual",
26866                                                                                             CTy"Store",
26867                                                                                             TP[bVar"add",
26868                                                                                                bVar"index",
26869                                                                                                bVar"wback",
26870                                                                                                Var("Rt",
26871                                                                                                    F4),
26872                                                                                                Var("Rt2",
26873                                                                                                    F4),
26874                                                                                                Var("Rn",
26875                                                                                                    F4),
26876                                                                                                Var("m",
26877                                                                                                    CTy"offset2")])),
26878                                                                                       Call
26879                                                                                         ("Load",
26880                                                                                          CTy"instruction",
26881                                                                                          Call
26882                                                                                            ("LoadDual",
26883                                                                                             CTy"Load",
26884                                                                                             TP[bVar"add",
26885                                                                                                bVar"index",
26886                                                                                                bVar"wback",
26887                                                                                                Var("Rt",
26888                                                                                                    F4),
26889                                                                                                Var("Rt2",
26890                                                                                                    F4),
26891                                                                                                Var("Rn",
26892                                                                                                    F4),
26893                                                                                                Var("m",
26894                                                                                                    CTy"offset2")])))))),
26895                                                                       ITE(Bop(Or,
26896                                                                               Bop(Bit,
26897                                                                                   Var("Rt",
26898                                                                                       F4),
26899                                                                                   LN
26900                                                                                    0),
26901                                                                               Bop(Or,
26902                                                                                   Bop(And,
26903                                                                                       EQ(Var("P",
26904                                                                                              F1),
26905                                                                                          LW(0,
26906                                                                                             1)),
26907                                                                                       EQ(Var("W",
26908                                                                                              F1),
26909                                                                                          LW(1,
26910                                                                                             1))),
26911                                                                                   Bop(Or,
26912                                                                                       EQ(Var("Rt2",
26913                                                                                              F4),
26914                                                                                          LW(15,
26915                                                                                             4)),
26916                                                                                       Bop(Or,
26917                                                                                           EQ(Var("Rm",
26918                                                                                                  F4),
26919                                                                                              LW(15,
26920                                                                                                 4)),
26921                                                                                           Bop(Or,
26922                                                                                               Bop(And,
26923                                                                                                   Mop(Not,
26924                                                                                                       bVar"store"),
26925                                                                                                   Bop(Or,
26926                                                                                                       EQ(Var("Rm",
26927                                                                                                              F4),
26928                                                                                                          Var("Rt",
26929                                                                                                              F4)),
26930                                                                                                       EQ(Var("Rm",
26931                                                                                                              F4),
26932                                                                                                          Var("Rt2",
26933                                                                                                              F4)))),
26934                                                                                               Bop(Or,
26935                                                                                                   Bop(And,
26936                                                                                                       bVar"wback",
26937                                                                                                       Bop(Or,
26938                                                                                                           EQ(Var("Rn",
26939                                                                                                                  F4),
26940                                                                                                              LW(15,
26941                                                                                                                 4)),
26942                                                                                                           Bop(Or,
26943                                                                                                               EQ(Var("Rn",
26944                                                                                                                      F4),
26945                                                                                                                  Var("Rt",
26946                                                                                                                      F4)),
26947                                                                                                               EQ(Var("Rn",
26948                                                                                                                      F4),
26949                                                                                                                  Var("Rt2",
26950                                                                                                                      F4))))),
26951                                                                                                   Bop(Or,
26952                                                                                                       Bop(And,
26953                                                                                                           Bop(Lt,
26954                                                                                                               Apply
26955                                                                                                                 (Call
26956                                                                                                                    ("ArchVersion",
26957                                                                                                                     ATy(qTy,
26958                                                                                                                         nTy),
26959                                                                                                                     LU),
26960                                                                                                                  qVar"s"),
26961                                                                                                               LN
26962                                                                                                                6),
26963                                                                                                           Bop(And,
26964                                                                                                               bVar"wback",
26965                                                                                                               EQ(Var("Rm",
26966                                                                                                                      F4),
26967                                                                                                                  Var("Rn",
26968                                                                                                                      F4)))),
26969                                                                                                       Mop(Not,
26970                                                                                                           EQ(Mop(Cast
26971                                                                                                                    F4,
26972                                                                                                                  LL[bVar"b'11",
26973                                                                                                                     bVar"b'10",
26974                                                                                                                     bVar"b'9",
26975                                                                                                                     bVar"b'8"]),
26976                                                                                                              LW(0,
26977                                                                                                                 4)))))))))),
26978                                                                           Apply
26979                                                                             (Call
26980                                                                                ("DECODE_UNPREDICTABLE",
26981                                                                                 ATy(qTy,
26982                                                                                     qTy),
26983                                                                                 TP[Var("mc",
26984                                                                                        CTy"MachineCode"),
26985                                                                                    LS
26986                                                                                     "Load/StoreDual (register)"]),
26987                                                                              qVar"s"),
26988                                                                           qVar"s")]))),
26989                                                        TP[Apply
26990                                                             (Call
26991                                                                ("Skip",
26992                                                                 ATy(qTy,
26993                                                                     CTy"instruction"),
26994                                                                 LU),
26995                                                              qVar"s"),
26996                                                           qVar"s"])))))))),
26997                           (Bop(And,bVar"b'22",
26998                                Bop(And,Mop(Not,bVar"b'20"),
26999                                    Bop(And,bVar"b'19",
27000                                        Bop(And,bVar"b'18",
27001                                            Bop(And,bVar"b'17",
27002                                                Bop(And,bVar"b'16",
27003                                                    Bop(And,bVar"b'7",
27004                                                        Bop(And,bVar"b'6",
27005                                                            Bop(And,
27006                                                                Mop(Not,
27007                                                                    bVar"b'5"),
27008                                                                bVar"b'4"))))))))),
27009                            Let(Var("Rt",F4),
27010                                Mop(Cast F4,
27011                                    LL[bVar"b'15",bVar"b'14",bVar"b'13",
27012                                       bVar"b'12"]),
27013                                Let(TP[bVar"v",qVar"s"],
27014                                    Apply
27015                                      (Call
27016                                         ("Do",ATy(qTy,PTy(bTy,qTy)),
27017                                          TP[Var("cond",F4),
27018                                             Apply
27019                                               (Call
27020                                                  ("HaveDSPSupport",
27021                                                   ATy(qTy,bTy),LU),
27022                                                qVar"state")]),qVar"state"),
27023                                    ITE(bVar"v",
27024                                        Let(Var("Rt2",F4),
27025                                            Bop(Add,Var("Rt",F4),LW(1,4)),
27026                                            TP[Call
27027                                                 ("Load",CTy"instruction",
27028                                                  Call
27029                                                    ("LoadDualLiteral",
27030                                                     CTy"Load",
27031                                                     TP[EQ(Mop(Cast F1,
27032                                                               LL[bVar"b'23"]),
27033                                                           LW(1,1)),
27034                                                        Var("Rt",F4),
27035                                                        Var("Rt2",F4),
27036                                                        Mop(Cast F32,
27037                                                            CC[Mop(Cast F4,
27038                                                                   LL[bVar"b'11",
27039                                                                      bVar"b'10",
27040                                                                      bVar"b'9",
27041                                                                      bVar"b'8"]),
27042                                                               Mop(Cast F4,
27043                                                                   LL[bVar"b'3",
27044                                                                      bVar"b'2",
27045                                                                      bVar"b'1",
27046                                                                      bVar"b'0"])])])),
27047                                               ITE(Bop(Or,
27048                                                       Bop(Bit,
27049                                                           Var("Rt",F4),
27050                                                           LN 0),
27051                                                       Bop(Or,
27052                                                           EQ(Var("Rt2",F4),
27053                                                              LW(15,4)),
27054                                                           Mop(Not,
27055                                                               Bop(And,
27056                                                                   EQ(Mop(Cast
27057                                                                            F1,
27058                                                                          LL[bVar"b'24"]),
27059                                                                      LW(1,
27060                                                                         1)),
27061                                                                   EQ(Mop(Cast
27062                                                                            F1,
27063                                                                          LL[bVar"b'21"]),
27064                                                                      LW(0,
27065                                                                         1)))))),
27066                                                   Apply
27067                                                     (Call
27068                                                        ("DECODE_UNPREDICTABLE",
27069                                                         ATy(qTy,qTy),
27070                                                         TP[Var("mc",
27071                                                                CTy"MachineCode"),
27072                                                            LS
27073                                                             "LoadDual (literal)"]),
27074                                                      qVar"s"),qVar"s")]),
27075                                        TP[Apply
27076                                             (Call
27077                                                ("Skip",
27078                                                 ATy(qTy,CTy"instruction"),
27079                                                 LU),qVar"s"),qVar"s"])))),
27080                           (Bop(And,bVar"b'22",
27081                                Bop(And,Mop(Not,bVar"b'20"),
27082                                    Bop(And,bVar"b'7",
27083                                        Bop(And,bVar"b'6",bVar"b'4")))),
27084                            Let(Var("S",F1),Mop(Cast F1,LL[bVar"b'5"]),
27085                                Let(Var("Rt",F4),
27086                                    Mop(Cast F4,
27087                                        LL[bVar"b'15",bVar"b'14",
27088                                           bVar"b'13",bVar"b'12"]),
27089                                    Let(Var("Rn",F4),
27090                                        Mop(Cast F4,
27091                                            LL[bVar"b'19",bVar"b'18",
27092                                               bVar"b'17",bVar"b'16"]),
27093                                        Let(Var("W",F1),
27094                                            Mop(Cast F1,LL[bVar"b'21"]),
27095                                            Let(Var("P",F1),
27096                                                Mop(Cast F1,LL[bVar"b'24"]),
27097                                                Let(TP[bVar"v",qVar"s"],
27098                                                    Apply
27099                                                      (Call
27100                                                         ("Do",
27101                                                          ATy(qTy,
27102                                                              PTy(bTy,qTy)),
27103                                                          TP[Var("cond",F4),
27104                                                             Apply
27105                                                               (Call
27106                                                                  ("HaveDSPSupport",
27107                                                                   ATy(qTy,
27108                                                                       bTy),
27109                                                                   LU),
27110                                                                qVar"state")]),
27111                                                       qVar"state"),
27112                                                    ITE(bVar"v",
27113                                                        Let(Var("Rt2",F4),
27114                                                            Bop(Add,
27115                                                                Var("Rt",
27116                                                                    F4),
27117                                                                LW(1,4)),
27118                                                            Let(bVar"wback",
27119                                                                Bop(Or,
27120                                                                    EQ(Var("P",
27121                                                                           F1),
27122                                                                       LW(0,
27123                                                                          1)),
27124                                                                    EQ(Var("W",
27125                                                                           F1),
27126                                                                       LW(1,
27127                                                                          1))),
27128                                                                TP[Let(bVar"index",
27129                                                                       EQ(Var("P",
27130                                                                              F1),
27131                                                                          LW(1,
27132                                                                             1)),
27133                                                                       Let(bVar"add",
27134                                                                           EQ(Mop(Cast
27135                                                                                    F1,
27136                                                                                  LL[bVar"b'23"]),
27137                                                                              LW(1,
27138                                                                                 1)),
27139                                                                           Let(Var("m",
27140                                                                                   CTy"offset2"),
27141                                                                               Call
27142                                                                                 ("immediate_form2",
27143                                                                                  CTy"offset2",
27144                                                                                  Mop(Cast
27145                                                                                        F32,
27146                                                                                      CC[Mop(Cast
27147                                                                                               F4,
27148                                                                                             LL[bVar"b'11",
27149                                                                                                bVar"b'10",
27150                                                                                                bVar"b'9",
27151                                                                                                bVar"b'8"]),
27152                                                                                         Mop(Cast
27153                                                                                               F4,
27154                                                                                             LL[bVar"b'3",
27155                                                                                                bVar"b'2",
27156                                                                                                bVar"b'1",
27157                                                                                                bVar"b'0"])])),
27158                                                                               ITE(EQ(Var("S",
27159                                                                                          F1),
27160                                                                                      LW(1,
27161                                                                                         1)),
27162                                                                                   Call
27163                                                                                     ("Store",
27164                                                                                      CTy"instruction",
27165                                                                                      Call
27166                                                                                        ("StoreDual",
27167                                                                                         CTy"Store",
27168                                                                                         TP[bVar"add",
27169                                                                                            bVar"index",
27170                                                                                            bVar"wback",
27171                                                                                            Var("Rt",
27172                                                                                                F4),
27173                                                                                            Var("Rt2",
27174                                                                                                F4),
27175                                                                                            Var("Rn",
27176                                                                                                F4),
27177                                                                                            Var("m",
27178                                                                                                CTy"offset2")])),
27179                                                                                   Call
27180                                                                                     ("Load",
27181                                                                                      CTy"instruction",
27182                                                                                      Call
27183                                                                                        ("LoadDual",
27184                                                                                         CTy"Load",
27185                                                                                         TP[bVar"add",
27186                                                                                            bVar"index",
27187                                                                                            bVar"wback",
27188                                                                                            Var("Rt",
27189                                                                                                F4),
27190                                                                                            Var("Rt2",
27191                                                                                                F4),
27192                                                                                            Var("Rn",
27193                                                                                                F4),
27194                                                                                            Var("m",
27195                                                                                                CTy"offset2")])))))),
27196                                                                   ITE(Bop(Or,
27197                                                                           Bop(Bit,
27198                                                                               Var("Rt",
27199                                                                                   F4),
27200                                                                               LN
27201                                                                                0),
27202                                                                           Bop(Or,
27203                                                                               Bop(And,
27204                                                                                   EQ(Var("P",
27205                                                                                          F1),
27206                                                                                      LW(0,
27207                                                                                         1)),
27208                                                                                   EQ(Var("W",
27209                                                                                          F1),
27210                                                                                      LW(1,
27211                                                                                         1))),
27212                                                                               Bop(Or,
27213                                                                                   Bop(And,
27214                                                                                       bVar"wback",
27215                                                                                       Bop(Or,
27216                                                                                           Bop(And,
27217                                                                                               EQ(Var("S",
27218                                                                                                      F1),
27219                                                                                                  LW(1,
27220                                                                                                     1)),
27221                                                                                               EQ(Var("Rn",
27222                                                                                                      F4),
27223                                                                                                  LW(15,
27224                                                                                                     4))),
27225                                                                                           Bop(Or,
27226                                                                                               EQ(Var("Rn",
27227                                                                                                      F4),
27228                                                                                                  Var("Rt",
27229                                                                                                      F4)),
27230                                                                                               EQ(Var("Rn",
27231                                                                                                      F4),
27232                                                                                                  Var("Rt2",
27233                                                                                                      F4))))),
27234                                                                                   EQ(Var("Rt2",
27235                                                                                          F4),
27236                                                                                      LW(15,
27237                                                                                         4))))),
27238                                                                       Apply
27239                                                                         (Call
27240                                                                            ("DECODE_UNPREDICTABLE",
27241                                                                             ATy(qTy,
27242                                                                                 qTy),
27243                                                                             TP[Var("mc",
27244                                                                                    CTy"MachineCode"),
27245                                                                                LS
27246                                                                                 "Load/StoreDual (immediate)"]),
27247                                                                          qVar"s"),
27248                                                                       qVar"s")])),
27249                                                        TP[Apply
27250                                                             (Call
27251                                                                ("Skip",
27252                                                                 ATy(qTy,
27253                                                                     CTy"instruction"),
27254                                                                 LU),
27255                                                              qVar"s"),
27256                                                           qVar"s"])))))))),
27257                           (Bop(And,Mop(Not,bVar"b'24"),
27258                                Bop(And,bVar"b'22",
27259                                    Bop(And,bVar"b'21",
27260                                        Bop(And,bVar"b'20",
27261                                            Bop(And,bVar"b'7",bVar"b'4"))))),
27262                            Let(Var("H",F1),Mop(Cast F1,LL[bVar"b'5"]),
27263                                Let(Var("S",F1),
27264                                    Mop(Cast F1,LL[bVar"b'6"]),
27265                                    Let(Var("Rt",F4),
27266                                        Mop(Cast F4,
27267                                            LL[bVar"b'15",bVar"b'14",
27268                                               bVar"b'13",bVar"b'12"]),
27269                                        Let(Var("Rn",F4),
27270                                            Mop(Cast F4,
27271                                                LL[bVar"b'19",bVar"b'18",
27272                                                   bVar"b'17",bVar"b'16"]),
27273                                            Let(TP[bVar"v",qVar"s"],
27274                                                Apply
27275                                                  (Call
27276                                                     ("Do",
27277                                                      ATy(qTy,PTy(bTy,qTy)),
27278                                                      TP[Var("cond",F4),
27279                                                         Bop(And,
27280                                                             Bop(Or,
27281                                                                 Mop(Not,
27282                                                                     EQ(Var("H",
27283                                                                            F1),
27284                                                                        LW(0,
27285                                                                           1))),
27286                                                                 EQ(Var("S",
27287                                                                        F1),
27288                                                                    LW(1,1))),
27289                                                             Apply
27290                                                               (Call
27291                                                                  ("HaveThumb2",
27292                                                                   ATy(qTy,
27293                                                                       bTy),
27294                                                                   LU),
27295                                                                qVar"state"))]),
27296                                                   qVar"state"),
27297                                                ITE(bVar"v",
27298                                                    TP[Let(bVar"add",
27299                                                           EQ(Mop(Cast F1,
27300                                                                  LL[bVar"b'23"]),
27301                                                              LW(1,1)),
27302                                                           Let(Var("m",
27303                                                                   CTy"offset2"),
27304                                                               Call
27305                                                                 ("immediate_form2",
27306                                                                  CTy"offset2",
27307                                                                  Mop(Cast
27308                                                                        F32,
27309                                                                      CC[Mop(Cast
27310                                                                               F4,
27311                                                                             LL[bVar"b'11",
27312                                                                                bVar"b'10",
27313                                                                                bVar"b'9",
27314                                                                                bVar"b'8"]),
27315                                                                         Mop(Cast
27316                                                                               F4,
27317                                                                             LL[bVar"b'3",
27318                                                                                bVar"b'2",
27319                                                                                bVar"b'1",
27320                                                                                bVar"b'0"])])),
27321                                                               ITE(EQ(Var("H",
27322                                                                          F1),
27323                                                                      LW(1,
27324                                                                         1)),
27325                                                                   Call
27326                                                                     ("Load",
27327                                                                      CTy"instruction",
27328                                                                      Call
27329                                                                        ("LoadHalfUnprivileged",
27330                                                                         CTy"Load",
27331                                                                         TP[EQ(Var("S",
27332                                                                                   F1),
27333                                                                               LW(0,
27334                                                                                  1)),
27335                                                                            bVar"add",
27336                                                                            LT,
27337                                                                            Var("Rt",
27338                                                                                F4),
27339                                                                            Var("Rn",
27340                                                                                F4),
27341                                                                            Var("m",
27342                                                                                CTy"offset2")])),
27343                                                                   Call
27344                                                                     ("Load",
27345                                                                      CTy"instruction",
27346                                                                      Call
27347                                                                        ("LoadSignedByteUnprivileged",
27348                                                                         CTy"Load",
27349                                                                         TP[bVar"add",
27350                                                                            LT,
27351                                                                            Var("Rt",
27352                                                                                F4),
27353                                                                            Var("Rn",
27354                                                                                F4),
27355                                                                            Var("m",
27356                                                                                CTy"offset2")]))))),
27357                                                       ITE(Bop(Or,
27358                                                               EQ(Var("Rt",
27359                                                                      F4),
27360                                                                  LW(15,4)),
27361                                                               Bop(Or,
27362                                                                   EQ(Var("Rn",
27363                                                                          F4),
27364                                                                      LW(15,
27365                                                                         4)),
27366                                                                   EQ(Var("Rn",
27367                                                                          F4),
27368                                                                      Var("Rt",
27369                                                                          F4)))),
27370                                                           Apply
27371                                                             (Call
27372                                                                ("DECODE_UNPREDICTABLE",
27373                                                                 ATy(qTy,
27374                                                                     qTy),
27375                                                                 TP[Var("mc",
27376                                                                        CTy"MachineCode"),
27377                                                                    LS
27378                                                                     "LoadHalf/Byte (unprivileged)"]),
27379                                                              qVar"s"),
27380                                                           qVar"s")],
27381                                                    TP[Apply
27382                                                         (Call
27383                                                            ("Skip",
27384                                                             ATy(qTy,
27385                                                                 CTy"instruction"),
27386                                                             LU),qVar"s"),
27387                                                       qVar"s"]))))))),
27388                           (Bop(And,bVar"b'22",
27389                                Bop(And,bVar"b'20",
27390                                    Bop(And,bVar"b'19",
27391                                        Bop(And,bVar"b'18",
27392                                            Bop(And,bVar"b'17",
27393                                                Bop(And,bVar"b'16",
27394                                                    Bop(And,bVar"b'7",
27395                                                        bVar"b'4"))))))),
27396                            Let(Var("H",F1),Mop(Cast F1,LL[bVar"b'5"]),
27397                                Let(Var("S",F1),
27398                                    Mop(Cast F1,LL[bVar"b'6"]),
27399                                    Let(Var("Rt",F4),
27400                                        Mop(Cast F4,
27401                                            LL[bVar"b'15",bVar"b'14",
27402                                               bVar"b'13",bVar"b'12"]),
27403                                        Let(TP[bVar"v",qVar"s"],
27404                                            Apply
27405                                              (Call
27406                                                 ("Do",
27407                                                  ATy(qTy,PTy(bTy,qTy)),
27408                                                  TP[Var("cond",F4),
27409                                                     Bop(Or,
27410                                                         Mop(Not,
27411                                                             EQ(Var("H",F1),
27412                                                                LW(0,1))),
27413                                                         EQ(Var("S",F1),
27414                                                            LW(1,1)))]),
27415                                               qVar"state"),
27416                                            ITE(bVar"v",
27417                                                TP[Let(bVar"add",
27418                                                       EQ(Mop(Cast F1,
27419                                                              LL[bVar"b'23"]),
27420                                                          LW(1,1)),
27421                                                       Let(bVar"unsigned",
27422                                                           EQ(Var("S",F1),
27423                                                              LW(0,1)),
27424                                                           Let(Var("imm32",
27425                                                                   F32),
27426                                                               Mop(Cast
27427                                                                     F32,
27428                                                                   CC[Mop(Cast
27429                                                                            F4,
27430                                                                          LL[bVar"b'11",
27431                                                                             bVar"b'10",
27432                                                                             bVar"b'9",
27433                                                                             bVar"b'8"]),
27434                                                                      Mop(Cast
27435                                                                            F4,
27436                                                                          LL[bVar"b'3",
27437                                                                             bVar"b'2",
27438                                                                             bVar"b'1",
27439                                                                             bVar"b'0"])]),
27440                                                               ITE(EQ(Var("H",
27441                                                                          F1),
27442                                                                      LW(1,
27443                                                                         1)),
27444                                                                   Call
27445                                                                     ("Load",
27446                                                                      CTy"instruction",
27447                                                                      Call
27448                                                                        ("LoadHalfLiteral",
27449                                                                         CTy"Load",
27450                                                                         TP[bVar"unsigned",
27451                                                                            bVar"add",
27452                                                                            Var("Rt",
27453                                                                                F4),
27454                                                                            Var("imm32",
27455                                                                                F32)])),
27456                                                                   Call
27457                                                                     ("Load",
27458                                                                      CTy"instruction",
27459                                                                      Call
27460                                                                        ("LoadByteLiteral",
27461                                                                         CTy"Load",
27462                                                                         TP[bVar"unsigned",
27463                                                                            bVar"add",
27464                                                                            Var("Rt",
27465                                                                                F4),
27466                                                                            Var("imm32",
27467                                                                                F32)])))))),
27468                                                   ITE(Bop(Or,
27469                                                           EQ(Var("Rt",F4),
27470                                                              LW(15,4)),
27471                                                           Mop(Not,
27472                                                               Bop(And,
27473                                                                   EQ(Mop(Cast
27474                                                                            F1,
27475                                                                          LL[bVar"b'24"]),
27476                                                                      LW(1,
27477                                                                         1)),
27478                                                                   EQ(Mop(Cast
27479                                                                            F1,
27480                                                                          LL[bVar"b'21"]),
27481                                                                      LW(0,
27482                                                                         1))))),
27483                                                       Apply
27484                                                         (Call
27485                                                            ("DECODE_UNPREDICTABLE",
27486                                                             ATy(qTy,qTy),
27487                                                             TP[Var("mc",
27488                                                                    CTy"MachineCode"),
27489                                                                LS
27490                                                                 "LoadHalf/Byte (literal)"]),
27491                                                          qVar"s"),qVar"s")],
27492                                                TP[Apply
27493                                                     (Call
27494                                                        ("Skip",
27495                                                         ATy(qTy,
27496                                                             CTy"instruction"),
27497                                                         LU),qVar"s"),
27498                                                   qVar"s"])))))),
27499                           (Bop(And,bVar"b'22",
27500                                Bop(And,bVar"b'20",
27501                                    Bop(And,bVar"b'7",bVar"b'4"))),
27502                            Let(Var("H",F1),Mop(Cast F1,LL[bVar"b'5"]),
27503                                Let(Var("S",F1),
27504                                    Mop(Cast F1,LL[bVar"b'6"]),
27505                                    Let(Var("Rt",F4),
27506                                        Mop(Cast F4,
27507                                            LL[bVar"b'15",bVar"b'14",
27508                                               bVar"b'13",bVar"b'12"]),
27509                                        Let(Var("Rn",F4),
27510                                            Mop(Cast F4,
27511                                                LL[bVar"b'19",bVar"b'18",
27512                                                   bVar"b'17",bVar"b'16"]),
27513                                            Let(Var("P",F1),
27514                                                Mop(Cast F1,LL[bVar"b'24"]),
27515                                                Let(TP[bVar"v",qVar"s"],
27516                                                    Apply
27517                                                      (Call
27518                                                         ("Do",
27519                                                          ATy(qTy,
27520                                                              PTy(bTy,qTy)),
27521                                                          TP[Var("cond",F4),
27522                                                             Bop(Or,
27523                                                                 Mop(Not,
27524                                                                     EQ(Var("H",
27525                                                                            F1),
27526                                                                        LW(0,
27527                                                                           1))),
27528                                                                 EQ(Var("S",
27529                                                                        F1),
27530                                                                    LW(1,1)))]),
27531                                                       qVar"state"),
27532                                                    ITE(bVar"v",
27533                                                        Let(bVar"wback",
27534                                                            Bop(Or,
27535                                                                EQ(Var("P",
27536                                                                       F1),
27537                                                                   LW(0,1)),
27538                                                                EQ(Mop(Cast
27539                                                                         F1,
27540                                                                       LL[bVar"b'21"]),
27541                                                                   LW(1,1))),
27542                                                            TP[Let(bVar"index",
27543                                                                   EQ(Var("P",
27544                                                                          F1),
27545                                                                      LW(1,
27546                                                                         1)),
27547                                                                   Let(bVar"add",
27548                                                                       EQ(Mop(Cast
27549                                                                                F1,
27550                                                                              LL[bVar"b'23"]),
27551                                                                          LW(1,
27552                                                                             1)),
27553                                                                       Let(bVar"unsigned",
27554                                                                           EQ(Var("S",
27555                                                                                  F1),
27556                                                                              LW(0,
27557                                                                                 1)),
27558                                                                           Let(Var("m",
27559                                                                                   CTy"offset1"),
27560                                                                               Call
27561                                                                                 ("immediate_form1",
27562                                                                                  CTy"offset1",
27563                                                                                  Mop(Cast
27564                                                                                        F32,
27565                                                                                      CC[Mop(Cast
27566                                                                                               F4,
27567                                                                                             LL[bVar"b'11",
27568                                                                                                bVar"b'10",
27569                                                                                                bVar"b'9",
27570                                                                                                bVar"b'8"]),
27571                                                                                         Mop(Cast
27572                                                                                               F4,
27573                                                                                             LL[bVar"b'3",
27574                                                                                                bVar"b'2",
27575                                                                                                bVar"b'1",
27576                                                                                                bVar"b'0"])])),
27577                                                                               ITE(EQ(Var("H",
27578                                                                                          F1),
27579                                                                                      LW(1,
27580                                                                                         1)),
27581                                                                                   Call
27582                                                                                     ("Load",
27583                                                                                      CTy"instruction",
27584                                                                                      Call
27585                                                                                        ("LoadHalf",
27586                                                                                         CTy"Load",
27587                                                                                         TP[bVar"unsigned",
27588                                                                                            bVar"add",
27589                                                                                            bVar"index",
27590                                                                                            bVar"wback",
27591                                                                                            Var("Rt",
27592                                                                                                F4),
27593                                                                                            Var("Rn",
27594                                                                                                F4),
27595                                                                                            Var("m",
27596                                                                                                CTy"offset1")])),
27597                                                                                   Call
27598                                                                                     ("Load",
27599                                                                                      CTy"instruction",
27600                                                                                      Call
27601                                                                                        ("LoadByte",
27602                                                                                         CTy"Load",
27603                                                                                         TP[bVar"unsigned",
27604                                                                                            bVar"add",
27605                                                                                            bVar"index",
27606                                                                                            bVar"wback",
27607                                                                                            Var("Rt",
27608                                                                                                F4),
27609                                                                                            Var("Rn",
27610                                                                                                F4),
27611                                                                                            Var("m",
27612                                                                                                CTy"offset1")]))))))),
27613                                                               ITE(Bop(Or,
27614                                                                       EQ(Var("Rt",
27615                                                                              F4),
27616                                                                          LW(15,
27617                                                                             4)),
27618                                                                       Bop(And,
27619                                                                           bVar"wback",
27620                                                                           EQ(Var("Rn",
27621                                                                                  F4),
27622                                                                              Var("Rt",
27623                                                                                  F4)))),
27624                                                                   Apply
27625                                                                     (Call
27626                                                                        ("DECODE_UNPREDICTABLE",
27627                                                                         ATy(qTy,
27628                                                                             qTy),
27629                                                                         TP[Var("mc",
27630                                                                                CTy"MachineCode"),
27631                                                                            LS
27632                                                                             "LoadHalf/Byte (immediate)"]),
27633                                                                      qVar"s"),
27634                                                                   qVar"s")]),
27635                                                        TP[Apply
27636                                                             (Call
27637                                                                ("Skip",
27638                                                                 ATy(qTy,
27639                                                                     CTy"instruction"),
27640                                                                 LU),
27641                                                              qVar"s"),
27642                                                           qVar"s"])))))))),
27643                           (Bop(And,Mop(Not,bVar"b'24"),
27644                                Bop(And,bVar"b'22",
27645                                    Bop(And,bVar"b'21",
27646                                        Bop(And,Mop(Not,bVar"b'20"),
27647                                            Bop(And,bVar"b'7",
27648                                                Bop(And,
27649                                                    Mop(Not,bVar"b'6"),
27650                                                    Bop(And,bVar"b'5",
27651                                                        bVar"b'4"))))))),
27652                            Let(Var("Rt",F4),
27653                                Mop(Cast F4,
27654                                    LL[bVar"b'15",bVar"b'14",bVar"b'13",
27655                                       bVar"b'12"]),
27656                                Let(Var("Rn",F4),
27657                                    Mop(Cast F4,
27658                                        LL[bVar"b'19",bVar"b'18",
27659                                           bVar"b'17",bVar"b'16"]),
27660                                    Let(TP[bVar"v",qVar"s"],
27661                                        Apply
27662                                          (Call
27663                                             ("Do",ATy(qTy,PTy(bTy,qTy)),
27664                                              TP[Var("cond",F4),
27665                                                 Apply
27666                                                   (Call
27667                                                      ("HaveThumb2",
27668                                                       ATy(qTy,bTy),LU),
27669                                                    qVar"state")]),
27670                                           qVar"state"),
27671                                        ITE(bVar"v",
27672                                            TP[Call
27673                                                 ("Store",
27674                                                  CTy"instruction",
27675                                                  Call
27676                                                    ("StoreHalfUnprivileged",
27677                                                     CTy"Store",
27678                                                     TP[EQ(Mop(Cast F1,
27679                                                               LL[bVar"b'23"]),
27680                                                           LW(1,1)),LT,
27681                                                        Var("Rt",F4),
27682                                                        Var("Rn",F4),
27683                                                        Call
27684                                                          ("immediate_form2",
27685                                                           CTy"offset2",
27686                                                           Mop(Cast F32,
27687                                                               CC[Mop(Cast
27688                                                                        F4,
27689                                                                      LL[bVar"b'11",
27690                                                                         bVar"b'10",
27691                                                                         bVar"b'9",
27692                                                                         bVar"b'8"]),
27693                                                                  Mop(Cast
27694                                                                        F4,
27695                                                                      LL[bVar"b'3",
27696                                                                         bVar"b'2",
27697                                                                         bVar"b'1",
27698                                                                         bVar"b'0"])]))])),
27699                                               ITE(Bop(Or,
27700                                                       EQ(Var("Rt",F4),
27701                                                          LW(15,4)),
27702                                                       Bop(Or,
27703                                                           EQ(Var("Rn",F4),
27704                                                              LW(15,4)),
27705                                                           EQ(Var("Rn",F4),
27706                                                              Var("Rt",F4)))),
27707                                                   Apply
27708                                                     (Call
27709                                                        ("DECODE_UNPREDICTABLE",
27710                                                         ATy(qTy,qTy),
27711                                                         TP[Var("mc",
27712                                                                CTy"MachineCode"),
27713                                                            LS
27714                                                             "StoreHalf (immediate)"]),
27715                                                      qVar"s"),qVar"s")],
27716                                            TP[Apply
27717                                                 (Call
27718                                                    ("Skip",
27719                                                     ATy(qTy,
27720                                                         CTy"instruction"),
27721                                                     LU),qVar"s"),qVar"s"]))))),
27722                           (Bop(And,bVar"b'22",
27723                                Bop(And,Mop(Not,bVar"b'20"),
27724                                    Bop(And,bVar"b'7",
27725                                        Bop(And,Mop(Not,bVar"b'6"),
27726                                            Bop(And,bVar"b'5",bVar"b'4"))))),
27727                            Let(Var("Rt",F4),
27728                                Mop(Cast F4,
27729                                    LL[bVar"b'15",bVar"b'14",bVar"b'13",
27730                                       bVar"b'12"]),
27731                                Let(Var("Rn",F4),
27732                                    Mop(Cast F4,
27733                                        LL[bVar"b'19",bVar"b'18",
27734                                           bVar"b'17",bVar"b'16"]),
27735                                    Let(Var("P",F1),
27736                                        Mop(Cast F1,LL[bVar"b'24"]),
27737                                        Let(TP[bVar"v",qVar"s"],
27738                                            Apply
27739                                              (Call
27740                                                 ("Do",
27741                                                  ATy(qTy,PTy(bTy,qTy)),
27742                                                  TP[Var("cond",F4),LT]),
27743                                               qVar"state"),
27744                                            ITE(bVar"v",
27745                                                Let(bVar"wback",
27746                                                    Bop(Or,
27747                                                        EQ(Var("P",F1),
27748                                                           LW(0,1)),
27749                                                        EQ(Mop(Cast F1,
27750                                                               LL[bVar"b'21"]),
27751                                                           LW(1,1))),
27752                                                    TP[Call
27753                                                         ("Store",
27754                                                          CTy"instruction",
27755                                                          Call
27756                                                            ("StoreHalf",
27757                                                             CTy"Store",
27758                                                             TP[EQ(Mop(Cast
27759                                                                         F1,
27760                                                                       LL[bVar"b'23"]),
27761                                                                   LW(1,1)),
27762                                                                EQ(Var("P",
27763                                                                       F1),
27764                                                                   LW(1,1)),
27765                                                                bVar"wback",
27766                                                                Var("Rt",
27767                                                                    F4),
27768                                                                Var("Rn",
27769                                                                    F4),
27770                                                                Call
27771                                                                  ("immediate_form1",
27772                                                                   CTy"offset1",
27773                                                                   Mop(Cast
27774                                                                         F32,
27775                                                                       CC[Mop(Cast
27776                                                                                F4,
27777                                                                              LL[bVar"b'11",
27778                                                                                 bVar"b'10",
27779                                                                                 bVar"b'9",
27780                                                                                 bVar"b'8"]),
27781                                                                          Mop(Cast
27782                                                                                F4,
27783                                                                              LL[bVar"b'3",
27784                                                                                 bVar"b'2",
27785                                                                                 bVar"b'1",
27786                                                                                 bVar"b'0"])]))])),
27787                                                       ITE(Bop(Or,
27788                                                               EQ(Var("Rt",
27789                                                                      F4),
27790                                                                  LW(15,4)),
27791                                                               Bop(And,
27792                                                                   bVar"wback",
27793                                                                   Bop(Or,
27794                                                                       EQ(Var("Rn",
27795                                                                              F4),
27796                                                                          LW(15,
27797                                                                             4)),
27798                                                                       EQ(Var("Rn",
27799                                                                              F4),
27800                                                                          Var("Rt",
27801                                                                              F4))))),
27802                                                           Apply
27803                                                             (Call
27804                                                                ("DECODE_UNPREDICTABLE",
27805                                                                 ATy(qTy,
27806                                                                     qTy),
27807                                                                 TP[Var("mc",
27808                                                                        CTy"MachineCode"),
27809                                                                    LS
27810                                                                     "StoreHalf (immediate)"]),
27811                                                              qVar"s"),
27812                                                           qVar"s")]),
27813                                                TP[Apply
27814                                                     (Call
27815                                                        ("Skip",
27816                                                         ATy(qTy,
27817                                                             CTy"instruction"),
27818                                                         LU),qVar"s"),
27819                                                   qVar"s"]))))))],
27820                          Apply
27821                            (Call
27822                               ("UndefinedARM",
27823                                ATy(qTy,PTy(CTy"instruction",qTy)),
27824                                Var("cond",F4)),qVar"state"))))))))
27825;
27826val DecodeThumb_def = Def
27827  ("DecodeThumb",Var("h",F16),
27828   Close
27829     (qVar"state",
27830      Let(Var("mc",CTy"MachineCode"),
27831          Call("Thumb",CTy"MachineCode",Var("h",F16)),
27832          Let(TP[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",bVar"b'11",
27833                 bVar"b'10",bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
27834                 bVar"b'5",bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
27835                 bVar"b'0"],BL(16,Var("h",F16)),
27836              ITB([(bVar"b'13",
27837                    ITB([(bVar"b'15",
27838                          ITB([(Bop(And,Mop(Not,bVar"b'14"),
27839                                    Mop(Not,bVar"b'12")),
27840                                Let(TP[Var("v",F4),qVar"s"],
27841                                    Apply
27842                                      (Call
27843                                         ("ThumbCondition",
27844                                          ATy(qTy,PTy(F4,qTy)),LU),
27845                                       qVar"state"),
27846                                    Let(TP[bVar"v",qVar"s"],
27847                                        Apply
27848                                          (Call
27849                                             ("Do",ATy(qTy,PTy(bTy,qTy)),
27850                                              TP[Var("v",F4),LT]),qVar"s"),
27851                                        TP[ITE(bVar"v",
27852                                               Call
27853                                                 ("Data",CTy"instruction",
27854                                                  Call
27855                                                    ("ArithLogicImmediate",
27856                                                     CTy"Data",
27857                                                     TP[LW(4,4),LF,
27858                                                        Mop(Cast F4,
27859                                                            Mop(Cast
27860                                                                  (FTy 3),
27861                                                                LL[bVar"b'10",
27862                                                                   bVar"b'9",
27863                                                                   bVar"b'8"])),
27864                                                        ITE(EQ(Mop(Cast F1,
27865                                                                   LL[bVar"b'11"]),
27866                                                               LW(1,1)),
27867                                                            LW(13,4),
27868                                                            LW(15,4)),
27869                                                        CC[LW(15,4),
27870                                                           Mop(Cast F8,
27871                                                               LL[bVar"b'7",
27872                                                                  bVar"b'6",
27873                                                                  bVar"b'5",
27874                                                                  bVar"b'4",
27875                                                                  bVar"b'3",
27876                                                                  bVar"b'2",
27877                                                                  bVar"b'1",
27878                                                                  bVar"b'0"])]])),
27879                                               Apply
27880                                                 (Call
27881                                                    ("Skip",
27882                                                     ATy(qTy,
27883                                                         CTy"instruction"),
27884                                                     LU),qVar"s")),qVar"s"]))),
27885                               (Bop(And,Mop(Not,bVar"b'14"),
27886                                    Bop(And,bVar"b'12",
27887                                        Bop(And,Mop(Not,bVar"b'11"),
27888                                            Bop(And,Mop(Not,bVar"b'10"),
27889                                                Bop(And,
27890                                                    Mop(Not,bVar"b'9"),
27891                                                    Mop(Not,bVar"b'8")))))),
27892                                Let(TP[Var("v",F4),qVar"s"],
27893                                    Apply
27894                                      (Call
27895                                         ("ThumbCondition",
27896                                          ATy(qTy,PTy(F4,qTy)),LU),
27897                                       qVar"state"),
27898                                    Let(TP[bVar"v",qVar"s"],
27899                                        Apply
27900                                          (Call
27901                                             ("Do",ATy(qTy,PTy(bTy,qTy)),
27902                                              TP[Var("v",F4),LT]),qVar"s"),
27903                                        TP[ITE(bVar"v",
27904                                               Call
27905                                                 ("Data",CTy"instruction",
27906                                                  Call
27907                                                    ("ArithLogicImmediate",
27908                                                     CTy"Data",
27909                                                     TP[ITE(EQ(Mop(Cast F1,
27910                                                                   LL[bVar"b'7"]),
27911                                                               LW(1,1)),
27912                                                            LW(2,4),
27913                                                            LW(4,4)),LF,
27914                                                        LW(13,4),LW(13,4),
27915                                                        CC[LW(30,5),
27916                                                           Mop(Cast(FTy 7),
27917                                                               LL[bVar"b'6",
27918                                                                  bVar"b'5",
27919                                                                  bVar"b'4",
27920                                                                  bVar"b'3",
27921                                                                  bVar"b'2",
27922                                                                  bVar"b'1",
27923                                                                  bVar"b'0"])]])),
27924                                               Apply
27925                                                 (Call
27926                                                    ("Skip",
27927                                                     ATy(qTy,
27928                                                         CTy"instruction"),
27929                                                     LU),qVar"s")),qVar"s"]))),
27930                               (Bop(And,Mop(Not,bVar"b'14"),
27931                                    Bop(And,bVar"b'12",
27932                                        Bop(And,Mop(Not,bVar"b'10"),
27933                                            bVar"b'8"))),
27934                                Let(TP[bVar"v",qVar"s"],
27935                                    Apply
27936                                      (Call
27937                                         ("Do",ATy(qTy,PTy(bTy,qTy)),
27938                                          TP[LW(14,4),
27939                                             Apply
27940                                               (Call
27941                                                  ("HaveThumb2",
27942                                                   ATy(qTy,bTy),LU),
27943                                                qVar"state")]),qVar"state"),
27944                                    ITE(bVar"v",
27945                                        TP[Call
27946                                             ("Branch",CTy"instruction",
27947                                              Call
27948                                                ("CompareBranch",
27949                                                 CTy"Branch",
27950                                                 TP[EQ(Mop(Cast F1,
27951                                                           LL[bVar"b'11"]),
27952                                                       LW(1,1)),
27953                                                    Mop(Cast F4,
27954                                                        Mop(Cast(FTy 3),
27955                                                            LL[bVar"b'2",
27956                                                               bVar"b'1",
27957                                                               bVar"b'0"])),
27958                                                    Mop(Cast F32,
27959                                                        CC[Mop(Cast F1,
27960                                                               LL[bVar"b'9"]),
27961                                                           Mop(Cast(FTy 5),
27962                                                               LL[bVar"b'7",
27963                                                                  bVar"b'6",
27964                                                                  bVar"b'5",
27965                                                                  bVar"b'4",
27966                                                                  bVar"b'3"]),
27967                                                           LW(0,1)])])),
27968                                           ITE(Apply
27969                                                 (Call
27970                                                    ("InITBlock",
27971                                                     ATy(qTy,bTy),LU),
27972                                                  qVar"s"),
27973                                               Apply
27974                                                 (Call
27975                                                    ("DECODE_UNPREDICTABLE",
27976                                                     ATy(qTy,qTy),
27977                                                     TP[Var("mc",
27978                                                            CTy"MachineCode"),
27979                                                        LS"CompareBranch"]),
27980                                                  qVar"s"),qVar"s")],
27981                                        TP[Apply
27982                                             (Call
27983                                                ("Skip",
27984                                                 ATy(qTy,CTy"instruction"),
27985                                                 LU),qVar"s"),qVar"s"]))),
27986                               (Bop(And,Mop(Not,bVar"b'14"),
27987                                    Bop(And,bVar"b'12",
27988                                        Bop(And,Mop(Not,bVar"b'11"),
27989                                            Bop(And,Mop(Not,bVar"b'10"),
27990                                                Bop(And,bVar"b'9",
27991                                                    Bop(And,
27992                                                        Mop(Not,bVar"b'8"),
27993                                                        Mop(Not,bVar"b'6"))))))),
27994                                Let(TP[Var("v",F4),qVar"s"],
27995                                    Apply
27996                                      (Call
27997                                         ("ThumbCondition",
27998                                          ATy(qTy,PTy(F4,qTy)),LU),
27999                                       qVar"state"),
28000                                    Let(TP[bVar"v",qVar"s"],
28001                                        Apply
28002                                          (Call
28003                                             ("Do",ATy(qTy,PTy(bTy,qTy)),
28004                                              TP[Var("v",F4),
28005                                                 Bop(Ge,
28006                                                     Apply
28007                                                       (Call
28008                                                          ("ArchVersion",
28009                                                           ATy(qTy,nTy),LU),
28010                                                        qVar"s"),LN 6)]),
28011                                           qVar"s"),
28012                                        TP[ITE(bVar"v",
28013                                               Call
28014                                                 ("Media",
28015                                                  CTy"instruction",
28016                                                  Call
28017                                                    ("ExtendHalfword",
28018                                                     CTy"Media",
28019                                                     TP[EQ(Mop(Cast F1,
28020                                                               LL[bVar"b'7"]),
28021                                                           LW(1,1)),
28022                                                        Mop(Cast F4,
28023                                                            Mop(Cast
28024                                                                  (FTy 3),
28025                                                                LL[bVar"b'2",
28026                                                                   bVar"b'1",
28027                                                                   bVar"b'0"])),
28028                                                        LW(15,4),
28029                                                        Mop(Cast F4,
28030                                                            Mop(Cast
28031                                                                  (FTy 3),
28032                                                                LL[bVar"b'5",
28033                                                                   bVar"b'4",
28034                                                                   bVar"b'3"])),
28035                                                        LN 0])),
28036                                               Apply
28037                                                 (Call
28038                                                    ("Skip",
28039                                                     ATy(qTy,
28040                                                         CTy"instruction"),
28041                                                     LU),qVar"s")),qVar"s"]))),
28042                               (Bop(And,Mop(Not,bVar"b'14"),
28043                                    Bop(And,bVar"b'12",
28044                                        Bop(And,Mop(Not,bVar"b'11"),
28045                                            Bop(And,Mop(Not,bVar"b'10"),
28046                                                Bop(And,bVar"b'9",
28047                                                    Bop(And,
28048                                                        Mop(Not,bVar"b'8"),
28049                                                        bVar"b'6")))))),
28050                                Let(TP[Var("v",F4),qVar"s"],
28051                                    Apply
28052                                      (Call
28053                                         ("ThumbCondition",
28054                                          ATy(qTy,PTy(F4,qTy)),LU),
28055                                       qVar"state"),
28056                                    Let(TP[bVar"v",qVar"s"],
28057                                        Apply
28058                                          (Call
28059                                             ("Do",ATy(qTy,PTy(bTy,qTy)),
28060                                              TP[Var("v",F4),
28061                                                 Bop(Ge,
28062                                                     Apply
28063                                                       (Call
28064                                                          ("ArchVersion",
28065                                                           ATy(qTy,nTy),LU),
28066                                                        qVar"s"),LN 6)]),
28067                                           qVar"s"),
28068                                        TP[ITE(bVar"v",
28069                                               Call
28070                                                 ("Media",
28071                                                  CTy"instruction",
28072                                                  Call
28073                                                    ("ExtendByte",
28074                                                     CTy"Media",
28075                                                     TP[EQ(Mop(Cast F1,
28076                                                               LL[bVar"b'7"]),
28077                                                           LW(1,1)),
28078                                                        Mop(Cast F4,
28079                                                            Mop(Cast
28080                                                                  (FTy 3),
28081                                                                LL[bVar"b'2",
28082                                                                   bVar"b'1",
28083                                                                   bVar"b'0"])),
28084                                                        LW(15,4),
28085                                                        Mop(Cast F4,
28086                                                            Mop(Cast
28087                                                                  (FTy 3),
28088                                                                LL[bVar"b'5",
28089                                                                   bVar"b'4",
28090                                                                   bVar"b'3"])),
28091                                                        LN 0])),
28092                                               Apply
28093                                                 (Call
28094                                                    ("Skip",
28095                                                     ATy(qTy,
28096                                                         CTy"instruction"),
28097                                                     LU),qVar"s")),qVar"s"]))),
28098                               (Bop(And,Mop(Not,bVar"b'14"),
28099                                    Bop(And,bVar"b'12",
28100                                        Bop(And,Mop(Not,bVar"b'11"),
28101                                            Bop(And,bVar"b'10",
28102                                                Mop(Not,bVar"b'9"))))),
28103                                Let(TP[Var("v",F4),qVar"s"],
28104                                    Apply
28105                                      (Call
28106                                         ("ThumbCondition",
28107                                          ATy(qTy,PTy(F4,qTy)),LU),
28108                                       qVar"state"),
28109                                    Let(TP[bVar"v",qVar"s"],
28110                                        Apply
28111                                          (Call
28112                                             ("Do",ATy(qTy,PTy(bTy,qTy)),
28113                                              TP[Var("v",F4),LT]),qVar"s"),
28114                                        ITE(bVar"v",
28115                                            Let(Var("registers",F16),
28116                                                CC[LW(0,1),
28117                                                   Mop(Cast F1,
28118                                                       LL[bVar"b'8"]),
28119                                                   LW(0,6),
28120                                                   Mop(Cast F8,
28121                                                       LL[bVar"b'7",
28122                                                          bVar"b'6",
28123                                                          bVar"b'5",
28124                                                          bVar"b'4",
28125                                                          bVar"b'3",
28126                                                          bVar"b'2",
28127                                                          bVar"b'1",
28128                                                          bVar"b'0"])],
28129                                                TP[Call
28130                                                     ("Store",
28131                                                      CTy"instruction",
28132                                                      Call
28133                                                        ("StoreMultiple",
28134                                                         CTy"Store",
28135                                                         TP[LF,LT,LT,
28136                                                            LW(13,4),
28137                                                            Var("registers",
28138                                                                F16)])),
28139                                                   ITE(Bop(Lt,
28140                                                           Call
28141                                                             ("BitCount",
28142                                                              nTy,
28143                                                              Var("registers",
28144                                                                  F16)),
28145                                                           LN 1),
28146                                                       Apply
28147                                                         (Call
28148                                                            ("DECODE_UNPREDICTABLE",
28149                                                             ATy(qTy,qTy),
28150                                                             TP[Var("mc",
28151                                                                    CTy"MachineCode"),
28152                                                                LS
28153                                                                 "StoreMultiple"]),
28154                                                          qVar"s"),qVar"s")]),
28155                                            TP[Apply
28156                                                 (Call
28157                                                    ("Skip",
28158                                                     ATy(qTy,
28159                                                         CTy"instruction"),
28160                                                     LU),qVar"s"),qVar"s"])))),
28161                               (Bop(And,Mop(Not,bVar"b'14"),
28162                                    Bop(And,bVar"b'12",
28163                                        Bop(And,Mop(Not,bVar"b'11"),
28164                                            Bop(And,bVar"b'10",
28165                                                Bop(And,bVar"b'9",
28166                                                    Bop(And,
28167                                                        Mop(Not,bVar"b'8"),
28168                                                        Bop(And,
28169                                                            Mop(Not,
28170                                                                bVar"b'7"),
28171                                                            Bop(And,
28172                                                                bVar"b'6",
28173                                                                Mop(Not,
28174                                                                    bVar"b'5"))))))))),
28175                                Let(TP[bVar"v",qVar"s"],
28176                                    Apply
28177                                      (Call
28178                                         ("Do",ATy(qTy,PTy(bTy,qTy)),
28179                                          TP[LW(14,4),
28180                                             Bop(Ge,
28181                                                 Apply
28182                                                   (Call
28183                                                      ("ArchVersion",
28184                                                       ATy(qTy,nTy),LU),
28185                                                    qVar"state"),LN 6)]),
28186                                       qVar"state"),
28187                                    ITE(bVar"v",
28188                                        TP[Call
28189                                             ("System",CTy"instruction",
28190                                              Call
28191                                                ("Setend",CTy"System",
28192                                                 EQ(Mop(Cast F1,
28193                                                        LL[bVar"b'3"]),
28194                                                    LW(1,1)))),
28195                                           ITE(Bop(Or,
28196                                                   Apply
28197                                                     (Call
28198                                                        ("InITBlock",
28199                                                         ATy(qTy,bTy),LU),
28200                                                      qVar"s"),
28201                                                   Mop(Not,
28202                                                       Bop(And,
28203                                                           EQ(Mop(Cast F1,
28204                                                                  LL[bVar"b'4"]),
28205                                                              LW(1,1)),
28206                                                           EQ(Mop(Cast
28207                                                                    (FTy 3),
28208                                                                  LL[bVar"b'2",
28209                                                                     bVar"b'1",
28210                                                                     bVar"b'0"]),
28211                                                              LW(0,3))))),
28212                                               Apply
28213                                                 (Call
28214                                                    ("DECODE_UNPREDICTABLE",
28215                                                     ATy(qTy,qTy),
28216                                                     TP[Var("mc",
28217                                                            CTy"MachineCode"),
28218                                                        LS"Setend"]),
28219                                                  qVar"s"),qVar"s")],
28220                                        TP[Apply
28221                                             (Call
28222                                                ("Skip",
28223                                                 ATy(qTy,CTy"instruction"),
28224                                                 LU),qVar"s"),qVar"s"]))),
28225                               (Bop(And,Mop(Not,bVar"b'14"),
28226                                    Bop(And,bVar"b'12",
28227                                        Bop(And,Mop(Not,bVar"b'11"),
28228                                            Bop(And,bVar"b'10",
28229                                                Bop(And,bVar"b'9",
28230                                                    Bop(And,
28231                                                        Mop(Not,bVar"b'8"),
28232                                                        Bop(And,
28233                                                            Mop(Not,
28234                                                                bVar"b'7"),
28235                                                            Bop(And,
28236                                                                bVar"b'6",
28237                                                                bVar"b'5")))))))),
28238                                Let(Var("F",F1),
28239                                    Mop(Cast F1,LL[bVar"b'0"]),
28240                                    Let(Var("I",F1),
28241                                        Mop(Cast F1,LL[bVar"b'1"]),
28242                                        Let(Var("A",F1),
28243                                            Mop(Cast F1,LL[bVar"b'2"]),
28244                                            Let(TP[bVar"v",qVar"s"],
28245                                                Apply
28246                                                  (Call
28247                                                     ("Do",
28248                                                      ATy(qTy,PTy(bTy,qTy)),
28249                                                      TP[LW(14,4),
28250                                                         Bop(Ge,
28251                                                             Apply
28252                                                               (Call
28253                                                                  ("ArchVersion",
28254                                                                   ATy(qTy,
28255                                                                       nTy),
28256                                                                   LU),
28257                                                                qVar"state"),
28258                                                             LN 6)]),
28259                                                   qVar"state"),
28260                                                ITE(bVar"v",
28261                                                    TP[Let(bVar"enable",
28262                                                           EQ(Mop(Cast F1,
28263                                                                  LL[bVar"b'4"]),
28264                                                              LW(0,1)),
28265                                                           Call
28266                                                             ("System",
28267                                                              CTy"instruction",
28268                                                              Call
28269                                                                ("ChangeProcessorState",
28270                                                                 CTy"System",
28271                                                                 TP[bVar"enable",
28272                                                                    Mop(Not,
28273                                                                        bVar"enable"),
28274                                                                    EQ(Var("A",
28275                                                                           F1),
28276                                                                       LW(1,
28277                                                                          1)),
28278                                                                    EQ(Var("I",
28279                                                                           F1),
28280                                                                       LW(1,
28281                                                                          1)),
28282                                                                    EQ(Var("F",
28283                                                                           F1),
28284                                                                       LW(1,
28285                                                                          1)),
28286                                                                    LO(FTy 5)]))),
28287                                                       ITE(Bop(Or,
28288                                                               EQ(CC[Var("A",
28289                                                                         F1),
28290                                                                     Var("I",
28291                                                                         F1),
28292                                                                     Var("F",
28293                                                                         F1)],
28294                                                                  LW(0,3)),
28295                                                               Bop(Or,
28296                                                                   Apply
28297                                                                     (Call
28298                                                                        ("InITBlock",
28299                                                                         ATy(qTy,
28300                                                                             bTy),
28301                                                                         LU),
28302                                                                      qVar"s"),
28303                                                                   Mop(Not,
28304                                                                       EQ(Mop(Cast
28305                                                                                F1,
28306                                                                              LL[bVar"b'3"]),
28307                                                                          LW(0,
28308                                                                             1))))),
28309                                                           Apply
28310                                                             (Call
28311                                                                ("DECODE_UNPREDICTABLE",
28312                                                                 ATy(qTy,
28313                                                                     qTy),
28314                                                                 TP[Var("mc",
28315                                                                        CTy"MachineCode"),
28316                                                                    LS
28317                                                                     "ChangeProcessorState"]),
28318                                                              qVar"s"),
28319                                                           qVar"s")],
28320                                                    TP[Apply
28321                                                         (Call
28322                                                            ("Skip",
28323                                                             ATy(qTy,
28324                                                                 CTy"instruction"),
28325                                                             LU),qVar"s"),
28326                                                       qVar"s"])))))),
28327                               (Bop(And,Mop(Not,bVar"b'14"),
28328                                    Bop(And,bVar"b'12",
28329                                        Bop(And,bVar"b'11",
28330                                            Bop(And,Mop(Not,bVar"b'10"),
28331                                                Bop(And,bVar"b'9",
28332                                                    Mop(Not,bVar"b'8")))))),
28333                                Let(Var("Rd",FTy 3),
28334                                    Mop(Cast(FTy 3),
28335                                        LL[bVar"b'2",bVar"b'1",bVar"b'0"]),
28336                                    Let(Var("Rm",FTy 3),
28337                                        Mop(Cast(FTy 3),
28338                                            LL[bVar"b'5",bVar"b'4",
28339                                               bVar"b'3"]),
28340                                        Let(TP[Var("v",F4),qVar"s"],
28341                                            Apply
28342                                              (Call
28343                                                 ("ThumbCondition",
28344                                                  ATy(qTy,PTy(F4,qTy)),LU),
28345                                               qVar"state"),
28346                                            Let(TP[bVar"v",qVar"s"],
28347                                                Apply
28348                                                  (Call
28349                                                     ("Do",
28350                                                      ATy(qTy,PTy(bTy,qTy)),
28351                                                      TP[Var("v",F4),
28352                                                         Bop(Ge,
28353                                                             Apply
28354                                                               (Call
28355                                                                  ("ArchVersion",
28356                                                                   ATy(qTy,
28357                                                                       nTy),
28358                                                                   LU),
28359                                                                qVar"s"),
28360                                                             LN 6)]),
28361                                                   qVar"s"),
28362                                                TP[ITE(bVar"v",
28363                                                       CS(Mop(Cast(FTy 2),
28364                                                              LL[bVar"b'7",
28365                                                                 bVar"b'6"]),
28366                                                          [(LW(0,2),
28367                                                            Call
28368                                                              ("Media",
28369                                                               CTy"instruction",
28370                                                               Call
28371                                                                 ("ByteReverse",
28372                                                                  CTy"Media",
28373                                                                  TP[Mop(Cast
28374                                                                           F4,
28375                                                                         Var("Rd",
28376                                                                             FTy 3)),
28377                                                                     Mop(Cast
28378                                                                           F4,
28379                                                                         Var("Rm",
28380                                                                             FTy 3))]))),
28381                                                           (LW(1,2),
28382                                                            Call
28383                                                              ("Media",
28384                                                               CTy"instruction",
28385                                                               Call
28386                                                                 ("ByteReversePackedHalfword",
28387                                                                  CTy"Media",
28388                                                                  TP[Mop(Cast
28389                                                                           F4,
28390                                                                         Var("Rd",
28391                                                                             FTy 3)),
28392                                                                     Mop(Cast
28393                                                                           F4,
28394                                                                         Var("Rm",
28395                                                                             FTy 3))]))),
28396                                                           (LW(3,2),
28397                                                            Call
28398                                                              ("Media",
28399                                                               CTy"instruction",
28400                                                               Call
28401                                                                 ("ByteReverseSignedHalfword",
28402                                                                  CTy"Media",
28403                                                                  TP[Mop(Cast
28404                                                                           F4,
28405                                                                         Var("Rd",
28406                                                                             FTy 3)),
28407                                                                     Mop(Cast
28408                                                                           F4,
28409                                                                         Var("Rm",
28410                                                                             FTy 3))]))),
28411                                                           (AVar(FTy 2),
28412                                                            Call
28413                                                              ("Undefined",
28414                                                               CTy"instruction",
28415                                                               LW(0,32)))]),
28416                                                       Apply
28417                                                         (Call
28418                                                            ("Skip",
28419                                                             ATy(qTy,
28420                                                                 CTy"instruction"),
28421                                                             LU),qVar"s")),
28422                                                   qVar"s"]))))),
28423                               (Bop(And,Mop(Not,bVar"b'14"),
28424                                    Bop(And,bVar"b'12",
28425                                        Bop(And,bVar"b'11",
28426                                            Bop(And,bVar"b'10",
28427                                                Mop(Not,bVar"b'9"))))),
28428                                Let(TP[Var("v",F4),qVar"s"],
28429                                    Apply
28430                                      (Call
28431                                         ("ThumbCondition",
28432                                          ATy(qTy,PTy(F4,qTy)),LU),
28433                                       qVar"state"),
28434                                    Let(TP[bVar"v",qVar"s"],
28435                                        Apply
28436                                          (Call
28437                                             ("Do",ATy(qTy,PTy(bTy,qTy)),
28438                                              TP[Var("v",F4),LT]),qVar"s"),
28439                                        ITE(bVar"v",
28440                                            Let(Var("registers",F16),
28441                                                CC[Mop(Cast F1,
28442                                                       LL[bVar"b'8"]),
28443                                                   LW(0,7),
28444                                                   Mop(Cast F8,
28445                                                       LL[bVar"b'7",
28446                                                          bVar"b'6",
28447                                                          bVar"b'5",
28448                                                          bVar"b'4",
28449                                                          bVar"b'3",
28450                                                          bVar"b'2",
28451                                                          bVar"b'1",
28452                                                          bVar"b'0"])],
28453                                                TP[Call
28454                                                     ("Load",
28455                                                      CTy"instruction",
28456                                                      Call
28457                                                        ("LoadMultiple",
28458                                                         CTy"Load",
28459                                                         TP[LT,LF,LT,
28460                                                            LW(13,4),
28461                                                            Var("registers",
28462                                                                F16)])),
28463                                                   ITE(Bop(Or,
28464                                                           Bop(Lt,
28465                                                               Call
28466                                                                 ("BitCount",
28467                                                                  nTy,
28468                                                                  Var("registers",
28469                                                                      F16)),
28470                                                               LN 1),
28471                                                           Bop(And,
28472                                                               Bop(Bit,
28473                                                                   Var("registers",
28474                                                                       F16),
28475                                                                   LN 15),
28476                                                               Bop(And,
28477                                                                   Apply
28478                                                                     (Call
28479                                                                        ("InITBlock",
28480                                                                         ATy(qTy,
28481                                                                             bTy),
28482                                                                         LU),
28483                                                                      qVar"s"),
28484                                                                   Mop(Not,
28485                                                                       Apply
28486                                                                         (Call
28487                                                                            ("LastInITBlock",
28488                                                                             ATy(qTy,
28489                                                                                 bTy),
28490                                                                             LU),
28491                                                                          qVar"s"))))),
28492                                                       Apply
28493                                                         (Call
28494                                                            ("DECODE_UNPREDICTABLE",
28495                                                             ATy(qTy,qTy),
28496                                                             TP[Var("mc",
28497                                                                    CTy"MachineCode"),
28498                                                                LS
28499                                                                 "LoadMultiple"]),
28500                                                          qVar"s"),qVar"s")]),
28501                                            TP[Apply
28502                                                 (Call
28503                                                    ("Skip",
28504                                                     ATy(qTy,
28505                                                         CTy"instruction"),
28506                                                     LU),qVar"s"),qVar"s"])))),
28507                               (Bop(And,Mop(Not,bVar"b'14"),
28508                                    Bop(And,bVar"b'12",
28509                                        Bop(And,bVar"b'11",
28510                                            Bop(And,bVar"b'10",
28511                                                Bop(And,bVar"b'9",
28512                                                    Mop(Not,bVar"b'8")))))),
28513                                Let(TP[bVar"v",qVar"s"],
28514                                    Apply
28515                                      (Call
28516                                         ("Do",ATy(qTy,PTy(bTy,qTy)),
28517                                          TP[LW(14,4),
28518                                             Bop(Ge,
28519                                                 Apply
28520                                                   (Call
28521                                                      ("ArchVersion",
28522                                                       ATy(qTy,nTy),LU),
28523                                                    qVar"state"),LN 5)]),
28524                                       qVar"state"),
28525                                    TP[ITE(bVar"v",
28526                                           Call
28527                                             ("Hint",CTy"instruction",
28528                                              Call
28529                                                ("Breakpoint",CTy"Hint",
28530                                                 Mop(Cast F32,
28531                                                     Mop(Cast F8,
28532                                                         LL[bVar"b'7",
28533                                                            bVar"b'6",
28534                                                            bVar"b'5",
28535                                                            bVar"b'4",
28536                                                            bVar"b'3",
28537                                                            bVar"b'2",
28538                                                            bVar"b'1",
28539                                                            bVar"b'0"])))),
28540                                           Apply
28541                                             (Call
28542                                                ("Skip",
28543                                                 ATy(qTy,CTy"instruction"),
28544                                                 LU),qVar"s")),qVar"s"])),
28545                               (Bop(And,Mop(Not,bVar"b'14"),
28546                                    Bop(And,bVar"b'12",
28547                                        Bop(And,bVar"b'11",
28548                                            Bop(And,bVar"b'10",
28549                                                Bop(And,bVar"b'9",
28550                                                    Bop(And,bVar"b'8",
28551                                                        Bop(And,
28552                                                            Mop(Not,
28553                                                                bVar"b'3"),
28554                                                            Bop(And,
28555                                                                Mop(Not,
28556                                                                    bVar"b'2"),
28557                                                                Bop(And,
28558                                                                    Mop(Not,
28559                                                                        bVar"b'1"),
28560                                                                    Mop(Not,
28561                                                                        bVar"b'0")))))))))),
28562                                Let(TP[Var("v",F4),qVar"s"],
28563                                    Apply
28564                                      (Call
28565                                         ("ThumbCondition",
28566                                          ATy(qTy,PTy(F4,qTy)),LU),
28567                                       qVar"state"),
28568                                    Apply
28569                                      (Call
28570                                         ("DecodeHint",
28571                                          ATy(qTy,
28572                                              PTy(CTy"instruction",qTy)),
28573                                          TP[Var("v",F4),
28574                                             Mop(Cast F8,
28575                                                 Mop(Cast F4,
28576                                                     LL[bVar"b'7",
28577                                                        bVar"b'6",
28578                                                        bVar"b'5",
28579                                                        bVar"b'4"]))]),
28580                                       qVar"s"))),
28581                               (Bop(And,Mop(Not,bVar"b'14"),
28582                                    Bop(And,bVar"b'12",
28583                                        Bop(And,bVar"b'11",
28584                                            Bop(And,bVar"b'10",
28585                                                Bop(And,bVar"b'9",
28586                                                    bVar"b'8"))))),
28587                                Let(Var("mask",F4),
28588                                    Mop(Cast F4,
28589                                        LL[bVar"b'3",bVar"b'2",bVar"b'1",
28590                                           bVar"b'0"]),
28591                                    Let(Var("firstcond",F4),
28592                                        Mop(Cast F4,
28593                                            LL[bVar"b'7",bVar"b'6",
28594                                               bVar"b'5",bVar"b'4"]),
28595                                        Let(TP[bVar"v",qVar"s"],
28596                                            Apply
28597                                              (Call
28598                                                 ("Do",
28599                                                  ATy(qTy,PTy(bTy,qTy)),
28600                                                  TP[LW(14,4),
28601                                                     Apply
28602                                                       (Call
28603                                                          ("HaveThumb2",
28604                                                           ATy(qTy,bTy),LU),
28605                                                        qVar"state")]),
28606                                               qVar"state"),
28607                                            ITE(bVar"v",
28608                                                TP[Call
28609                                                     ("IfThen",
28610                                                      CTy"instruction",
28611                                                      TP[Var("firstcond",
28612                                                             F4),
28613                                                         Var("mask",F4)]),
28614                                                   ITE(Bop(Or,
28615                                                           EQ(Var("firstcond",
28616                                                                  F4),
28617                                                              LW(15,4)),
28618                                                           Bop(Or,
28619                                                               Bop(And,
28620                                                                   EQ(Var("firstcond",
28621                                                                          F4),
28622                                                                      LW(14,
28623                                                                         4)),
28624                                                                   Mop(Not,
28625                                                                       EQ(Call
28626                                                                            ("BitCount",
28627                                                                             nTy,
28628                                                                             Var("mask",
28629                                                                                 F4)),
28630                                                                          LN
28631                                                                           1))),
28632                                                               Apply
28633                                                                 (Call
28634                                                                    ("InITBlock",
28635                                                                     ATy(qTy,
28636                                                                         bTy),
28637                                                                     LU),
28638                                                                  qVar"s"))),
28639                                                       Apply
28640                                                         (Call
28641                                                            ("DECODE_UNPREDICTABLE",
28642                                                             ATy(qTy,qTy),
28643                                                             TP[Var("mc",
28644                                                                    CTy"MachineCode"),
28645                                                                LS"IfThen"]),
28646                                                          qVar"s"),qVar"s")],
28647                                                TP[Apply
28648                                                     (Call
28649                                                        ("Skip",
28650                                                         ATy(qTy,
28651                                                             CTy"instruction"),
28652                                                         LU),qVar"s"),
28653                                                   qVar"s"]))))),
28654                               (Bop(And,bVar"b'14",
28655                                    Bop(And,Mop(Not,bVar"b'12"),
28656                                        Mop(Not,bVar"b'11"))),
28657                                Let(TP[Var("v",F4),qVar"s"],
28658                                    Apply
28659                                      (Call
28660                                         ("ThumbCondition",
28661                                          ATy(qTy,PTy(F4,qTy)),LU),
28662                                       qVar"state"),
28663                                    Let(TP[bVar"v",qVar"s"],
28664                                        Apply
28665                                          (Call
28666                                             ("Do",ATy(qTy,PTy(bTy,qTy)),
28667                                              TP[Var("v",F4),LT]),qVar"s"),
28668                                        ITE(bVar"v",
28669                                            TP[Call
28670                                                 ("Branch",
28671                                                  CTy"instruction",
28672                                                  Call
28673                                                    ("BranchTarget",
28674                                                     CTy"Branch",
28675                                                     Mop(SE F32,
28676                                                         CC[Mop(Cast
28677                                                                  (FTy 11),
28678                                                                LL[bVar"b'10",
28679                                                                   bVar"b'9",
28680                                                                   bVar"b'8",
28681                                                                   bVar"b'7",
28682                                                                   bVar"b'6",
28683                                                                   bVar"b'5",
28684                                                                   bVar"b'4",
28685                                                                   bVar"b'3",
28686                                                                   bVar"b'2",
28687                                                                   bVar"b'1",
28688                                                                   bVar"b'0"]),
28689                                                            LW(0,1)]))),
28690                                               ITE(Bop(And,
28691                                                       Apply
28692                                                         (Call
28693                                                            ("InITBlock",
28694                                                             ATy(qTy,bTy),
28695                                                             LU),qVar"s"),
28696                                                       Mop(Not,
28697                                                           Apply
28698                                                             (Call
28699                                                                ("LastInITBlock",
28700                                                                 ATy(qTy,
28701                                                                     bTy),
28702                                                                 LU),
28703                                                              qVar"s"))),
28704                                                   Apply
28705                                                     (Call
28706                                                        ("DECODE_UNPREDICTABLE",
28707                                                         ATy(qTy,qTy),
28708                                                         TP[Var("mc",
28709                                                                CTy"MachineCode"),
28710                                                            LS
28711                                                             "BranchTarget"]),
28712                                                      qVar"s"),qVar"s")],
28713                                            TP[Apply
28714                                                 (Call
28715                                                    ("Skip",
28716                                                     ATy(qTy,
28717                                                         CTy"instruction"),
28718                                                     LU),qVar"s"),qVar"s"]))))],
28719                              Apply
28720                                (Call
28721                                   ("UndefinedThumb",
28722                                    ATy(qTy,PTy(CTy"instruction",qTy)),LU),
28723                                 qVar"state"))),
28724                         (Bop(And,Mop(Not,bVar"b'14"),
28725                              Bop(And,Mop(Not,bVar"b'12"),
28726                                  Mop(Not,bVar"b'11"))),
28727                          Let(TP[Var("v",F4),qVar"s"],
28728                              Apply
28729                                (Call
28730                                   ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),
28731                                    LU),qVar"state"),
28732                              Let(TP[bVar"v",qVar"s"],
28733                                  Apply
28734                                    (Call
28735                                       ("Do",ATy(qTy,PTy(bTy,qTy)),
28736                                        TP[Var("v",F4),LT]),qVar"s"),
28737                                  TP[ITE(bVar"v",
28738                                         Call
28739                                           ("Data",CTy"instruction",
28740                                            Call
28741                                              ("Move",CTy"Data",
28742                                               TP[Mop(Not,
28743                                                      Apply
28744                                                        (Call
28745                                                           ("InITBlock",
28746                                                            ATy(qTy,bTy),
28747                                                            LU),qVar"s")),
28748                                                  LF,
28749                                                  Mop(Cast F4,
28750                                                      Mop(Cast(FTy 3),
28751                                                          LL[bVar"b'10",
28752                                                             bVar"b'9",
28753                                                             bVar"b'8"])),
28754                                                  Mop(Cast(FTy 12),
28755                                                      Mop(Cast F8,
28756                                                          LL[bVar"b'7",
28757                                                             bVar"b'6",
28758                                                             bVar"b'5",
28759                                                             bVar"b'4",
28760                                                             bVar"b'3",
28761                                                             bVar"b'2",
28762                                                             bVar"b'1",
28763                                                             bVar"b'0"]))])),
28764                                         Apply
28765                                           (Call
28766                                              ("Skip",
28767                                               ATy(qTy,CTy"instruction"),
28768                                               LU),qVar"s")),qVar"s"]))),
28769                         (Bop(And,Mop(Not,bVar"b'14"),
28770                              Bop(And,Mop(Not,bVar"b'12"),bVar"b'11")),
28771                          Let(TP[Var("v",F4),qVar"s"],
28772                              Apply
28773                                (Call
28774                                   ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),
28775                                    LU),qVar"state"),
28776                              Let(TP[bVar"v",qVar"s"],
28777                                  Apply
28778                                    (Call
28779                                       ("Do",ATy(qTy,PTy(bTy,qTy)),
28780                                        TP[Var("v",F4),LT]),qVar"s"),
28781                                  TP[ITE(bVar"v",
28782                                         Call
28783                                           ("Data",CTy"instruction",
28784                                            Call
28785                                              ("TestCompareImmediate",
28786                                               CTy"Data",
28787                                               TP[LW(2,2),
28788                                                  Mop(Cast F4,
28789                                                      Mop(Cast(FTy 3),
28790                                                          LL[bVar"b'10",
28791                                                             bVar"b'9",
28792                                                             bVar"b'8"])),
28793                                                  Mop(Cast(FTy 12),
28794                                                      Mop(Cast F8,
28795                                                          LL[bVar"b'7",
28796                                                             bVar"b'6",
28797                                                             bVar"b'5",
28798                                                             bVar"b'4",
28799                                                             bVar"b'3",
28800                                                             bVar"b'2",
28801                                                             bVar"b'1",
28802                                                             bVar"b'0"]))])),
28803                                         Apply
28804                                           (Call
28805                                              ("Skip",
28806                                               ATy(qTy,CTy"instruction"),
28807                                               LU),qVar"s")),qVar"s"]))),
28808                         (Bop(And,Mop(Not,bVar"b'14"),bVar"b'12"),
28809                          Let(TP[Var("v",F4),qVar"s"],
28810                              Apply
28811                                (Call
28812                                   ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),
28813                                    LU),qVar"state"),
28814                              Let(TP[bVar"v",qVar"s"],
28815                                  Apply
28816                                    (Call
28817                                       ("Do",ATy(qTy,PTy(bTy,qTy)),
28818                                        TP[Var("v",F4),LT]),qVar"s"),
28819                                  ITE(bVar"v",
28820                                      Let(Var("d",F4),
28821                                          Mop(Cast F4,
28822                                              Mop(Cast(FTy 3),
28823                                                  LL[bVar"b'10",bVar"b'9",
28824                                                     bVar"b'8"])),
28825                                          TP[Call
28826                                               ("Data",CTy"instruction",
28827                                                Call
28828                                                  ("ArithLogicImmediate",
28829                                                   CTy"Data",
28830                                                   TP[ITE(EQ(Mop(Cast F1,
28831                                                                 LL[bVar"b'11"]),
28832                                                             LW(1,1)),
28833                                                          LW(2,4),LW(4,4)),
28834                                                      Mop(Not,
28835                                                          Apply
28836                                                            (Call
28837                                                               ("InITBlock",
28838                                                                ATy(qTy,
28839                                                                    bTy),
28840                                                                LU),
28841                                                             qVar"s")),
28842                                                      Var("d",F4),
28843                                                      Var("d",F4),
28844                                                      Mop(Cast(FTy 12),
28845                                                          Mop(Cast F8,
28846                                                              LL[bVar"b'7",
28847                                                                 bVar"b'6",
28848                                                                 bVar"b'5",
28849                                                                 bVar"b'4",
28850                                                                 bVar"b'3",
28851                                                                 bVar"b'2",
28852                                                                 bVar"b'1",
28853                                                                 bVar"b'0"]))])),
28854                                             qVar"s"]),
28855                                      TP[Apply
28856                                           (Call
28857                                              ("Skip",
28858                                               ATy(qTy,CTy"instruction"),
28859                                               LU),qVar"s"),qVar"s"])))),
28860                         (Bop(And,bVar"b'14",Mop(Not,bVar"b'12")),
28861                          Let(Var("Rt",FTy 3),
28862                              Mop(Cast(FTy 3),
28863                                  LL[bVar"b'2",bVar"b'1",bVar"b'0"]),
28864                              Let(Var("Rn",FTy 3),
28865                                  Mop(Cast(FTy 3),
28866                                      LL[bVar"b'5",bVar"b'4",bVar"b'3"]),
28867                                  Let(TP[Var("v",F4),qVar"s"],
28868                                      Apply
28869                                        (Call
28870                                           ("ThumbCondition",
28871                                            ATy(qTy,PTy(F4,qTy)),LU),
28872                                         qVar"state"),
28873                                      Let(TP[bVar"v",qVar"s"],
28874                                          Apply
28875                                            (Call
28876                                               ("Do",
28877                                                ATy(qTy,PTy(bTy,qTy)),
28878                                                TP[Var("v",F4),LT]),
28879                                             qVar"s"),
28880                                          TP[ITE(bVar"v",
28881                                                 Let(Var("m",CTy"offset1"),
28882                                                     Call
28883                                                       ("immediate_form1",
28884                                                        CTy"offset1",
28885                                                        Mop(Cast F32,
28886                                                            CC[Mop(Cast
28887                                                                     (FTy 5),
28888                                                                   LL[bVar"b'10",
28889                                                                      bVar"b'9",
28890                                                                      bVar"b'8",
28891                                                                      bVar"b'7",
28892                                                                      bVar"b'6"]),
28893                                                               LW(0,2)])),
28894                                                     ITE(EQ(Mop(Cast F1,
28895                                                                LL[bVar"b'11"]),
28896                                                            LW(1,1)),
28897                                                         Call
28898                                                           ("Load",
28899                                                            CTy"instruction",
28900                                                            Call
28901                                                              ("LoadWord",
28902                                                               CTy"Load",
28903                                                               TP[LT,LT,
28904                                                                  LF,
28905                                                                  Mop(Cast
28906                                                                        F4,
28907                                                                      Var("Rt",
28908                                                                          FTy 3)),
28909                                                                  Mop(Cast
28910                                                                        F4,
28911                                                                      Var("Rn",
28912                                                                          FTy 3)),
28913                                                                  Var("m",
28914                                                                      CTy"offset1")])),
28915                                                         Call
28916                                                           ("Store",
28917                                                            CTy"instruction",
28918                                                            Call
28919                                                              ("StoreWord",
28920                                                               CTy"Store",
28921                                                               TP[LT,LT,
28922                                                                  LF,
28923                                                                  Mop(Cast
28924                                                                        F4,
28925                                                                      Var("Rt",
28926                                                                          FTy 3)),
28927                                                                  Mop(Cast
28928                                                                        F4,
28929                                                                      Var("Rn",
28930                                                                          FTy 3)),
28931                                                                  Var("m",
28932                                                                      CTy"offset1")])))),
28933                                                 Apply
28934                                                   (Call
28935                                                      ("Skip",
28936                                                       ATy(qTy,
28937                                                           CTy"instruction"),
28938                                                       LU),qVar"s")),
28939                                             qVar"s"]))))),
28940                         (Bop(And,bVar"b'14",bVar"b'12"),
28941                          Let(Var("Rt",FTy 3),
28942                              Mop(Cast(FTy 3),
28943                                  LL[bVar"b'2",bVar"b'1",bVar"b'0"]),
28944                              Let(Var("Rn",FTy 3),
28945                                  Mop(Cast(FTy 3),
28946                                      LL[bVar"b'5",bVar"b'4",bVar"b'3"]),
28947                                  Let(TP[Var("v",F4),qVar"s"],
28948                                      Apply
28949                                        (Call
28950                                           ("ThumbCondition",
28951                                            ATy(qTy,PTy(F4,qTy)),LU),
28952                                         qVar"state"),
28953                                      Let(TP[bVar"v",qVar"s"],
28954                                          Apply
28955                                            (Call
28956                                               ("Do",
28957                                                ATy(qTy,PTy(bTy,qTy)),
28958                                                TP[Var("v",F4),LT]),
28959                                             qVar"s"),
28960                                          TP[ITE(bVar"v",
28961                                                 Let(Var("m",CTy"offset1"),
28962                                                     Call
28963                                                       ("immediate_form1",
28964                                                        CTy"offset1",
28965                                                        Mop(Cast F32,
28966                                                            Mop(Cast
28967                                                                  (FTy 5),
28968                                                                LL[bVar"b'10",
28969                                                                   bVar"b'9",
28970                                                                   bVar"b'8",
28971                                                                   bVar"b'7",
28972                                                                   bVar"b'6"]))),
28973                                                     ITE(EQ(Mop(Cast F1,
28974                                                                LL[bVar"b'11"]),
28975                                                            LW(1,1)),
28976                                                         Call
28977                                                           ("Load",
28978                                                            CTy"instruction",
28979                                                            Call
28980                                                              ("LoadByte",
28981                                                               CTy"Load",
28982                                                               TP[LT,LT,
28983                                                                  LT,LF,
28984                                                                  Mop(Cast
28985                                                                        F4,
28986                                                                      Var("Rt",
28987                                                                          FTy 3)),
28988                                                                  Mop(Cast
28989                                                                        F4,
28990                                                                      Var("Rn",
28991                                                                          FTy 3)),
28992                                                                  Var("m",
28993                                                                      CTy"offset1")])),
28994                                                         Call
28995                                                           ("Store",
28996                                                            CTy"instruction",
28997                                                            Call
28998                                                              ("StoreByte",
28999                                                               CTy"Store",
29000                                                               TP[LT,LT,
29001                                                                  LF,
29002                                                                  Mop(Cast
29003                                                                        F4,
29004                                                                      Var("Rt",
29005                                                                          FTy 3)),
29006                                                                  Mop(Cast
29007                                                                        F4,
29008                                                                      Var("Rn",
29009                                                                          FTy 3)),
29010                                                                  Var("m",
29011                                                                      CTy"offset1")])))),
29012                                                 Apply
29013                                                   (Call
29014                                                      ("Skip",
29015                                                       ATy(qTy,
29016                                                           CTy"instruction"),
29017                                                       LU),qVar"s")),
29018                                             qVar"s"])))))],
29019                        Apply
29020                          (Call
29021                             ("UndefinedThumb",
29022                              ATy(qTy,PTy(CTy"instruction",qTy)),LU),
29023                           qVar"state"))),
29024                   (bVar"b'15",
29025                    ITB([(Bop(And,Mop(Not,bVar"b'14"),Mop(Not,bVar"b'12")),
29026                          Let(Var("Rt",FTy 3),
29027                              Mop(Cast(FTy 3),
29028                                  LL[bVar"b'2",bVar"b'1",bVar"b'0"]),
29029                              Let(Var("Rn",FTy 3),
29030                                  Mop(Cast(FTy 3),
29031                                      LL[bVar"b'5",bVar"b'4",bVar"b'3"]),
29032                                  Let(TP[Var("v",F4),qVar"s"],
29033                                      Apply
29034                                        (Call
29035                                           ("ThumbCondition",
29036                                            ATy(qTy,PTy(F4,qTy)),LU),
29037                                         qVar"state"),
29038                                      Let(TP[bVar"v",qVar"s"],
29039                                          Apply
29040                                            (Call
29041                                               ("Do",
29042                                                ATy(qTy,PTy(bTy,qTy)),
29043                                                TP[Var("v",F4),LT]),
29044                                             qVar"s"),
29045                                          TP[ITE(bVar"v",
29046                                                 Let(Var("m",CTy"offset1"),
29047                                                     Call
29048                                                       ("immediate_form1",
29049                                                        CTy"offset1",
29050                                                        Mop(Cast F32,
29051                                                            CC[Mop(Cast
29052                                                                     (FTy 5),
29053                                                                   LL[bVar"b'10",
29054                                                                      bVar"b'9",
29055                                                                      bVar"b'8",
29056                                                                      bVar"b'7",
29057                                                                      bVar"b'6"]),
29058                                                               LW(0,1)])),
29059                                                     ITE(EQ(Mop(Cast F1,
29060                                                                LL[bVar"b'11"]),
29061                                                            LW(1,1)),
29062                                                         Call
29063                                                           ("Load",
29064                                                            CTy"instruction",
29065                                                            Call
29066                                                              ("LoadHalf",
29067                                                               CTy"Load",
29068                                                               TP[LT,LT,
29069                                                                  LT,LF,
29070                                                                  Mop(Cast
29071                                                                        F4,
29072                                                                      Var("Rt",
29073                                                                          FTy 3)),
29074                                                                  Mop(Cast
29075                                                                        F4,
29076                                                                      Var("Rn",
29077                                                                          FTy 3)),
29078                                                                  Var("m",
29079                                                                      CTy"offset1")])),
29080                                                         Call
29081                                                           ("Store",
29082                                                            CTy"instruction",
29083                                                            Call
29084                                                              ("StoreHalf",
29085                                                               CTy"Store",
29086                                                               TP[LT,LT,
29087                                                                  LF,
29088                                                                  Mop(Cast
29089                                                                        F4,
29090                                                                      Var("Rt",
29091                                                                          FTy 3)),
29092                                                                  Mop(Cast
29093                                                                        F4,
29094                                                                      Var("Rn",
29095                                                                          FTy 3)),
29096                                                                  Var("m",
29097                                                                      CTy"offset1")])))),
29098                                                 Apply
29099                                                   (Call
29100                                                      ("Skip",
29101                                                       ATy(qTy,
29102                                                           CTy"instruction"),
29103                                                       LU),qVar"s")),
29104                                             qVar"s"]))))),
29105                         (Bop(And,Mop(Not,bVar"b'14"),bVar"b'12"),
29106                          Let(Var("Rt",FTy 3),
29107                              Mop(Cast(FTy 3),
29108                                  LL[bVar"b'10",bVar"b'9",bVar"b'8"]),
29109                              Let(TP[Var("v",F4),qVar"s"],
29110                                  Apply
29111                                    (Call
29112                                       ("ThumbCondition",
29113                                        ATy(qTy,PTy(F4,qTy)),LU),
29114                                     qVar"state"),
29115                                  Let(TP[bVar"v",qVar"s"],
29116                                      Apply
29117                                        (Call
29118                                           ("Do",ATy(qTy,PTy(bTy,qTy)),
29119                                            TP[Var("v",F4),LT]),qVar"s"),
29120                                      TP[ITE(bVar"v",
29121                                             Let(Var("m",CTy"offset1"),
29122                                                 Call
29123                                                   ("immediate_form1",
29124                                                    CTy"offset1",
29125                                                    Mop(Cast F32,
29126                                                        CC[Mop(Cast F8,
29127                                                               LL[bVar"b'7",
29128                                                                  bVar"b'6",
29129                                                                  bVar"b'5",
29130                                                                  bVar"b'4",
29131                                                                  bVar"b'3",
29132                                                                  bVar"b'2",
29133                                                                  bVar"b'1",
29134                                                                  bVar"b'0"]),
29135                                                           LW(0,2)])),
29136                                                 ITE(EQ(Mop(Cast F1,
29137                                                            LL[bVar"b'11"]),
29138                                                        LW(1,1)),
29139                                                     Call
29140                                                       ("Load",
29141                                                        CTy"instruction",
29142                                                        Call
29143                                                          ("LoadWord",
29144                                                           CTy"Load",
29145                                                           TP[LT,LT,LF,
29146                                                              Mop(Cast F4,
29147                                                                  Var("Rt",
29148                                                                      FTy 3)),
29149                                                              LW(13,4),
29150                                                              Var("m",
29151                                                                  CTy"offset1")])),
29152                                                     Call
29153                                                       ("Store",
29154                                                        CTy"instruction",
29155                                                        Call
29156                                                          ("StoreWord",
29157                                                           CTy"Store",
29158                                                           TP[LT,LT,LF,
29159                                                              Mop(Cast F4,
29160                                                                  Var("Rt",
29161                                                                      FTy 3)),
29162                                                              LW(13,4),
29163                                                              Var("m",
29164                                                                  CTy"offset1")])))),
29165                                             Apply
29166                                               (Call
29167                                                  ("Skip",
29168                                                   ATy(qTy,
29169                                                       CTy"instruction"),
29170                                                   LU),qVar"s")),qVar"s"])))),
29171                         (Bop(And,bVar"b'14",
29172                              Bop(And,Mop(Not,bVar"b'12"),
29173                                  Mop(Not,bVar"b'11"))),
29174                          Let(TP[Var("v",F4),qVar"s"],
29175                              Apply
29176                                (Call
29177                                   ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),
29178                                    LU),qVar"state"),
29179                              Let(TP[bVar"v",qVar"s"],
29180                                  Apply
29181                                    (Call
29182                                       ("Do",ATy(qTy,PTy(bTy,qTy)),
29183                                        TP[Var("v",F4),LT]),qVar"s"),
29184                                  ITE(bVar"v",
29185                                      Let(Var("registers",F16),
29186                                          Mop(Cast F16,
29187                                              Mop(Cast F8,
29188                                                  LL[bVar"b'7",bVar"b'6",
29189                                                     bVar"b'5",bVar"b'4",
29190                                                     bVar"b'3",bVar"b'2",
29191                                                     bVar"b'1",bVar"b'0"])),
29192                                          TP[Call
29193                                               ("Store",CTy"instruction",
29194                                                Call
29195                                                  ("StoreMultiple",
29196                                                   CTy"Store",
29197                                                   TP[LT,LF,LT,
29198                                                      Mop(Cast F4,
29199                                                          Mop(Cast(FTy 3),
29200                                                              LL[bVar"b'10",
29201                                                                 bVar"b'9",
29202                                                                 bVar"b'8"])),
29203                                                      Var("registers",F16)])),
29204                                             ITE(Bop(Lt,
29205                                                     Call
29206                                                       ("BitCount",nTy,
29207                                                        Var("registers",
29208                                                            F16)),LN 1),
29209                                                 Apply
29210                                                   (Call
29211                                                      ("DECODE_UNPREDICTABLE",
29212                                                       ATy(qTy,qTy),
29213                                                       TP[Var("mc",
29214                                                              CTy"MachineCode"),
29215                                                          LS
29216                                                           "StoreMultiple"]),
29217                                                    qVar"s"),qVar"s")]),
29218                                      TP[Apply
29219                                           (Call
29220                                              ("Skip",
29221                                               ATy(qTy,CTy"instruction"),
29222                                               LU),qVar"s"),qVar"s"])))),
29223                         (Bop(And,bVar"b'14",
29224                              Bop(And,Mop(Not,bVar"b'12"),bVar"b'11")),
29225                          Let(Var("Rn",FTy 3),
29226                              Mop(Cast(FTy 3),
29227                                  LL[bVar"b'10",bVar"b'9",bVar"b'8"]),
29228                              Let(TP[Var("v",F4),qVar"s"],
29229                                  Apply
29230                                    (Call
29231                                       ("ThumbCondition",
29232                                        ATy(qTy,PTy(F4,qTy)),LU),
29233                                     qVar"state"),
29234                                  Let(TP[bVar"v",qVar"s"],
29235                                      Apply
29236                                        (Call
29237                                           ("Do",ATy(qTy,PTy(bTy,qTy)),
29238                                            TP[Var("v",F4),LT]),qVar"s"),
29239                                      ITE(bVar"v",
29240                                          Let(Var("registers",F16),
29241                                              Mop(Cast F16,
29242                                                  Mop(Cast F8,
29243                                                      LL[bVar"b'7",
29244                                                         bVar"b'6",
29245                                                         bVar"b'5",
29246                                                         bVar"b'4",
29247                                                         bVar"b'3",
29248                                                         bVar"b'2",
29249                                                         bVar"b'1",
29250                                                         bVar"b'0"])),
29251                                              TP[Call
29252                                                   ("Load",
29253                                                    CTy"instruction",
29254                                                    Call
29255                                                      ("LoadMultiple",
29256                                                       CTy"Load",
29257                                                       TP[LT,LF,
29258                                                          Mop(Not,
29259                                                              Bop(Bit,
29260                                                                  Var("registers",
29261                                                                      F16),
29262                                                                  Mop(Cast
29263                                                                        nTy,
29264                                                                      Var("Rn",
29265                                                                          FTy 3)))),
29266                                                          Mop(Cast F4,
29267                                                              Var("Rn",
29268                                                                  FTy 3)),
29269                                                          Var("registers",
29270                                                              F16)])),
29271                                                 ITE(Bop(Lt,
29272                                                         Call
29273                                                           ("BitCount",
29274                                                            nTy,
29275                                                            Var("registers",
29276                                                                F16)),LN 1),
29277                                                     Apply
29278                                                       (Call
29279                                                          ("DECODE_UNPREDICTABLE",
29280                                                           ATy(qTy,qTy),
29281                                                           TP[Var("mc",
29282                                                                  CTy"MachineCode"),
29283                                                              LS
29284                                                               "LoadMultiple"]),
29285                                                        qVar"s"),qVar"s")]),
29286                                          TP[Apply
29287                                               (Call
29288                                                  ("Skip",
29289                                                   ATy(qTy,
29290                                                       CTy"instruction"),
29291                                                   LU),qVar"s"),qVar"s"]))))),
29292                         (Bop(And,bVar"b'14",
29293                              Bop(And,bVar"b'12",
29294                                  Bop(And,bVar"b'11",
29295                                      Bop(And,bVar"b'10",
29296                                          Bop(And,bVar"b'9",
29297                                              Mop(Not,bVar"b'8")))))),
29298                          Let(TP[Var("v",F4),qVar"s"],
29299                              Apply
29300                                (Call
29301                                   ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),
29302                                    LU),qVar"state"),
29303                              Let(TP[bVar"v",qVar"s"],
29304                                  Apply
29305                                    (Call
29306                                       ("Do",ATy(qTy,PTy(bTy,qTy)),
29307                                        TP[Var("v",F4),LT]),qVar"s"),
29308                                  TP[ITE(bVar"v",
29309                                         Call
29310                                           ("Undefined",CTy"instruction",
29311                                            Mop(Cast F32,
29312                                                Mop(Cast F8,
29313                                                    LL[bVar"b'7",
29314                                                       bVar"b'6",
29315                                                       bVar"b'5",
29316                                                       bVar"b'4",
29317                                                       bVar"b'3",
29318                                                       bVar"b'2",
29319                                                       bVar"b'1",bVar"b'0"]))),
29320                                         Apply
29321                                           (Call
29322                                              ("Skip",
29323                                               ATy(qTy,CTy"instruction"),
29324                                               LU),qVar"s")),qVar"s"]))),
29325                         (Bop(And,bVar"b'14",
29326                              Bop(And,bVar"b'12",
29327                                  Bop(And,bVar"b'11",
29328                                      Bop(And,bVar"b'10",
29329                                          Bop(And,bVar"b'9",bVar"b'8"))))),
29330                          Let(TP[Var("v",F4),qVar"s"],
29331                              Apply
29332                                (Call
29333                                   ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),
29334                                    LU),qVar"state"),
29335                              Let(TP[bVar"v",qVar"s"],
29336                                  Apply
29337                                    (Call
29338                                       ("Do",ATy(qTy,PTy(bTy,qTy)),
29339                                        TP[Var("v",F4),LT]),qVar"s"),
29340                                  TP[ITE(bVar"v",
29341                                         Call
29342                                           ("System",CTy"instruction",
29343                                            Call
29344                                              ("SupervisorCall",
29345                                               CTy"System",
29346                                               Mop(Cast F32,
29347                                                   Mop(Cast F8,
29348                                                       LL[bVar"b'7",
29349                                                          bVar"b'6",
29350                                                          bVar"b'5",
29351                                                          bVar"b'4",
29352                                                          bVar"b'3",
29353                                                          bVar"b'2",
29354                                                          bVar"b'1",
29355                                                          bVar"b'0"])))),
29356                                         Apply
29357                                           (Call
29358                                              ("Skip",
29359                                               ATy(qTy,CTy"instruction"),
29360                                               LU),qVar"s")),qVar"s"]))),
29361                         (Bop(And,bVar"b'14",bVar"b'12"),
29362                          Let(TP[bVar"v",qVar"s"],
29363                              Apply
29364                                (Call
29365                                   ("Do",ATy(qTy,PTy(bTy,qTy)),
29366                                    TP[Mop(Cast F4,
29367                                           LL[bVar"b'11",bVar"b'10",
29368                                              bVar"b'9",bVar"b'8"]),LT]),
29369                                 qVar"state"),
29370                              ITE(bVar"v",
29371                                  TP[Call
29372                                       ("Branch",CTy"instruction",
29373                                        Call
29374                                          ("BranchTarget",CTy"Branch",
29375                                           Mop(SE F32,
29376                                               CC[Mop(Cast F8,
29377                                                      LL[bVar"b'7",
29378                                                         bVar"b'6",
29379                                                         bVar"b'5",
29380                                                         bVar"b'4",
29381                                                         bVar"b'3",
29382                                                         bVar"b'2",
29383                                                         bVar"b'1",
29384                                                         bVar"b'0"]),
29385                                                  LW(0,1)]))),
29386                                     ITE(Apply
29387                                           (Call
29388                                              ("InITBlock",ATy(qTy,bTy),LU),
29389                                            qVar"s"),
29390                                         Apply
29391                                           (Call
29392                                              ("DECODE_UNPREDICTABLE",
29393                                               ATy(qTy,qTy),
29394                                               TP[Var("mc",
29395                                                      CTy"MachineCode"),
29396                                                  LS"BranchTarget"]),
29397                                            qVar"s"),qVar"s")],
29398                                  TP[Apply
29399                                       (Call
29400                                          ("Skip",
29401                                           ATy(qTy,CTy"instruction"),LU),
29402                                        qVar"s"),qVar"s"])))],
29403                        Apply
29404                          (Call
29405                             ("UndefinedThumb",
29406                              ATy(qTy,PTy(CTy"instruction",qTy)),LU),
29407                           qVar"state"))),
29408                   (Bop(And,Mop(Not,bVar"b'14"),
29409                        Bop(And,bVar"b'12",
29410                            Bop(And,bVar"b'11",Mop(Not,bVar"b'10")))),
29411                    Let(TP[Var("v",F4),qVar"s"],
29412                        Apply
29413                          (Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
29414                           qVar"state"),
29415                        Let(TP[bVar"v",qVar"s"],
29416                            Apply
29417                              (Call
29418                                 ("Do",ATy(qTy,PTy(bTy,qTy)),
29419                                  TP[Var("v",F4),LT]),qVar"s"),
29420                            TP[ITE(bVar"v",
29421                                   Call
29422                                     ("Data",CTy"instruction",
29423                                      Call
29424                                        ("Register",CTy"Data",
29425                                         TP[ITE(EQ(Mop(Cast F1,
29426                                                       LL[bVar"b'9"]),
29427                                                   LW(1,1)),LW(2,4),
29428                                                LW(4,4)),
29429                                            Mop(Not,
29430                                                Apply
29431                                                  (Call
29432                                                     ("InITBlock",
29433                                                      ATy(qTy,bTy),LU),
29434                                                   qVar"s")),
29435                                            Mop(Cast F4,
29436                                                Mop(Cast(FTy 3),
29437                                                    LL[bVar"b'2",
29438                                                       bVar"b'1",bVar"b'0"])),
29439                                            Mop(Cast F4,
29440                                                Mop(Cast(FTy 3),
29441                                                    LL[bVar"b'5",
29442                                                       bVar"b'4",bVar"b'3"])),
29443                                            Mop(Cast F4,
29444                                                Mop(Cast(FTy 3),
29445                                                    LL[bVar"b'8",
29446                                                       bVar"b'7",bVar"b'6"])),
29447                                            LC("SRType_LSL",CTy"SRType"),
29448                                            LN 0])),
29449                                   Apply
29450                                     (Call
29451                                        ("Skip",ATy(qTy,CTy"instruction"),
29452                                         LU),qVar"s")),qVar"s"]))),
29453                   (Bop(And,Mop(Not,bVar"b'14"),
29454                        Bop(And,bVar"b'12",Bop(And,bVar"b'11",bVar"b'10"))),
29455                    Let(TP[Var("v",F4),qVar"s"],
29456                        Apply
29457                          (Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
29458                           qVar"state"),
29459                        Let(TP[bVar"v",qVar"s"],
29460                            Apply
29461                              (Call
29462                                 ("Do",ATy(qTy,PTy(bTy,qTy)),
29463                                  TP[Var("v",F4),LT]),qVar"s"),
29464                            TP[ITE(bVar"v",
29465                                   Call
29466                                     ("Data",CTy"instruction",
29467                                      Call
29468                                        ("ArithLogicImmediate",CTy"Data",
29469                                         TP[ITE(EQ(Mop(Cast F1,
29470                                                       LL[bVar"b'9"]),
29471                                                   LW(1,1)),LW(2,4),
29472                                                LW(4,4)),
29473                                            Mop(Not,
29474                                                Apply
29475                                                  (Call
29476                                                     ("InITBlock",
29477                                                      ATy(qTy,bTy),LU),
29478                                                   qVar"s")),
29479                                            Mop(Cast F4,
29480                                                Mop(Cast(FTy 3),
29481                                                    LL[bVar"b'2",
29482                                                       bVar"b'1",bVar"b'0"])),
29483                                            Mop(Cast F4,
29484                                                Mop(Cast(FTy 3),
29485                                                    LL[bVar"b'5",
29486                                                       bVar"b'4",bVar"b'3"])),
29487                                            Mop(Cast(FTy 12),
29488                                                Mop(Cast(FTy 3),
29489                                                    LL[bVar"b'8",
29490                                                       bVar"b'7",bVar"b'6"]))])),
29491                                   Apply
29492                                     (Call
29493                                        ("Skip",ATy(qTy,CTy"instruction"),
29494                                         LU),qVar"s")),qVar"s"]))),
29495                   (Mop(Not,bVar"b'14"),
29496                    Let(TP[Var("v",F4),qVar"s"],
29497                        Apply
29498                          (Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
29499                           qVar"state"),
29500                        Let(TP[bVar"v",qVar"s"],
29501                            Apply
29502                              (Call
29503                                 ("Do",ATy(qTy,PTy(bTy,qTy)),
29504                                  TP[Var("v",F4),LT]),qVar"s"),
29505                            TP[ITE(bVar"v",
29506                                   Let(TP[Var("shift_t",CTy"SRType"),
29507                                          nVar"shift_n"],
29508                                       Call
29509                                         ("DecodeImmShift",
29510                                          PTy(CTy"SRType",nTy),
29511                                          TP[Mop(Cast(FTy 2),
29512                                                 LL[bVar"b'12",bVar"b'11"]),
29513                                             Mop(Cast(FTy 5),
29514                                                 LL[bVar"b'10",bVar"b'9",
29515                                                    bVar"b'8",bVar"b'7",
29516                                                    bVar"b'6"])]),
29517                                       Call
29518                                         ("Data",CTy"instruction",
29519                                          Call
29520                                            ("ShiftImmediate",CTy"Data",
29521                                             TP[LF,
29522                                                Mop(Not,
29523                                                    Apply
29524                                                      (Call
29525                                                         ("InITBlock",
29526                                                          ATy(qTy,bTy),LU),
29527                                                       qVar"s")),
29528                                                Mop(Cast F4,
29529                                                    Mop(Cast(FTy 3),
29530                                                        LL[bVar"b'2",
29531                                                           bVar"b'1",
29532                                                           bVar"b'0"])),
29533                                                Mop(Cast F4,
29534                                                    Mop(Cast(FTy 3),
29535                                                        LL[bVar"b'5",
29536                                                           bVar"b'4",
29537                                                           bVar"b'3"])),
29538                                                Var("shift_t",CTy"SRType"),
29539                                                nVar"shift_n"]))),
29540                                   Apply
29541                                     (Call
29542                                        ("Skip",ATy(qTy,CTy"instruction"),
29543                                         LU),qVar"s")),qVar"s"]))),
29544                   (Bop(And,bVar"b'14",
29545                        Bop(And,Mop(Not,bVar"b'12"),
29546                            Bop(And,Mop(Not,bVar"b'11"),
29547                                Mop(Not,bVar"b'10")))),
29548                    Let(Var("Ry",FTy 3),
29549                        Mop(Cast(FTy 3),LL[bVar"b'2",bVar"b'1",bVar"b'0"]),
29550                        Let(Var("Rx",FTy 3),
29551                            Mop(Cast(FTy 3),
29552                                LL[bVar"b'5",bVar"b'4",bVar"b'3"]),
29553                            Let(Var("opc",F4),
29554                                Mop(Cast F4,
29555                                    LL[bVar"b'9",bVar"b'8",bVar"b'7",
29556                                       bVar"b'6"]),
29557                                Let(TP[Var("v",F4),qVar"s"],
29558                                    Apply
29559                                      (Call
29560                                         ("ThumbCondition",
29561                                          ATy(qTy,PTy(F4,qTy)),LU),
29562                                       qVar"state"),
29563                                    Let(TP[bVar"v",qVar"s"],
29564                                        Apply
29565                                          (Call
29566                                             ("Do",ATy(qTy,PTy(bTy,qTy)),
29567                                              TP[Var("v",F4),LT]),qVar"s"),
29568                                        ITE(bVar"v",
29569                                            CS(Var("opc",F4),
29570                                               [(LW(0,4),
29571                                                 Let(Var("d",F4),
29572                                                     Mop(Cast F4,
29573                                                         Var("Ry",FTy 3)),
29574                                                     TP[Call
29575                                                          ("Data",
29576                                                           CTy"instruction",
29577                                                           Call
29578                                                             ("Register",
29579                                                              CTy"Data",
29580                                                              TP[Var("opc",
29581                                                                     F4),
29582                                                                 Mop(Not,
29583                                                                     Apply
29584                                                                       (Call
29585                                                                          ("InITBlock",
29586                                                                           ATy(qTy,
29587                                                                               bTy),
29588                                                                           LU),
29589                                                                        qVar"s")),
29590                                                                 Var("d",
29591                                                                     F4),
29592                                                                 Var("d",
29593                                                                     F4),
29594                                                                 Mop(Cast
29595                                                                       F4,
29596                                                                     Var("Rx",
29597                                                                         FTy 3)),
29598                                                                 LC("SRType_LSL",
29599                                                                    CTy"SRType"),
29600                                                                 LN 0])),
29601                                                        qVar"s"])),
29602                                                (LW(1,4),
29603                                                 Let(Var("d",F4),
29604                                                     Mop(Cast F4,
29605                                                         Var("Ry",FTy 3)),
29606                                                     TP[Call
29607                                                          ("Data",
29608                                                           CTy"instruction",
29609                                                           Call
29610                                                             ("Register",
29611                                                              CTy"Data",
29612                                                              TP[Var("opc",
29613                                                                     F4),
29614                                                                 Mop(Not,
29615                                                                     Apply
29616                                                                       (Call
29617                                                                          ("InITBlock",
29618                                                                           ATy(qTy,
29619                                                                               bTy),
29620                                                                           LU),
29621                                                                        qVar"s")),
29622                                                                 Var("d",
29623                                                                     F4),
29624                                                                 Var("d",
29625                                                                     F4),
29626                                                                 Mop(Cast
29627                                                                       F4,
29628                                                                     Var("Rx",
29629                                                                         FTy 3)),
29630                                                                 LC("SRType_LSL",
29631                                                                    CTy"SRType"),
29632                                                                 LN 0])),
29633                                                        qVar"s"])),
29634                                                (LW(5,4),
29635                                                 Let(Var("d",F4),
29636                                                     Mop(Cast F4,
29637                                                         Var("Ry",FTy 3)),
29638                                                     TP[Call
29639                                                          ("Data",
29640                                                           CTy"instruction",
29641                                                           Call
29642                                                             ("Register",
29643                                                              CTy"Data",
29644                                                              TP[Var("opc",
29645                                                                     F4),
29646                                                                 Mop(Not,
29647                                                                     Apply
29648                                                                       (Call
29649                                                                          ("InITBlock",
29650                                                                           ATy(qTy,
29651                                                                               bTy),
29652                                                                           LU),
29653                                                                        qVar"s")),
29654                                                                 Var("d",
29655                                                                     F4),
29656                                                                 Var("d",
29657                                                                     F4),
29658                                                                 Mop(Cast
29659                                                                       F4,
29660                                                                     Var("Rx",
29661                                                                         FTy 3)),
29662                                                                 LC("SRType_LSL",
29663                                                                    CTy"SRType"),
29664                                                                 LN 0])),
29665                                                        qVar"s"])),
29666                                                (LW(6,4),
29667                                                 Let(Var("d",F4),
29668                                                     Mop(Cast F4,
29669                                                         Var("Ry",FTy 3)),
29670                                                     TP[Call
29671                                                          ("Data",
29672                                                           CTy"instruction",
29673                                                           Call
29674                                                             ("Register",
29675                                                              CTy"Data",
29676                                                              TP[Var("opc",
29677                                                                     F4),
29678                                                                 Mop(Not,
29679                                                                     Apply
29680                                                                       (Call
29681                                                                          ("InITBlock",
29682                                                                           ATy(qTy,
29683                                                                               bTy),
29684                                                                           LU),
29685                                                                        qVar"s")),
29686                                                                 Var("d",
29687                                                                     F4),
29688                                                                 Var("d",
29689                                                                     F4),
29690                                                                 Mop(Cast
29691                                                                       F4,
29692                                                                     Var("Rx",
29693                                                                         FTy 3)),
29694                                                                 LC("SRType_LSL",
29695                                                                    CTy"SRType"),
29696                                                                 LN 0])),
29697                                                        qVar"s"])),
29698                                                (LW(12,4),
29699                                                 Let(Var("d",F4),
29700                                                     Mop(Cast F4,
29701                                                         Var("Ry",FTy 3)),
29702                                                     TP[Call
29703                                                          ("Data",
29704                                                           CTy"instruction",
29705                                                           Call
29706                                                             ("Register",
29707                                                              CTy"Data",
29708                                                              TP[Var("opc",
29709                                                                     F4),
29710                                                                 Mop(Not,
29711                                                                     Apply
29712                                                                       (Call
29713                                                                          ("InITBlock",
29714                                                                           ATy(qTy,
29715                                                                               bTy),
29716                                                                           LU),
29717                                                                        qVar"s")),
29718                                                                 Var("d",
29719                                                                     F4),
29720                                                                 Var("d",
29721                                                                     F4),
29722                                                                 Mop(Cast
29723                                                                       F4,
29724                                                                     Var("Rx",
29725                                                                         FTy 3)),
29726                                                                 LC("SRType_LSL",
29727                                                                    CTy"SRType"),
29728                                                                 LN 0])),
29729                                                        qVar"s"])),
29730                                                (LW(14,4),
29731                                                 Let(Var("d",F4),
29732                                                     Mop(Cast F4,
29733                                                         Var("Ry",FTy 3)),
29734                                                     TP[Call
29735                                                          ("Data",
29736                                                           CTy"instruction",
29737                                                           Call
29738                                                             ("Register",
29739                                                              CTy"Data",
29740                                                              TP[Var("opc",
29741                                                                     F4),
29742                                                                 Mop(Not,
29743                                                                     Apply
29744                                                                       (Call
29745                                                                          ("InITBlock",
29746                                                                           ATy(qTy,
29747                                                                               bTy),
29748                                                                           LU),
29749                                                                        qVar"s")),
29750                                                                 Var("d",
29751                                                                     F4),
29752                                                                 Var("d",
29753                                                                     F4),
29754                                                                 Mop(Cast
29755                                                                       F4,
29756                                                                     Var("Rx",
29757                                                                         FTy 3)),
29758                                                                 LC("SRType_LSL",
29759                                                                    CTy"SRType"),
29760                                                                 LN 0])),
29761                                                        qVar"s"])),
29762                                                (LW(2,4),
29763                                                 Let(Var("d",F4),
29764                                                     Mop(Cast F4,
29765                                                         Var("Ry",FTy 3)),
29766                                                     TP[Call
29767                                                          ("Data",
29768                                                           CTy"instruction",
29769                                                           Call
29770                                                             ("ShiftRegister",
29771                                                              CTy"Data",
29772                                                              TP[LF,
29773                                                                 Mop(Not,
29774                                                                     Apply
29775                                                                       (Call
29776                                                                          ("InITBlock",
29777                                                                           ATy(qTy,
29778                                                                               bTy),
29779                                                                           LU),
29780                                                                        qVar"s")),
29781                                                                 Var("d",
29782                                                                     F4),
29783                                                                 Var("d",
29784                                                                     F4),
29785                                                                 Call
29786                                                                   ("DecodeRegShift",
29787                                                                    CTy"SRType",
29788                                                                    Mop(Cast
29789                                                                          (FTy 2),
29790                                                                        Bop(Sub,
29791                                                                            Var("opc",
29792                                                                                F4),
29793                                                                            LW(2,
29794                                                                               4)))),
29795                                                                 Mop(Cast
29796                                                                       F4,
29797                                                                     Var("Rx",
29798                                                                         FTy 3))])),
29799                                                        qVar"s"])),
29800                                                (LW(3,4),
29801                                                 Let(Var("d",F4),
29802                                                     Mop(Cast F4,
29803                                                         Var("Ry",FTy 3)),
29804                                                     TP[Call
29805                                                          ("Data",
29806                                                           CTy"instruction",
29807                                                           Call
29808                                                             ("ShiftRegister",
29809                                                              CTy"Data",
29810                                                              TP[LF,
29811                                                                 Mop(Not,
29812                                                                     Apply
29813                                                                       (Call
29814                                                                          ("InITBlock",
29815                                                                           ATy(qTy,
29816                                                                               bTy),
29817                                                                           LU),
29818                                                                        qVar"s")),
29819                                                                 Var("d",
29820                                                                     F4),
29821                                                                 Var("d",
29822                                                                     F4),
29823                                                                 Call
29824                                                                   ("DecodeRegShift",
29825                                                                    CTy"SRType",
29826                                                                    Mop(Cast
29827                                                                          (FTy 2),
29828                                                                        Bop(Sub,
29829                                                                            Var("opc",
29830                                                                                F4),
29831                                                                            LW(2,
29832                                                                               4)))),
29833                                                                 Mop(Cast
29834                                                                       F4,
29835                                                                     Var("Rx",
29836                                                                         FTy 3))])),
29837                                                        qVar"s"])),
29838                                                (LW(4,4),
29839                                                 Let(Var("d",F4),
29840                                                     Mop(Cast F4,
29841                                                         Var("Ry",FTy 3)),
29842                                                     TP[Call
29843                                                          ("Data",
29844                                                           CTy"instruction",
29845                                                           Call
29846                                                             ("ShiftRegister",
29847                                                              CTy"Data",
29848                                                              TP[LF,
29849                                                                 Mop(Not,
29850                                                                     Apply
29851                                                                       (Call
29852                                                                          ("InITBlock",
29853                                                                           ATy(qTy,
29854                                                                               bTy),
29855                                                                           LU),
29856                                                                        qVar"s")),
29857                                                                 Var("d",
29858                                                                     F4),
29859                                                                 Var("d",
29860                                                                     F4),
29861                                                                 Call
29862                                                                   ("DecodeRegShift",
29863                                                                    CTy"SRType",
29864                                                                    Mop(Cast
29865                                                                          (FTy 2),
29866                                                                        Bop(Sub,
29867                                                                            Var("opc",
29868                                                                                F4),
29869                                                                            LW(2,
29870                                                                               4)))),
29871                                                                 Mop(Cast
29872                                                                       F4,
29873                                                                     Var("Rx",
29874                                                                         FTy 3))])),
29875                                                        qVar"s"])),
29876                                                (LW(7,4),
29877                                                 Let(Var("d",F4),
29878                                                     Mop(Cast F4,
29879                                                         Var("Ry",FTy 3)),
29880                                                     TP[Call
29881                                                          ("Data",
29882                                                           CTy"instruction",
29883                                                           Call
29884                                                             ("ShiftRegister",
29885                                                              CTy"Data",
29886                                                              TP[LF,
29887                                                                 Mop(Not,
29888                                                                     Apply
29889                                                                       (Call
29890                                                                          ("InITBlock",
29891                                                                           ATy(qTy,
29892                                                                               bTy),
29893                                                                           LU),
29894                                                                        qVar"s")),
29895                                                                 Var("d",
29896                                                                     F4),
29897                                                                 Var("d",
29898                                                                     F4),
29899                                                                 LC("SRType_ROR",
29900                                                                    CTy"SRType"),
29901                                                                 Mop(Cast
29902                                                                       F4,
29903                                                                     Var("Rx",
29904                                                                         FTy 3))])),
29905                                                        qVar"s"])),
29906                                                (LW(8,4),
29907                                                 TP[Call
29908                                                      ("Data",
29909                                                       CTy"instruction",
29910                                                       Call
29911                                                         ("TestCompareRegister",
29912                                                          CTy"Data",
29913                                                          TP[EX(Var("opc",
29914                                                                    F4),
29915                                                                LN 1,LN 0,
29916                                                                FTy 2),
29917                                                             Mop(Cast F4,
29918                                                                 Var("Ry",
29919                                                                     FTy 3)),
29920                                                             Mop(Cast F4,
29921                                                                 Var("Rx",
29922                                                                     FTy 3)),
29923                                                             LC("SRType_LSL",
29924                                                                CTy"SRType"),
29925                                                             LN 0])),
29926                                                    qVar"s"]),
29927                                                (LW(10,4),
29928                                                 TP[Call
29929                                                      ("Data",
29930                                                       CTy"instruction",
29931                                                       Call
29932                                                         ("TestCompareRegister",
29933                                                          CTy"Data",
29934                                                          TP[EX(Var("opc",
29935                                                                    F4),
29936                                                                LN 1,LN 0,
29937                                                                FTy 2),
29938                                                             Mop(Cast F4,
29939                                                                 Var("Ry",
29940                                                                     FTy 3)),
29941                                                             Mop(Cast F4,
29942                                                                 Var("Rx",
29943                                                                     FTy 3)),
29944                                                             LC("SRType_LSL",
29945                                                                CTy"SRType"),
29946                                                             LN 0])),
29947                                                    qVar"s"]),
29948                                                (LW(11,4),
29949                                                 TP[Call
29950                                                      ("Data",
29951                                                       CTy"instruction",
29952                                                       Call
29953                                                         ("TestCompareRegister",
29954                                                          CTy"Data",
29955                                                          TP[EX(Var("opc",
29956                                                                    F4),
29957                                                                LN 1,LN 0,
29958                                                                FTy 2),
29959                                                             Mop(Cast F4,
29960                                                                 Var("Ry",
29961                                                                     FTy 3)),
29962                                                             Mop(Cast F4,
29963                                                                 Var("Rx",
29964                                                                     FTy 3)),
29965                                                             LC("SRType_LSL",
29966                                                                CTy"SRType"),
29967                                                             LN 0])),
29968                                                    qVar"s"]),
29969                                                (LW(9,4),
29970                                                 TP[Call
29971                                                      ("Data",
29972                                                       CTy"instruction",
29973                                                       Call
29974                                                         ("ArithLogicImmediate",
29975                                                          CTy"Data",
29976                                                          TP[LW(3,4),
29977                                                             Mop(Not,
29978                                                                 Apply
29979                                                                   (Call
29980                                                                      ("InITBlock",
29981                                                                       ATy(qTy,
29982                                                                           bTy),
29983                                                                       LU),
29984                                                                    qVar"s")),
29985                                                             Mop(Cast F4,
29986                                                                 Var("Ry",
29987                                                                     FTy 3)),
29988                                                             Mop(Cast F4,
29989                                                                 Var("Rx",
29990                                                                     FTy 3)),
29991                                                             LW(0,12)])),
29992                                                    qVar"s"]),
29993                                                (LW(13,4),
29994                                                 Let(Var("d",F4),
29995                                                     Mop(Cast F4,
29996                                                         Var("Ry",FTy 3)),
29997                                                     Let(Var("n",F4),
29998                                                         Mop(Cast F4,
29999                                                             Var("Rx",
30000                                                                 FTy 3)),
30001                                                         Let(TP[bVar"v",
30002                                                                qVar"s"],
30003                                                             Let(qVar"s0",
30004                                                                 ITE(Bop(And,
30005                                                                         Bop(Lt,
30006                                                                             Apply
30007                                                                               (Call
30008                                                                                  ("ArchVersion",
30009                                                                                   ATy(qTy,
30010                                                                                       nTy),
30011                                                                                   LU),
30012                                                                                qVar"s"),
30013                                                                             LN
30014                                                                              6),
30015                                                                         EQ(Var("d",
30016                                                                                F4),
30017                                                                            Var("n",
30018                                                                                F4))),
30019                                                                     Apply
30020                                                                       (Call
30021                                                                          ("DECODE_UNPREDICTABLE",
30022                                                                           ATy(qTy,
30023                                                                               qTy),
30024                                                                           TP[Var("mc",
30025                                                                                  CTy"MachineCode"),
30026                                                                              LS
30027                                                                               "Multiply"]),
30028                                                                        qVar"s"),
30029                                                                     qVar"s"),
30030                                                                 TP[Apply
30031                                                                      (Call
30032                                                                         ("InITBlock",
30033                                                                          ATy(qTy,
30034                                                                              bTy),
30035                                                                          LU),
30036                                                                       qVar"s0"),
30037                                                                    qVar"s0"]),
30038                                                             TP[Call
30039                                                                  ("Multiply",
30040                                                                   CTy"instruction",
30041                                                                   Call
30042                                                                     ("Multiply32",
30043                                                                      CTy"Multiply",
30044                                                                      TP[Mop(Not,
30045                                                                             bVar"v"),
30046                                                                         Var("d",
30047                                                                             F4),
30048                                                                         Var("n",
30049                                                                             F4),
30050                                                                         Var("d",
30051                                                                             F4)])),
30052                                                                qVar"s"])))),
30053                                                (LW(15,4),
30054                                                 TP[Call
30055                                                      ("Data",
30056                                                       CTy"instruction",
30057                                                       Call
30058                                                         ("ShiftImmediate",
30059                                                          CTy"Data",
30060                                                          TP[LT,
30061                                                             Mop(Not,
30062                                                                 Apply
30063                                                                   (Call
30064                                                                      ("InITBlock",
30065                                                                       ATy(qTy,
30066                                                                           bTy),
30067                                                                       LU),
30068                                                                    qVar"s")),
30069                                                             Mop(Cast F4,
30070                                                                 Var("Ry",
30071                                                                     FTy 3)),
30072                                                             Mop(Cast F4,
30073                                                                 Var("Rx",
30074                                                                     FTy 3)),
30075                                                             LC("SRType_LSL",
30076                                                                CTy"SRType"),
30077                                                             LN 0])),
30078                                                    qVar"s"])]),
30079                                            TP[Apply
30080                                                 (Call
30081                                                    ("Skip",
30082                                                     ATy(qTy,
30083                                                         CTy"instruction"),
30084                                                     LU),qVar"s"),qVar"s"]))))))),
30085                   (Bop(And,bVar"b'14",
30086                        Bop(And,Mop(Not,bVar"b'12"),
30087                            Bop(And,Mop(Not,bVar"b'11"),
30088                                Bop(And,bVar"b'10",
30089                                    Bop(And,Mop(Not,bVar"b'9"),
30090                                        Mop(Not,bVar"b'8")))))),
30091                    Let(Var("Rm",F4),
30092                        Mop(Cast F4,
30093                            LL[bVar"b'6",bVar"b'5",bVar"b'4",bVar"b'3"]),
30094                        Let(Var("DN",F1),Mop(Cast F1,LL[bVar"b'7"]),
30095                            Let(TP[Var("v",F4),qVar"s"],
30096                                Apply
30097                                  (Call
30098                                     ("ThumbCondition",
30099                                      ATy(qTy,PTy(F4,qTy)),LU),qVar"state"),
30100                                Let(TP[bVar"v",qVar"s"],
30101                                    Apply
30102                                      (Call
30103                                         ("Do",ATy(qTy,PTy(bTy,qTy)),
30104                                          TP[Var("v",F4),
30105                                             Bop(Or,Mop(Msb,Var("Rm",F4)),
30106                                                 Bop(Or,
30107                                                     EQ(Var("DN",F1),
30108                                                        LW(1,1)),
30109                                                     Apply
30110                                                       (Call
30111                                                          ("HaveThumb2",
30112                                                           ATy(qTy,bTy),LU),
30113                                                        qVar"s")))]),
30114                                       qVar"s"),
30115                                    ITE(bVar"v",
30116                                        Let(Var("d",F4),
30117                                            CC[Var("DN",F1),
30118                                               Mop(Cast(FTy 3),
30119                                                   LL[bVar"b'2",bVar"b'1",
30120                                                      bVar"b'0"])],
30121                                            TP[Call
30122                                                 ("Data",CTy"instruction",
30123                                                  Call
30124                                                    ("Register",CTy"Data",
30125                                                     TP[LW(4,4),LF,
30126                                                        Var("d",F4),
30127                                                        Var("d",F4),
30128                                                        Var("Rm",F4),
30129                                                        LC("SRType_LSL",
30130                                                           CTy"SRType"),
30131                                                        LN 0])),
30132                                               ITE(Bop(Or,
30133                                                       Bop(And,
30134                                                           EQ(Var("d",F4),
30135                                                              LW(15,4)),
30136                                                           EQ(Var("Rm",F4),
30137                                                              LW(15,4))),
30138                                                       Bop(And,
30139                                                           EQ(Var("d",F4),
30140                                                              LW(15,4)),
30141                                                           Bop(And,
30142                                                               Apply
30143                                                                 (Call
30144                                                                    ("InITBlock",
30145                                                                     ATy(qTy,
30146                                                                         bTy),
30147                                                                     LU),
30148                                                                  qVar"s"),
30149                                                               Mop(Not,
30150                                                                   Apply
30151                                                                     (Call
30152                                                                        ("LastInITBlock",
30153                                                                         ATy(qTy,
30154                                                                             bTy),
30155                                                                         LU),
30156                                                                      qVar"s"))))),
30157                                                   Apply
30158                                                     (Call
30159                                                        ("DECODE_UNPREDICTABLE",
30160                                                         ATy(qTy,qTy),
30161                                                         TP[Var("mc",
30162                                                                CTy"MachineCode"),
30163                                                            LS"ADD"]),
30164                                                      qVar"s"),qVar"s")]),
30165                                        TP[Apply
30166                                             (Call
30167                                                ("Skip",
30168                                                 ATy(qTy,CTy"instruction"),
30169                                                 LU),qVar"s"),qVar"s"])))))),
30170                   (Bop(And,bVar"b'14",
30171                        Bop(And,Mop(Not,bVar"b'12"),
30172                            Bop(And,Mop(Not,bVar"b'11"),
30173                                Bop(And,bVar"b'10",
30174                                    Bop(And,Mop(Not,bVar"b'9"),
30175                                        Bop(And,bVar"b'8",
30176                                            Bop(And,Mop(Not,bVar"b'7"),
30177                                                Mop(Not,bVar"b'6")))))))),
30178                    Apply
30179                      (Call
30180                         ("raise'exception",
30181                          ATy(qTy,PTy(CTy"instruction",qTy)),
30182                          Call
30183                            ("UNPREDICTABLE",CTy"exception",
30184                             LS"Thumb: 010001 0100 _")),qVar"state")),
30185                   (Bop(And,bVar"b'14",
30186                        Bop(And,Mop(Not,bVar"b'12"),
30187                            Bop(And,Mop(Not,bVar"b'11"),
30188                                Bop(And,bVar"b'10",
30189                                    Bop(And,Mop(Not,bVar"b'9"),bVar"b'8"))))),
30190                    Let(Var("Rm",F4),
30191                        Mop(Cast F4,
30192                            LL[bVar"b'6",bVar"b'5",bVar"b'4",bVar"b'3"]),
30193                        Let(TP[Var("v",F4),qVar"s"],
30194                            Apply
30195                              (Call
30196                                 ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
30197                               qVar"state"),
30198                            Let(TP[bVar"v",qVar"s"],
30199                                Apply
30200                                  (Call
30201                                     ("Do",ATy(qTy,PTy(bTy,qTy)),
30202                                      TP[Var("v",F4),LT]),qVar"s"),
30203                                ITE(bVar"v",
30204                                    Let(Var("n",F4),
30205                                        CC[Mop(Cast F1,LL[bVar"b'7"]),
30206                                           Mop(Cast(FTy 3),
30207                                               LL[bVar"b'2",bVar"b'1",
30208                                                  bVar"b'0"])],
30209                                        TP[Call
30210                                             ("Data",CTy"instruction",
30211                                              Call
30212                                                ("TestCompareRegister",
30213                                                 CTy"Data",
30214                                                 TP[LW(2,2),Var("n",F4),
30215                                                    Var("Rm",F4),
30216                                                    LC("SRType_LSL",
30217                                                       CTy"SRType"),LN 0])),
30218                                           ITE(Bop(Or,
30219                                                   Bop(And,
30220                                                       Bop(Ult,
30221                                                           Var("n",F4),
30222                                                           LW(8,4)),
30223                                                       Bop(Ult,
30224                                                           Var("Rm",F4),
30225                                                           LW(8,4))),
30226                                                   Bop(Or,
30227                                                       EQ(Var("n",F4),
30228                                                          LW(15,4)),
30229                                                       EQ(Var("Rm",F4),
30230                                                          LW(15,4)))),
30231                                               Apply
30232                                                 (Call
30233                                                    ("DECODE_UNPREDICTABLE",
30234                                                     ATy(qTy,qTy),
30235                                                     TP[Var("mc",
30236                                                            CTy"MachineCode"),
30237                                                        LS"CMP"]),qVar"s"),
30238                                               qVar"s")]),
30239                                    TP[Apply
30240                                         (Call
30241                                            ("Skip",
30242                                             ATy(qTy,CTy"instruction"),LU),
30243                                          qVar"s"),qVar"s"]))))),
30244                   (Bop(And,bVar"b'14",
30245                        Bop(And,Mop(Not,bVar"b'12"),
30246                            Bop(And,Mop(Not,bVar"b'11"),
30247                                Bop(And,bVar"b'10",
30248                                    Bop(And,bVar"b'9",Mop(Not,bVar"b'8")))))),
30249                    Let(Var("Rm",F4),
30250                        Mop(Cast F4,
30251                            LL[bVar"b'6",bVar"b'5",bVar"b'4",bVar"b'3"]),
30252                        Let(Var("D",F1),Mop(Cast F1,LL[bVar"b'7"]),
30253                            Let(TP[Var("v",F4),qVar"s"],
30254                                Apply
30255                                  (Call
30256                                     ("ThumbCondition",
30257                                      ATy(qTy,PTy(F4,qTy)),LU),qVar"state"),
30258                                Let(TP[bVar"v",qVar"s"],
30259                                    Apply
30260                                      (Call
30261                                         ("Do",ATy(qTy,PTy(bTy,qTy)),
30262                                          TP[Var("v",F4),
30263                                             Bop(Or,Mop(Msb,Var("Rm",F4)),
30264                                                 Bop(Or,
30265                                                     EQ(Var("D",F1),
30266                                                        LW(1,1)),
30267                                                     Bop(Ge,
30268                                                         Apply
30269                                                           (Call
30270                                                              ("ArchVersion",
30271                                                               ATy(qTy,nTy),
30272                                                               LU),qVar"s"),
30273                                                         LN 6)))]),qVar"s"),
30274                                    ITE(bVar"v",
30275                                        Let(Var("d",F4),
30276                                            CC[Var("D",F1),
30277                                               Mop(Cast(FTy 3),
30278                                                   LL[bVar"b'2",bVar"b'1",
30279                                                      bVar"b'0"])],
30280                                            TP[Call
30281                                                 ("Data",CTy"instruction",
30282                                                  Call
30283                                                    ("ShiftImmediate",
30284                                                     CTy"Data",
30285                                                     TP[LF,LF,Var("d",F4),
30286                                                        Var("Rm",F4),
30287                                                        LC("SRType_LSL",
30288                                                           CTy"SRType"),
30289                                                        LN 0])),
30290                                               ITE(Bop(And,
30291                                                       EQ(Var("d",F4),
30292                                                          LW(15,4)),
30293                                                       Bop(And,
30294                                                           Apply
30295                                                             (Call
30296                                                                ("InITBlock",
30297                                                                 ATy(qTy,
30298                                                                     bTy),
30299                                                                 LU),
30300                                                              qVar"s"),
30301                                                           Mop(Not,
30302                                                               Apply
30303                                                                 (Call
30304                                                                    ("LastInITBlock",
30305                                                                     ATy(qTy,
30306                                                                         bTy),
30307                                                                     LU),
30308                                                                  qVar"s")))),
30309                                                   Apply
30310                                                     (Call
30311                                                        ("DECODE_UNPREDICTABLE",
30312                                                         ATy(qTy,qTy),
30313                                                         TP[Var("mc",
30314                                                                CTy"MachineCode"),
30315                                                            LS"MOV"]),
30316                                                      qVar"s"),qVar"s")]),
30317                                        TP[Apply
30318                                             (Call
30319                                                ("Skip",
30320                                                 ATy(qTy,CTy"instruction"),
30321                                                 LU),qVar"s"),qVar"s"])))))),
30322                   (Bop(And,bVar"b'14",
30323                        Bop(And,Mop(Not,bVar"b'12"),
30324                            Bop(And,Mop(Not,bVar"b'11"),
30325                                Bop(And,bVar"b'10",
30326                                    Bop(And,bVar"b'9",
30327                                        Bop(And,bVar"b'8",
30328                                            Mop(Not,bVar"b'7"))))))),
30329                    Let(TP[Var("v",F4),qVar"s"],
30330                        Apply
30331                          (Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
30332                           qVar"state"),
30333                        Let(TP[bVar"v",qVar"s"],
30334                            Apply
30335                              (Call
30336                                 ("Do",ATy(qTy,PTy(bTy,qTy)),
30337                                  TP[Var("v",F4),LT]),qVar"s"),
30338                            ITE(bVar"v",
30339                                TP[Call
30340                                     ("Branch",CTy"instruction",
30341                                      Call
30342                                        ("BranchExchange",CTy"Branch",
30343                                         Mop(Cast F4,
30344                                             LL[bVar"b'6",bVar"b'5",
30345                                                bVar"b'4",bVar"b'3"]))),
30346                                   ITE(Bop(Or,
30347                                           Bop(And,
30348                                               Apply
30349                                                 (Call
30350                                                    ("InITBlock",
30351                                                     ATy(qTy,bTy),LU),
30352                                                  qVar"s"),
30353                                               Mop(Not,
30354                                                   Apply
30355                                                     (Call
30356                                                        ("LastInITBlock",
30357                                                         ATy(qTy,bTy),LU),
30358                                                      qVar"s"))),
30359                                           Mop(Not,
30360                                               EQ(Mop(Cast(FTy 3),
30361                                                      LL[bVar"b'2",
30362                                                         bVar"b'1",
30363                                                         bVar"b'0"]),
30364                                                  LW(0,3)))),
30365                                       Apply
30366                                         (Call
30367                                            ("DECODE_UNPREDICTABLE",
30368                                             ATy(qTy,qTy),
30369                                             TP[Var("mc",CTy"MachineCode"),
30370                                                LS"BranchExchange"]),
30371                                          qVar"s"),qVar"s")],
30372                                TP[Apply
30373                                     (Call
30374                                        ("Skip",ATy(qTy,CTy"instruction"),
30375                                         LU),qVar"s"),qVar"s"])))),
30376                   (Bop(And,bVar"b'14",
30377                        Bop(And,Mop(Not,bVar"b'12"),
30378                            Bop(And,Mop(Not,bVar"b'11"),
30379                                Bop(And,bVar"b'10",
30380                                    Bop(And,bVar"b'9",
30381                                        Bop(And,bVar"b'8",bVar"b'7")))))),
30382                    Let(Var("Rm",F4),
30383                        Mop(Cast F4,
30384                            LL[bVar"b'6",bVar"b'5",bVar"b'4",bVar"b'3"]),
30385                        Let(TP[Var("v",F4),qVar"s"],
30386                            Apply
30387                              (Call
30388                                 ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
30389                               qVar"state"),
30390                            Let(TP[bVar"v",qVar"s"],
30391                                Apply
30392                                  (Call
30393                                     ("Do",ATy(qTy,PTy(bTy,qTy)),
30394                                      TP[Var("v",F4),
30395                                         Bop(Ge,
30396                                             Apply
30397                                               (Call
30398                                                  ("ArchVersion",
30399                                                   ATy(qTy,nTy),LU),
30400                                                qVar"s"),LN 5)]),qVar"s"),
30401                                ITE(bVar"v",
30402                                    TP[Call
30403                                         ("Branch",CTy"instruction",
30404                                          Call
30405                                            ("BranchLinkExchangeRegister",
30406                                             CTy"Branch",Var("Rm",F4))),
30407                                       ITE(Bop(Or,
30408                                               EQ(Var("Rm",F4),LW(15,4)),
30409                                               Bop(Or,
30410                                                   Bop(And,
30411                                                       Apply
30412                                                         (Call
30413                                                            ("InITBlock",
30414                                                             ATy(qTy,bTy),
30415                                                             LU),qVar"s"),
30416                                                       Mop(Not,
30417                                                           Apply
30418                                                             (Call
30419                                                                ("LastInITBlock",
30420                                                                 ATy(qTy,
30421                                                                     bTy),
30422                                                                 LU),
30423                                                              qVar"s"))),
30424                                                   Mop(Not,
30425                                                       EQ(Mop(Cast(FTy 3),
30426                                                              LL[bVar"b'2",
30427                                                                 bVar"b'1",
30428                                                                 bVar"b'0"]),
30429                                                          LW(0,3))))),
30430                                           Apply
30431                                             (Call
30432                                                ("DECODE_UNPREDICTABLE",
30433                                                 ATy(qTy,qTy),
30434                                                 TP[Var("mc",
30435                                                        CTy"MachineCode"),
30436                                                    LS
30437                                                     "BranchLinkExchangeRegister"]),
30438                                              qVar"s"),qVar"s")],
30439                                    TP[Apply
30440                                         (Call
30441                                            ("Skip",
30442                                             ATy(qTy,CTy"instruction"),LU),
30443                                          qVar"s"),qVar"s"]))))),
30444                   (Bop(And,bVar"b'14",
30445                        Bop(And,Mop(Not,bVar"b'12"),bVar"b'11")),
30446                    Let(TP[Var("v",F4),qVar"s"],
30447                        Apply
30448                          (Call("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
30449                           qVar"state"),
30450                        Let(TP[bVar"v",qVar"s"],
30451                            Apply
30452                              (Call
30453                                 ("Do",ATy(qTy,PTy(bTy,qTy)),
30454                                  TP[Var("v",F4),LT]),qVar"s"),
30455                            TP[ITE(bVar"v",
30456                                   Call
30457                                     ("Load",CTy"instruction",
30458                                      Call
30459                                        ("LoadLiteral",CTy"Load",
30460                                         TP[LT,
30461                                            Mop(Cast F4,
30462                                                Mop(Cast(FTy 3),
30463                                                    LL[bVar"b'10",
30464                                                       bVar"b'9",bVar"b'8"])),
30465                                            Mop(Cast F32,
30466                                                CC[Mop(Cast F8,
30467                                                       LL[bVar"b'7",
30468                                                          bVar"b'6",
30469                                                          bVar"b'5",
30470                                                          bVar"b'4",
30471                                                          bVar"b'3",
30472                                                          bVar"b'2",
30473                                                          bVar"b'1",
30474                                                          bVar"b'0"]),
30475                                                   LW(0,2)])])),
30476                                   Apply
30477                                     (Call
30478                                        ("Skip",ATy(qTy,CTy"instruction"),
30479                                         LU),qVar"s")),qVar"s"]))),
30480                   (Bop(And,bVar"b'14",bVar"b'12"),
30481                    Let(Var("Rt",FTy 3),
30482                        Mop(Cast(FTy 3),LL[bVar"b'2",bVar"b'1",bVar"b'0"]),
30483                        Let(Var("Rn",FTy 3),
30484                            Mop(Cast(FTy 3),
30485                                LL[bVar"b'5",bVar"b'4",bVar"b'3"]),
30486                            Let(TP[Var("v",F4),qVar"s"],
30487                                Apply
30488                                  (Call
30489                                     ("ThumbCondition",
30490                                      ATy(qTy,PTy(F4,qTy)),LU),qVar"state"),
30491                                Let(TP[bVar"v",qVar"s"],
30492                                    Apply
30493                                      (Call
30494                                         ("Do",ATy(qTy,PTy(bTy,qTy)),
30495                                          TP[Var("v",F4),LT]),qVar"s"),
30496                                    TP[ITE(bVar"v",
30497                                           Let(Var("m",CTy"offset1"),
30498                                               Call
30499                                                 ("register_form1",
30500                                                  CTy"offset1",
30501                                                  TP[Mop(Cast F4,
30502                                                         Mop(Cast(FTy 3),
30503                                                             LL[bVar"b'8",
30504                                                                bVar"b'7",
30505                                                                bVar"b'6"])),
30506                                                     LC("SRType_LSL",
30507                                                        CTy"SRType"),LN 0]),
30508                                               CS(Mop(Cast(FTy 3),
30509                                                      LL[bVar"b'11",
30510                                                         bVar"b'10",
30511                                                         bVar"b'9"]),
30512                                                  [(LW(0,3),
30513                                                    Call
30514                                                      ("Store",
30515                                                       CTy"instruction",
30516                                                       Call
30517                                                         ("StoreWord",
30518                                                          CTy"Store",
30519                                                          TP[LT,LT,LF,
30520                                                             Mop(Cast F4,
30521                                                                 Var("Rt",
30522                                                                     FTy 3)),
30523                                                             Mop(Cast F4,
30524                                                                 Var("Rn",
30525                                                                     FTy 3)),
30526                                                             Var("m",
30527                                                                 CTy"offset1")]))),
30528                                                   (LW(1,3),
30529                                                    Call
30530                                                      ("Store",
30531                                                       CTy"instruction",
30532                                                       Call
30533                                                         ("StoreHalf",
30534                                                          CTy"Store",
30535                                                          TP[LT,LT,LF,
30536                                                             Mop(Cast F4,
30537                                                                 Var("Rt",
30538                                                                     FTy 3)),
30539                                                             Mop(Cast F4,
30540                                                                 Var("Rn",
30541                                                                     FTy 3)),
30542                                                             Var("m",
30543                                                                 CTy"offset1")]))),
30544                                                   (LW(2,3),
30545                                                    Call
30546                                                      ("Store",
30547                                                       CTy"instruction",
30548                                                       Call
30549                                                         ("StoreByte",
30550                                                          CTy"Store",
30551                                                          TP[LT,LT,LF,
30552                                                             Mop(Cast F4,
30553                                                                 Var("Rt",
30554                                                                     FTy 3)),
30555                                                             Mop(Cast F4,
30556                                                                 Var("Rn",
30557                                                                     FTy 3)),
30558                                                             Var("m",
30559                                                                 CTy"offset1")]))),
30560                                                   (LW(3,3),
30561                                                    Call
30562                                                      ("Load",
30563                                                       CTy"instruction",
30564                                                       Call
30565                                                         ("LoadByte",
30566                                                          CTy"Load",
30567                                                          TP[LF,LT,LT,LF,
30568                                                             Mop(Cast F4,
30569                                                                 Var("Rt",
30570                                                                     FTy 3)),
30571                                                             Mop(Cast F4,
30572                                                                 Var("Rn",
30573                                                                     FTy 3)),
30574                                                             Var("m",
30575                                                                 CTy"offset1")]))),
30576                                                   (LW(4,3),
30577                                                    Call
30578                                                      ("Load",
30579                                                       CTy"instruction",
30580                                                       Call
30581                                                         ("LoadWord",
30582                                                          CTy"Load",
30583                                                          TP[LT,LT,LF,
30584                                                             Mop(Cast F4,
30585                                                                 Var("Rt",
30586                                                                     FTy 3)),
30587                                                             Mop(Cast F4,
30588                                                                 Var("Rn",
30589                                                                     FTy 3)),
30590                                                             Var("m",
30591                                                                 CTy"offset1")]))),
30592                                                   (LW(5,3),
30593                                                    Call
30594                                                      ("Load",
30595                                                       CTy"instruction",
30596                                                       Call
30597                                                         ("LoadHalf",
30598                                                          CTy"Load",
30599                                                          TP[LT,LT,LT,LF,
30600                                                             Mop(Cast F4,
30601                                                                 Var("Rt",
30602                                                                     FTy 3)),
30603                                                             Mop(Cast F4,
30604                                                                 Var("Rn",
30605                                                                     FTy 3)),
30606                                                             Var("m",
30607                                                                 CTy"offset1")]))),
30608                                                   (LW(6,3),
30609                                                    Call
30610                                                      ("Load",
30611                                                       CTy"instruction",
30612                                                       Call
30613                                                         ("LoadByte",
30614                                                          CTy"Load",
30615                                                          TP[LT,LT,LT,LF,
30616                                                             Mop(Cast F4,
30617                                                                 Var("Rt",
30618                                                                     FTy 3)),
30619                                                             Mop(Cast F4,
30620                                                                 Var("Rn",
30621                                                                     FTy 3)),
30622                                                             Var("m",
30623                                                                 CTy"offset1")]))),
30624                                                   (LW(7,3),
30625                                                    Call
30626                                                      ("Load",
30627                                                       CTy"instruction",
30628                                                       Call
30629                                                         ("LoadHalf",
30630                                                          CTy"Load",
30631                                                          TP[LF,LT,LT,LF,
30632                                                             Mop(Cast F4,
30633                                                                 Var("Rt",
30634                                                                     FTy 3)),
30635                                                             Mop(Cast F4,
30636                                                                 Var("Rn",
30637                                                                     FTy 3)),
30638                                                             Var("m",
30639                                                                 CTy"offset1")])))])),
30640                                           Apply
30641                                             (Call
30642                                                ("Skip",
30643                                                 ATy(qTy,CTy"instruction"),
30644                                                 LU),qVar"s")),qVar"s"])))))],
30645                  Apply
30646                    (Call
30647                       ("UndefinedThumb",
30648                        ATy(qTy,PTy(CTy"instruction",qTy)),LU),qVar"state"))))))
30649;
30650val DecodeThumbEE_def = Def
30651  ("DecodeThumbEE",Var("h",F16),
30652   Close
30653     (qVar"state",
30654      Let(Var("mc",CTy"MachineCode"),
30655          Call("Thumb",CTy"MachineCode",Var("h",F16)),
30656          Let(TP[bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",bVar"b'11",
30657                 bVar"b'10",bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
30658                 bVar"b'5",bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
30659                 bVar"b'0"],BL(16,Var("h",F16)),
30660              ITE(Bop(And,bVar"b'14",Mop(Not,bVar"b'13")),
30661                  ITB([(Bop(And,Mop(Not,bVar"b'15"),bVar"b'12"),
30662                        Let(Var("Rt",FTy 3),
30663                            Mop(Cast(FTy 3),
30664                                LL[bVar"b'2",bVar"b'1",bVar"b'0"]),
30665                            Let(Var("Rn",FTy 3),
30666                                Mop(Cast(FTy 3),
30667                                    LL[bVar"b'5",bVar"b'4",bVar"b'3"]),
30668                                Let(TP[Var("v",F4),qVar"s"],
30669                                    Apply
30670                                      (Call
30671                                         ("ThumbCondition",
30672                                          ATy(qTy,PTy(F4,qTy)),LU),
30673                                       qVar"state"),
30674                                    Let(TP[bVar"v",qVar"s"],
30675                                        Apply
30676                                          (Call
30677                                             ("Do",ATy(qTy,PTy(bTy,qTy)),
30678                                              TP[Var("v",F4),LT]),qVar"s"),
30679                                        ITE(bVar"v",
30680                                            Let(Var("m",F4),
30681                                                Mop(Cast F4,
30682                                                    Mop(Cast(FTy 3),
30683                                                        LL[bVar"b'8",
30684                                                           bVar"b'7",
30685                                                           bVar"b'6"])),
30686                                                Let(Var("m1",CTy"offset1"),
30687                                                    Call
30688                                                      ("register_form1",
30689                                                       CTy"offset1",
30690                                                       TP[Var("m",F4),
30691                                                          LC("SRType_LSL",
30692                                                             CTy"SRType"),
30693                                                          LN 1]),
30694                                                    Let(Var("m2",
30695                                                            CTy"offset1"),
30696                                                        Call
30697                                                          ("register_form1",
30698                                                           CTy"offset1",
30699                                                           TP[Var("m",F4),
30700                                                              LC("SRType_LSL",
30701                                                                 CTy"SRType"),
30702                                                              LN 2]),
30703                                                        CS(Mop(Cast(FTy 3),
30704                                                               LL[bVar"b'11",
30705                                                                  bVar"b'10",
30706                                                                  bVar"b'9"]),
30707                                                           [(LW(0,3),
30708                                                             TP[Call
30709                                                                  ("Store",
30710                                                                   CTy"instruction",
30711                                                                   Call
30712                                                                     ("StoreWord",
30713                                                                      CTy"Store",
30714                                                                      TP[LT,
30715                                                                         LT,
30716                                                                         LF,
30717                                                                         Mop(Cast
30718                                                                               F4,
30719                                                                             Var("Rt",
30720                                                                                 FTy 3)),
30721                                                                         Mop(Cast
30722                                                                               F4,
30723                                                                             Var("Rn",
30724                                                                                 FTy 3)),
30725                                                                         Var("m2",
30726                                                                             CTy"offset1")])),
30727                                                                qVar"s"]),
30728                                                            (LW(1,3),
30729                                                             TP[Call
30730                                                                  ("Store",
30731                                                                   CTy"instruction",
30732                                                                   Call
30733                                                                     ("StoreHalf",
30734                                                                      CTy"Store",
30735                                                                      TP[LT,
30736                                                                         LT,
30737                                                                         LF,
30738                                                                         Mop(Cast
30739                                                                               F4,
30740                                                                             Var("Rt",
30741                                                                                 FTy 3)),
30742                                                                         Mop(Cast
30743                                                                               F4,
30744                                                                             Var("Rn",
30745                                                                                 FTy 3)),
30746                                                                         Var("m1",
30747                                                                             CTy"offset1")])),
30748                                                                qVar"s"]),
30749                                                            (LW(4,3),
30750                                                             TP[Call
30751                                                                  ("Load",
30752                                                                   CTy"instruction",
30753                                                                   Call
30754                                                                     ("LoadWord",
30755                                                                      CTy"Load",
30756                                                                      TP[LT,
30757                                                                         LT,
30758                                                                         LF,
30759                                                                         Mop(Cast
30760                                                                               F4,
30761                                                                             Var("Rt",
30762                                                                                 FTy 3)),
30763                                                                         Mop(Cast
30764                                                                               F4,
30765                                                                             Var("Rn",
30766                                                                                 FTy 3)),
30767                                                                         Var("m2",
30768                                                                             CTy"offset1")])),
30769                                                                qVar"s"]),
30770                                                            (LW(5,3),
30771                                                             TP[Call
30772                                                                  ("Load",
30773                                                                   CTy"instruction",
30774                                                                   Call
30775                                                                     ("LoadHalf",
30776                                                                      CTy"Load",
30777                                                                      TP[LT,
30778                                                                         LT,
30779                                                                         LT,
30780                                                                         LF,
30781                                                                         Mop(Cast
30782                                                                               F4,
30783                                                                             Var("Rt",
30784                                                                                 FTy 3)),
30785                                                                         Mop(Cast
30786                                                                               F4,
30787                                                                             Var("Rn",
30788                                                                                 FTy 3)),
30789                                                                         Var("m1",
30790                                                                             CTy"offset1")])),
30791                                                                qVar"s"]),
30792                                                            (LW(7,3),
30793                                                             TP[Call
30794                                                                  ("Load",
30795                                                                   CTy"instruction",
30796                                                                   Call
30797                                                                     ("LoadHalf",
30798                                                                      CTy"Load",
30799                                                                      TP[LF,
30800                                                                         LT,
30801                                                                         LT,
30802                                                                         LF,
30803                                                                         Mop(Cast
30804                                                                               F4,
30805                                                                             Var("Rt",
30806                                                                                 FTy 3)),
30807                                                                         Mop(Cast
30808                                                                               F4,
30809                                                                             Var("Rn",
30810                                                                                 FTy 3)),
30811                                                                         Var("m1",
30812                                                                             CTy"offset1")])),
30813                                                                qVar"s"]),
30814                                                            (AVar(FTy 3),
30815                                                             Apply
30816                                                               (Call
30817                                                                  ("DecodeThumb",
30818                                                                   ATy(qTy,
30819                                                                       PTy(CTy"instruction",
30820                                                                           qTy)),
30821                                                                   Var("h",
30822                                                                       F16)),
30823                                                                qVar"s"))])))),
30824                                            TP[Apply
30825                                                 (Call
30826                                                    ("Skip",
30827                                                     ATy(qTy,
30828                                                         CTy"instruction"),
30829                                                     LU),qVar"s"),qVar"s"])))))),
30830                       (Bop(And,bVar"b'15",
30831                            Bop(And,Mop(Not,bVar"b'12"),
30832                                Bop(And,Mop(Not,bVar"b'11"),
30833                                    Bop(And,Mop(Not,bVar"b'10"),
30834                                        Bop(And,Mop(Not,bVar"b'9"),
30835                                            Mop(Not,bVar"b'8")))))),
30836                        Let(TP[Var("v",F4),qVar"s"],
30837                            Apply
30838                              (Call
30839                                 ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
30840                               qVar"state"),
30841                            Let(TP[bVar"v",qVar"s"],
30842                                Apply
30843                                  (Call
30844                                     ("Do",ATy(qTy,PTy(bTy,qTy)),
30845                                      TP[Var("v",F4),LT]),qVar"s"),
30846                                ITE(bVar"v",
30847                                    TP[Call
30848                                         ("Branch",CTy"instruction",
30849                                          Call
30850                                            ("HandlerBranchParameter",
30851                                             CTy"Branch",
30852                                             TP[Mop(Cast F32,
30853                                                    Mop(Cast(FTy 3),
30854                                                        LL[bVar"b'7",
30855                                                           bVar"b'6",
30856                                                           bVar"b'5"])),
30857                                                Mop(Cast F32,
30858                                                    CC[Mop(Cast(FTy 5),
30859                                                           LL[bVar"b'4",
30860                                                              bVar"b'3",
30861                                                              bVar"b'2",
30862                                                              bVar"b'1",
30863                                                              bVar"b'0"]),
30864                                                       LW(0,5)])])),
30865                                       ITE(Bop(And,
30866                                               Apply
30867                                                 (Call
30868                                                    ("InITBlock",
30869                                                     ATy(qTy,bTy),LU),
30870                                                  qVar"s"),
30871                                               Mop(Not,
30872                                                   Apply
30873                                                     (Call
30874                                                        ("LastInITBlock",
30875                                                         ATy(qTy,bTy),LU),
30876                                                      qVar"s"))),
30877                                           Apply
30878                                             (Call
30879                                                ("DECODE_UNPREDICTABLE",
30880                                                 ATy(qTy,qTy),
30881                                                 TP[Var("mc",
30882                                                        CTy"MachineCode"),
30883                                                    LS
30884                                                     "HandlerBranchParameter"]),
30885                                              qVar"s"),qVar"s")],
30886                                    TP[Apply
30887                                         (Call
30888                                            ("Skip",
30889                                             ATy(qTy,CTy"instruction"),LU),
30890                                          qVar"s"),qVar"s"])))),
30891                       (Bop(And,bVar"b'15",
30892                            Bop(And,Mop(Not,bVar"b'12"),
30893                                Bop(And,Mop(Not,bVar"b'11"),
30894                                    Bop(And,Mop(Not,bVar"b'10"),
30895                                        Bop(And,Mop(Not,bVar"b'9"),
30896                                            bVar"b'8"))))),
30897                        TP[Call("Undefined",CTy"instruction",LW(0,32)),
30898                           qVar"state"]),
30899                       (Bop(And,bVar"b'15",
30900                            Bop(And,Mop(Not,bVar"b'12"),
30901                                Bop(And,Mop(Not,bVar"b'11"),
30902                                    Bop(And,Mop(Not,bVar"b'10"),bVar"b'9")))),
30903                        Let(TP[Var("v",F4),qVar"s"],
30904                            Apply
30905                              (Call
30906                                 ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
30907                               qVar"state"),
30908                            Let(TP[bVar"v",qVar"s"],
30909                                Apply
30910                                  (Call
30911                                     ("Do",ATy(qTy,PTy(bTy,qTy)),
30912                                      TP[Var("v",F4),LT]),qVar"s"),
30913                                ITE(bVar"v",
30914                                    TP[Call
30915                                         ("Branch",CTy"instruction",
30916                                          Call
30917                                            ("HandlerBranchLink",
30918                                             CTy"Branch",
30919                                             TP[EQ(Mop(Cast F1,
30920                                                       LL[bVar"b'8"]),
30921                                                   LW(1,1)),
30922                                                Mop(Cast F32,
30923                                                    CC[Mop(Cast F8,
30924                                                           LL[bVar"b'7",
30925                                                              bVar"b'6",
30926                                                              bVar"b'5",
30927                                                              bVar"b'4",
30928                                                              bVar"b'3",
30929                                                              bVar"b'2",
30930                                                              bVar"b'1",
30931                                                              bVar"b'0"]),
30932                                                       LW(0,5)])])),
30933                                       ITE(Bop(And,
30934                                               Apply
30935                                                 (Call
30936                                                    ("InITBlock",
30937                                                     ATy(qTy,bTy),LU),
30938                                                  qVar"s"),
30939                                               Mop(Not,
30940                                                   Apply
30941                                                     (Call
30942                                                        ("LastInITBlock",
30943                                                         ATy(qTy,bTy),LU),
30944                                                      qVar"s"))),
30945                                           Apply
30946                                             (Call
30947                                                ("DECODE_UNPREDICTABLE",
30948                                                 ATy(qTy,qTy),
30949                                                 TP[Var("mc",
30950                                                        CTy"MachineCode"),
30951                                                    LS"HandlerBranchLink"]),
30952                                              qVar"s"),qVar"s")],
30953                                    TP[Apply
30954                                         (Call
30955                                            ("Skip",
30956                                             ATy(qTy,CTy"instruction"),LU),
30957                                          qVar"s"),qVar"s"])))),
30958                       (Bop(And,bVar"b'15",
30959                            Bop(And,Mop(Not,bVar"b'12"),
30960                                Bop(And,Mop(Not,bVar"b'11"),bVar"b'10"))),
30961                        Let(TP[Var("v",F4),qVar"s"],
30962                            Apply
30963                              (Call
30964                                 ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
30965                               qVar"state"),
30966                            Let(TP[bVar"v",qVar"s"],
30967                                Apply
30968                                  (Call
30969                                     ("Do",ATy(qTy,PTy(bTy,qTy)),
30970                                      TP[Var("v",F4),LT]),qVar"s"),
30971                                ITE(bVar"v",
30972                                    TP[Call
30973                                         ("Branch",CTy"instruction",
30974                                          Call
30975                                            ("HandlerBranchLinkParameter",
30976                                             CTy"Branch",
30977                                             TP[Mop(Cast F32,
30978                                                    Mop(Cast(FTy 5),
30979                                                        LL[bVar"b'9",
30980                                                           bVar"b'8",
30981                                                           bVar"b'7",
30982                                                           bVar"b'6",
30983                                                           bVar"b'5"])),
30984                                                Mop(Cast F32,
30985                                                    CC[Mop(Cast(FTy 5),
30986                                                           LL[bVar"b'4",
30987                                                              bVar"b'3",
30988                                                              bVar"b'2",
30989                                                              bVar"b'1",
30990                                                              bVar"b'0"]),
30991                                                       LW(0,5)])])),
30992                                       ITE(Bop(And,
30993                                               Apply
30994                                                 (Call
30995                                                    ("InITBlock",
30996                                                     ATy(qTy,bTy),LU),
30997                                                  qVar"s"),
30998                                               Mop(Not,
30999                                                   Apply
31000                                                     (Call
31001                                                        ("LastInITBlock",
31002                                                         ATy(qTy,bTy),LU),
31003                                                      qVar"s"))),
31004                                           Apply
31005                                             (Call
31006                                                ("DECODE_UNPREDICTABLE",
31007                                                 ATy(qTy,qTy),
31008                                                 TP[Var("mc",
31009                                                        CTy"MachineCode"),
31010                                                    LS
31011                                                     "HandlerBranchLinkParameter"]),
31012                                              qVar"s"),qVar"s")],
31013                                    TP[Apply
31014                                         (Call
31015                                            ("Skip",
31016                                             ATy(qTy,CTy"instruction"),LU),
31017                                          qVar"s"),qVar"s"])))),
31018                       (Bop(And,bVar"b'15",
31019                            Bop(And,Mop(Not,bVar"b'12"),
31020                                Bop(And,bVar"b'11",
31021                                    Bop(And,Mop(Not,bVar"b'10"),
31022                                        Mop(Not,bVar"b'9"))))),
31023                        Let(TP[Var("v",F4),qVar"s"],
31024                            Apply
31025                              (Call
31026                                 ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
31027                               qVar"state"),
31028                            Let(TP[bVar"v",qVar"s"],
31029                                Apply
31030                                  (Call
31031                                     ("Do",ATy(qTy,PTy(bTy,qTy)),
31032                                      TP[Var("v",F4),LT]),qVar"s"),
31033                                TP[ITE(bVar"v",
31034                                       Call
31035                                         ("Load",CTy"instruction",
31036                                          Call
31037                                            ("LoadWord",CTy"Load",
31038                                             TP[LF,LT,LF,
31039                                                Mop(Cast F4,
31040                                                    Mop(Cast(FTy 3),
31041                                                        LL[bVar"b'2",
31042                                                           bVar"b'1",
31043                                                           bVar"b'0"])),
31044                                                Mop(Cast F4,
31045                                                    Mop(Cast(FTy 3),
31046                                                        LL[bVar"b'5",
31047                                                           bVar"b'4",
31048                                                           bVar"b'3"])),
31049                                                Call
31050                                                  ("immediate_form1",
31051                                                   CTy"offset1",
31052                                                   Mop(Cast F32,
31053                                                       CC[Mop(Cast(FTy 3),
31054                                                              LL[bVar"b'8",
31055                                                                 bVar"b'7",
31056                                                                 bVar"b'6"]),
31057                                                          LW(0,2)]))])),
31058                                       Apply
31059                                         (Call
31060                                            ("Skip",
31061                                             ATy(qTy,CTy"instruction"),LU),
31062                                          qVar"s")),qVar"s"]))),
31063                       (Bop(And,bVar"b'15",
31064                            Bop(And,Mop(Not,bVar"b'12"),
31065                                Bop(And,bVar"b'11",
31066                                    Bop(And,Mop(Not,bVar"b'10"),
31067                                        Bop(And,bVar"b'9",
31068                                            Mop(Not,bVar"b'8")))))),
31069                        Let(Var("Rm",F4),
31070                            Mop(Cast F4,
31071                                LL[bVar"b'6",bVar"b'5",bVar"b'4",bVar"b'3"]),
31072                            Let(TP[Var("v",F4),qVar"s"],
31073                                Apply
31074                                  (Call
31075                                     ("ThumbCondition",
31076                                      ATy(qTy,PTy(F4,qTy)),LU),qVar"state"),
31077                                Let(TP[bVar"v",qVar"s"],
31078                                    Apply
31079                                      (Call
31080                                         ("Do",ATy(qTy,PTy(bTy,qTy)),
31081                                          TP[Var("v",F4),LT]),qVar"s"),
31082                                    ITE(bVar"v",
31083                                        Let(Var("n",F4),
31084                                            CC[Mop(Cast F1,LL[bVar"b'7"]),
31085                                               Mop(Cast(FTy 3),
31086                                                   LL[bVar"b'2",bVar"b'1",
31087                                                      bVar"b'0"])],
31088                                            TP[Call
31089                                                 ("Branch",
31090                                                  CTy"instruction",
31091                                                  Call
31092                                                    ("CheckArray",
31093                                                     CTy"Branch",
31094                                                     TP[Var("Rm",F4),
31095                                                        Var("n",F4)])),
31096                                               ITE(Bop(Or,
31097                                                       EQ(Var("n",F4),
31098                                                          LW(15,4)),
31099                                                       Bop(In,
31100                                                           Var("Rm",F4),
31101                                                           SL[LW(13,4),
31102                                                              LW(15,4)])),
31103                                                   Apply
31104                                                     (Call
31105                                                        ("DECODE_UNPREDICTABLE",
31106                                                         ATy(qTy,qTy),
31107                                                         TP[Var("mc",
31108                                                                CTy"MachineCode"),
31109                                                            LS"CheckArray"]),
31110                                                      qVar"s"),qVar"s")]),
31111                                        TP[Apply
31112                                             (Call
31113                                                ("Skip",
31114                                                 ATy(qTy,CTy"instruction"),
31115                                                 LU),qVar"s"),qVar"s"]))))),
31116                       (Bop(And,bVar"b'15",
31117                            Bop(And,Mop(Not,bVar"b'12"),
31118                                Bop(And,bVar"b'11",
31119                                    Bop(And,Mop(Not,bVar"b'10"),
31120                                        Bop(And,bVar"b'9",bVar"b'8"))))),
31121                        Let(TP[Var("v",F4),qVar"s"],
31122                            Apply
31123                              (Call
31124                                 ("ThumbCondition",ATy(qTy,PTy(F4,qTy)),LU),
31125                               qVar"state"),
31126                            Let(TP[bVar"v",qVar"s"],
31127                                Apply
31128                                  (Call
31129                                     ("Do",ATy(qTy,PTy(bTy,qTy)),
31130                                      TP[Var("v",F4),LT]),qVar"s"),
31131                                TP[ITE(bVar"v",
31132                                       Call
31133                                         ("Load",CTy"instruction",
31134                                          Call
31135                                            ("LoadWord",CTy"Load",
31136                                             TP[LT,LT,LF,
31137                                                Mop(Cast F4,
31138                                                    Mop(Cast(FTy 3),
31139                                                        LL[bVar"b'2",
31140                                                           bVar"b'1",
31141                                                           bVar"b'0"])),
31142                                                LW(10,4),
31143                                                Call
31144                                                  ("immediate_form1",
31145                                                   CTy"offset1",
31146                                                   Mop(Cast F32,
31147                                                       CC[Mop(Cast(FTy 5),
31148                                                              LL[bVar"b'7",
31149                                                                 bVar"b'6",
31150                                                                 bVar"b'5",
31151                                                                 bVar"b'4",
31152                                                                 bVar"b'3"]),
31153                                                          LW(0,2)]))])),
31154                                       Apply
31155                                         (Call
31156                                            ("Skip",
31157                                             ATy(qTy,CTy"instruction"),LU),
31158                                          qVar"s")),qVar"s"]))),
31159                       (Bop(And,bVar"b'15",
31160                            Bop(And,Mop(Not,bVar"b'12"),
31161                                Bop(And,bVar"b'11",bVar"b'10"))),
31162                        Let(Var("Rt",FTy 3),
31163                            Mop(Cast(FTy 3),
31164                                LL[bVar"b'2",bVar"b'1",bVar"b'0"]),
31165                            Let(TP[Var("v",F4),qVar"s"],
31166                                Apply
31167                                  (Call
31168                                     ("ThumbCondition",
31169                                      ATy(qTy,PTy(F4,qTy)),LU),qVar"state"),
31170                                Let(TP[bVar"v",qVar"s"],
31171                                    Apply
31172                                      (Call
31173                                         ("Do",ATy(qTy,PTy(bTy,qTy)),
31174                                          TP[Var("v",F4),LT]),qVar"s"),
31175                                    TP[ITE(bVar"v",
31176                                           Let(Var("m",CTy"offset1"),
31177                                               Call
31178                                                 ("immediate_form1",
31179                                                  CTy"offset1",
31180                                                  Mop(Cast F32,
31181                                                      CC[Mop(Cast(FTy 6),
31182                                                             LL[bVar"b'8",
31183                                                                bVar"b'7",
31184                                                                bVar"b'6",
31185                                                                bVar"b'5",
31186                                                                bVar"b'4",
31187                                                                bVar"b'3"]),
31188                                                         LW(0,2)])),
31189                                               ITE(EQ(Mop(Cast F1,
31190                                                          LL[bVar"b'9"]),
31191                                                      LW(1,1)),
31192                                                   Call
31193                                                     ("Store",
31194                                                      CTy"instruction",
31195                                                      Call
31196                                                        ("StoreWord",
31197                                                         CTy"Store",
31198                                                         TP[LT,LT,LF,
31199                                                            Mop(Cast F4,
31200                                                                Var("Rt",
31201                                                                    FTy 3)),
31202                                                            LW(9,4),
31203                                                            Var("m",
31204                                                                CTy"offset1")])),
31205                                                   Call
31206                                                     ("Load",
31207                                                      CTy"instruction",
31208                                                      Call
31209                                                        ("LoadWord",
31210                                                         CTy"Load",
31211                                                         TP[LT,LT,LF,
31212                                                            Mop(Cast F4,
31213                                                                Var("Rt",
31214                                                                    FTy 3)),
31215                                                            LW(9,4),
31216                                                            Var("m",
31217                                                                CTy"offset1")])))),
31218                                           Apply
31219                                             (Call
31220                                                ("Skip",
31221                                                 ATy(qTy,CTy"instruction"),
31222                                                 LU),qVar"s")),qVar"s"]))))],
31223                      Apply
31224                        (Call
31225                           ("DecodeThumb",
31226                            ATy(qTy,PTy(CTy"instruction",qTy)),
31227                            Mop(Cast F16,
31228                                LL[bVar"b'15",bVar"b'14",bVar"b'13",
31229                                   bVar"b'12",bVar"b'11",bVar"b'10",
31230                                   bVar"b'9",bVar"b'8",bVar"b'7",
31231                                   bVar"b'6",bVar"b'5",bVar"b'4",
31232                                   bVar"b'3",bVar"b'2",bVar"b'1",bVar"b'0"])),
31233                         qVar"state")),
31234                  Apply
31235                    (Call
31236                       ("DecodeThumb",ATy(qTy,PTy(CTy"instruction",qTy)),
31237                        Mop(Cast F16,
31238                            LL[bVar"b'15",bVar"b'14",bVar"b'13",
31239                               bVar"b'12",bVar"b'11",bVar"b'10",bVar"b'9",
31240                               bVar"b'8",bVar"b'7",bVar"b'6",bVar"b'5",
31241                               bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
31242                               bVar"b'0"])),qVar"state"))))))
31243;
31244val DecodeThumb2_def = Def
31245  ("DecodeThumb2",Var("h",PTy(F16,F16)),
31246   Close
31247     (qVar"state",
31248      Let(Var("mc",CTy"MachineCode"),
31249          Call("Thumb2",CTy"MachineCode",Var("h",PTy(F16,F16))),
31250          Let(TP[TP[bVar"b'31",bVar"b'30",bVar"b'29",bVar"b'28",
31251                    bVar"b'27",bVar"b'26",bVar"b'25",bVar"b'24",
31252                    bVar"b'23",bVar"b'22",bVar"b'21",bVar"b'20",
31253                    bVar"b'19",bVar"b'18",bVar"b'17",bVar"b'16"],
31254                 bVar"b'15",bVar"b'14",bVar"b'13",bVar"b'12",bVar"b'11",
31255                 bVar"b'10",bVar"b'9",bVar"b'8",bVar"b'7",bVar"b'6",
31256                 bVar"b'5",bVar"b'4",bVar"b'3",bVar"b'2",bVar"b'1",
31257                 bVar"b'0"],
31258              TP[BL(16,Mop(Fst,Var("h",PTy(F16,F16)))),
31259                 BL(16,Mop(Snd,Var("h",PTy(F16,F16))))],
31260              ITB([(bVar"b'27",
31261                    ITB([(bVar"b'28",
31262                          ITB([(bVar"b'25",
31263                                ITE(Bop(And,bVar"b'31",
31264                                        Bop(And,bVar"b'30",
31265                                            Bop(And,bVar"b'29",
31266                                                Mop(Not,bVar"b'26")))),
31267                                    ITB([(Bop(And,Mop(Not,bVar"b'24"),
31268                                              Bop(And,Mop(Not,bVar"b'23"),
31269                                                  Bop(And,bVar"b'15",
31270                                                      Bop(And,bVar"b'14",
31271                                                          Bop(And,
31272                                                              bVar"b'13",
31273                                                              Bop(And,
31274                                                                  bVar"b'12",
31275                                                                  Bop(And,
31276                                                                      Mop(Not,
31277                                                                          bVar"b'7"),
31278                                                                      Bop(And,
31279                                                                          Mop(Not,
31280                                                                              bVar"b'6"),
31281                                                                          Bop(And,
31282                                                                              Mop(Not,
31283                                                                                  bVar"b'5"),
31284                                                                              Mop(Not,
31285                                                                                  bVar"b'4")))))))))),
31286                                          Let(Var("Rn",F4),
31287                                              Mop(Cast F4,
31288                                                  LL[bVar"b'19",
31289                                                     bVar"b'18",
31290                                                     bVar"b'17",bVar"b'16"]),
31291                                              Let(Var("Rm",F4),
31292                                                  Mop(Cast F4,
31293                                                      LL[bVar"b'3",
31294                                                         bVar"b'2",
31295                                                         bVar"b'1",
31296                                                         bVar"b'0"]),
31297                                                  Let(Var("Rd",F4),
31298                                                      Mop(Cast F4,
31299                                                          LL[bVar"b'11",
31300                                                             bVar"b'10",
31301                                                             bVar"b'9",
31302                                                             bVar"b'8"]),
31303                                                      Let(TP[Var("v",F4),
31304                                                             qVar"s"],
31305                                                          Apply
31306                                                            (Call
31307                                                               ("ThumbCondition",
31308                                                                ATy(qTy,
31309                                                                    PTy(F4,
31310                                                                        qTy)),
31311                                                                LU),
31312                                                             qVar"state"),
31313                                                          Let(TP[bVar"v",
31314                                                                 qVar"s"],
31315                                                              Apply
31316                                                                (Call
31317                                                                   ("Do",
31318                                                                    ATy(qTy,
31319                                                                        PTy(bTy,
31320                                                                            qTy)),
31321                                                                    TP[Var("v",
31322                                                                           F4),
31323                                                                       Apply
31324                                                                         (Call
31325                                                                            ("HaveThumb2",
31326                                                                             ATy(qTy,
31327                                                                                 bTy),
31328                                                                             LU),
31329                                                                          qVar"s")]),
31330                                                                 qVar"s"),
31331                                                              ITE(bVar"v",
31332                                                                  TP[Call
31333                                                                       ("Data",
31334                                                                        CTy"instruction",
31335                                                                        Call
31336                                                                          ("ShiftRegister",
31337                                                                           CTy"Data",
31338                                                                           TP[LF,
31339                                                                              EQ(Mop(Cast
31340                                                                                       F1,
31341                                                                                     LL[bVar"b'20"]),
31342                                                                                 LW(1,
31343                                                                                    1)),
31344                                                                              Var("Rd",
31345                                                                                  F4),
31346                                                                              Var("Rn",
31347                                                                                  F4),
31348                                                                              Call
31349                                                                                ("DecodeRegShift",
31350                                                                                 CTy"SRType",
31351                                                                                 Mop(Cast
31352                                                                                       (FTy 2),
31353                                                                                     LL[bVar"b'22",
31354                                                                                        bVar"b'21"])),
31355                                                                              Var("Rm",
31356                                                                                  F4)])),
31357                                                                     ITE(Bop(Or,
31358                                                                             Bop(In,
31359                                                                                 Var("Rd",
31360                                                                                     F4),
31361                                                                                 SL[LW(13,
31362                                                                                       4),
31363                                                                                    LW(15,
31364                                                                                       4)]),
31365                                                                             Bop(Or,
31366                                                                                 Bop(In,
31367                                                                                     Var("Rn",
31368                                                                                         F4),
31369                                                                                     SL[LW(13,
31370                                                                                           4),
31371                                                                                        LW(15,
31372                                                                                           4)]),
31373                                                                                 Bop(In,
31374                                                                                     Var("Rm",
31375                                                                                         F4),
31376                                                                                     SL[LW(13,
31377                                                                                           4),
31378                                                                                        LW(15,
31379                                                                                           4)]))),
31380                                                                         Apply
31381                                                                           (Call
31382                                                                              ("DECODE_UNPREDICTABLE",
31383                                                                               ATy(qTy,
31384                                                                                   qTy),
31385                                                                               TP[Var("mc",
31386                                                                                      CTy"MachineCode"),
31387                                                                                  LS
31388                                                                                   "Shift (register)"]),
31389                                                                            qVar"s"),
31390                                                                         qVar"s")],
31391                                                                  TP[Apply
31392                                                                       (Call
31393                                                                          ("Skip",
31394                                                                           ATy(qTy,
31395                                                                               CTy"instruction"),
31396                                                                           LU),
31397                                                                        qVar"s"),
31398                                                                     qVar"s"]))))))),
31399                                         (Bop(And,Mop(Not,bVar"b'24"),
31400                                              Bop(And,Mop(Not,bVar"b'23"),
31401                                                  Bop(And,bVar"b'15",
31402                                                      Bop(And,bVar"b'14",
31403                                                          Bop(And,
31404                                                              bVar"b'13",
31405                                                              Bop(And,
31406                                                                  bVar"b'12",
31407                                                                  bVar"b'7")))))),
31408                                          Let(Var("Rn",F4),
31409                                              Mop(Cast F4,
31410                                                  LL[bVar"b'19",
31411                                                     bVar"b'18",
31412                                                     bVar"b'17",bVar"b'16"]),
31413                                              Let(Var("Rm",F4),
31414                                                  Mop(Cast F4,
31415                                                      LL[bVar"b'3",
31416                                                         bVar"b'2",
31417                                                         bVar"b'1",
31418                                                         bVar"b'0"]),
31419                                                  Let(Var("Rd",F4),
31420                                                      Mop(Cast F4,
31421                                                          LL[bVar"b'11",
31422                                                             bVar"b'10",
31423                                                             bVar"b'9",
31424                                                             bVar"b'8"]),
31425                                                      Let(TP[Var("v",F4),
31426                                                             qVar"s"],
31427                                                          Apply
31428                                                            (Call
31429                                                               ("ThumbCondition",
31430                                                                ATy(qTy,
31431                                                                    PTy(F4,
31432                                                                        qTy)),
31433                                                                LU),
31434                                                             qVar"state"),
31435                                                          Let(TP[bVar"v",
31436                                                                 qVar"s"],
31437                                                              Apply
31438                                                                (Call
31439                                                                   ("Do",
31440                                                                    ATy(qTy,
31441                                                                        PTy(bTy,
31442                                                                            qTy)),
31443                                                                    TP[Var("v",
31444                                                                           F4),
31445                                                                       Apply
31446                                                                         (Call
31447                                                                            ("HaveThumb2",
31448                                                                             ATy(qTy,
31449                                                                                 bTy),
31450                                                                             LU),
31451                                                                          qVar"s")]),
31452                                                                 qVar"s"),
31453                                                              ITE(bVar"v",
31454                                                                  TP[Let(TP[bVar"args0",
31455                                                                            nVar"args4"],
31456                                                                         TP[EQ(Mop(Cast
31457                                                                                     F1,
31458                                                                                   LL[bVar"b'20"]),
31459                                                                               LW(1,
31460                                                                                  1)),
31461                                                                            Mop(Cast
31462                                                                                  nTy,
31463                                                                                CC[Mop(Cast
31464                                                                                         (FTy 2),
31465                                                                                       LL[bVar"b'5",
31466                                                                                          bVar"b'4"]),
31467                                                                                   LW(0,
31468                                                                                      3)])],
31469                                                                         CS(Mop(Cast
31470                                                                                  (FTy 2),
31471                                                                                LL[bVar"b'22",
31472                                                                                   bVar"b'21"]),
31473                                                                            [(LW(0,
31474                                                                                 2),
31475                                                                              Call
31476                                                                                ("Media",
31477                                                                                 CTy"instruction",
31478                                                                                 Call
31479                                                                                   ("ExtendHalfword",
31480                                                                                    CTy"Media",
31481                                                                                    TP[bVar"args0",
31482                                                                                       Var("Rd",
31483                                                                                           F4),
31484                                                                                       Var("Rn",
31485                                                                                           F4),
31486                                                                                       Var("Rm",
31487                                                                                           F4),
31488                                                                                       nVar"args4"]))),
31489                                                                             (LW(1,
31490                                                                                 2),
31491                                                                              Call
31492                                                                                ("Media",
31493                                                                                 CTy"instruction",
31494                                                                                 Call
31495                                                                                   ("ExtendByte16",
31496                                                                                    CTy"Media",
31497                                                                                    TP[bVar"args0",
31498                                                                                       Var("Rd",
31499                                                                                           F4),
31500                                                                                       Var("Rn",
31501                                                                                           F4),
31502                                                                                       Var("Rm",
31503                                                                                           F4),
31504                                                                                       nVar"args4"]))),
31505                                                                             (LW(2,
31506                                                                                 2),
31507                                                                              Call
31508                                                                                ("Media",
31509                                                                                 CTy"instruction",
31510                                                                                 Call
31511                                                                                   ("ExtendByte",
31512                                                                                    CTy"Media",
31513                                                                                    TP[bVar"args0",
31514                                                                                       Var("Rd",
31515                                                                                           F4),
31516                                                                                       Var("Rn",
31517                                                                                           F4),
31518                                                                                       Var("Rm",
31519                                                                                           F4),
31520                                                                                       nVar"args4"]))),
31521                                                                             (LW(3,
31522                                                                                 2),
31523                                                                              Call
31524                                                                                ("Undefined",
31525                                                                                 CTy"instruction",
31526                                                                                 LW(0,
31527                                                                                    32)))])),
31528                                                                     ITE(Bop(Or,
31529                                                                             Bop(In,
31530                                                                                 Var("Rd",
31531                                                                                     F4),
31532                                                                                 SL[LW(13,
31533                                                                                       4),
31534                                                                                    LW(15,
31535                                                                                       4)]),
31536                                                                             Bop(Or,
31537                                                                                 EQ(Var("Rn",
31538                                                                                        F4),
31539                                                                                    LW(13,
31540                                                                                       4)),
31541                                                                                 Bop(Or,
31542                                                                                     Bop(In,
31543                                                                                         Var("Rm",
31544                                                                                             F4),
31545                                                                                         SL[LW(13,
31546                                                                                               4),
31547                                                                                            LW(15,
31548                                                                                               4)]),
31549                                                                                     Mop(Not,
31550                                                                                         EQ(Mop(Cast
31551                                                                                                  F1,
31552                                                                                                LL[bVar"b'6"]),
31553                                                                                            LW(0,
31554                                                                                               1)))))),
31555                                                                         Apply
31556                                                                           (Call
31557                                                                              ("DECODE_UNPREDICTABLE",
31558                                                                               ATy(qTy,
31559                                                                                   qTy),
31560                                                                               TP[Var("mc",
31561                                                                                      CTy"MachineCode"),
31562                                                                                  LS
31563                                                                                   "Extend (register)"]),
31564                                                                            qVar"s"),
31565                                                                         qVar"s")],
31566                                                                  TP[Apply
31567                                                                       (Call
31568                                                                          ("Skip",
31569                                                                           ATy(qTy,
31570                                                                               CTy"instruction"),
31571                                                                           LU),
31572                                                                        qVar"s"),
31573                                                                     qVar"s"]))))))),
31574                                         (Bop(And,Mop(Not,bVar"b'24"),
31575                                              Bop(And,bVar"b'23",
31576                                                  Bop(And,bVar"b'15",
31577                                                      Bop(And,bVar"b'14",
31578                                                          Bop(And,
31579                                                              bVar"b'13",
31580                                                              Bop(And,
31581                                                                  bVar"b'12",
31582                                                                  Mop(Not,
31583                                                                      bVar"b'7"))))))),
31584                                          Let(Var("Rn",F4),
31585                                              Mop(Cast F4,
31586                                                  LL[bVar"b'19",
31587                                                     bVar"b'18",
31588                                                     bVar"b'17",bVar"b'16"]),
31589                                              Let(Var("Rm",F4),
31590                                                  Mop(Cast F4,
31591                                                      LL[bVar"b'3",
31592                                                         bVar"b'2",
31593                                                         bVar"b'1",
31594                                                         bVar"b'0"]),
31595                                                  Let(Var("Rd",F4),
31596                                                      Mop(Cast F4,
31597                                                          LL[bVar"b'11",
31598                                                             bVar"b'10",
31599                                                             bVar"b'9",
31600                                                             bVar"b'8"]),
31601                                                      Let(TP[Var("v",F4),
31602                                                             qVar"s"],
31603                                                          Apply
31604                                                            (Call
31605                                                               ("ThumbCondition",
31606                                                                ATy(qTy,
31607                                                                    PTy(F4,
31608                                                                        qTy)),
31609                                                                LU),
31610                                                             qVar"state"),
31611                                                          Let(TP[bVar"v",
31612                                                                 qVar"s"],
31613                                                              Apply
31614                                                                (Call
31615                                                                   ("Do",
31616                                                                    ATy(qTy,
31617                                                                        PTy(bTy,
31618                                                                            qTy)),
31619                                                                    TP[Var("v",
31620                                                                           F4),
31621                                                                       Apply
31622                                                                         (Call
31623                                                                            ("HaveThumb2",
31624                                                                             ATy(qTy,
31625                                                                                 bTy),
31626                                                                             LU),
31627                                                                          qVar"s")]),
31628                                                                 qVar"s"),
31629                                                              ITE(bVar"v",
31630                                                                  TP[Call
31631                                                                       ("DecodeParallelAdditionSubtraction",
31632                                                                        CTy"instruction",
31633                                                                        TP[Bop(Add,
31634                                                                               Mop(Cast
31635                                                                                     (FTy 2),
31636                                                                                   LL[bVar"b'5",
31637                                                                                      bVar"b'4"]),
31638                                                                               LW(1,
31639                                                                                  2)),
31640                                                                           CS(Mop(Cast
31641                                                                                    (FTy 3),
31642                                                                                  LL[bVar"b'22",
31643                                                                                     bVar"b'21",
31644                                                                                     bVar"b'20"]),
31645                                                                              [(LW(1,
31646                                                                                   3),
31647                                                                                LW(0,
31648                                                                                   3)),
31649                                                                               (LW(2,
31650                                                                                   3),
31651                                                                                LW(1,
31652                                                                                   3)),
31653                                                                               (LW(6,
31654                                                                                   3),
31655                                                                                LW(2,
31656                                                                                   3)),
31657                                                                               (LW(5,
31658                                                                                   3),
31659                                                                                LW(3,
31660                                                                                   3)),
31661                                                                               (LW(0,
31662                                                                                   3),
31663                                                                                LW(4,
31664                                                                                   3)),
31665                                                                               (LW(4,
31666                                                                                   3),
31667                                                                                LW(7,
31668                                                                                   3)),
31669                                                                               (AVar
31670                                                                                  (FTy 3),
31671                                                                                LW(5,
31672                                                                                   3))]),
31673                                                                           Mop(Cast
31674                                                                                 F1,
31675                                                                               LL[bVar"b'6"]),
31676                                                                           Var("Rd",
31677                                                                               F4),
31678                                                                           Var("Rn",
31679                                                                               F4),
31680                                                                           Var("Rm",
31681                                                                               F4)]),
31682                                                                     ITE(Bop(Or,
31683                                                                             Bop(In,
31684                                                                                 Var("Rd",
31685                                                                                     F4),
31686                                                                                 SL[LW(13,
31687                                                                                       4),
31688                                                                                    LW(15,
31689                                                                                       4)]),
31690                                                                             Bop(Or,
31691                                                                                 Bop(In,
31692                                                                                     Var("Rn",
31693                                                                                         F4),
31694                                                                                     SL[LW(13,
31695                                                                                           4),
31696                                                                                        LW(15,
31697                                                                                           4)]),
31698                                                                                 Bop(In,
31699                                                                                     Var("Rm",
31700                                                                                         F4),
31701                                                                                     SL[LW(13,
31702                                                                                           4),
31703                                                                                        LW(15,
31704                                                                                           4)]))),
31705                                                                         Apply
31706                                                                           (Call
31707                                                                              ("DECODE_UNPREDICTABLE",
31708                                                                               ATy(qTy,
31709                                                                                   qTy),
31710                                                                               TP[Var("mc",
31711                                                                                      CTy"MachineCode"),
31712                                                                                  LS
31713                                                                                   "Parallel addition and subtraction"]),
31714                                                                            qVar"s"),
31715                                                                         qVar"s")],
31716                                                                  TP[Apply
31717                                                                       (Call
31718                                                                          ("Skip",
31719                                                                           ATy(qTy,
31720                                                                               CTy"instruction"),
31721                                                                           LU),
31722                                                                        qVar"s"),
31723                                                                     qVar"s"]))))))),
31724                                         (Bop(And,Mop(Not,bVar"b'24"),
31725                                              Bop(And,bVar"b'23",
31726                                                  Bop(And,
31727                                                      Mop(Not,bVar"b'22"),
31728                                                      Bop(And,
31729                                                          Mop(Not,
31730                                                              bVar"b'21"),
31731                                                          Bop(And,
31732                                                              Mop(Not,
31733                                                                  bVar"b'20"),
31734                                                              Bop(And,
31735                                                                  bVar"b'15",
31736                                                                  Bop(And,
31737                                                                      bVar"b'14",
31738                                                                      Bop(And,
31739                                                                          bVar"b'13",
31740                                                                          Bop(And,
31741                                                                              bVar"b'12",
31742                                                                              Bop(And,
31743                                                                                  bVar"b'7",
31744                                                                                  Mop(Not,
31745                                                                                      bVar"b'6"))))))))))),
31746                                          Let(Var("Rn",F4),
31747                                              Mop(Cast F4,
31748                                                  LL[bVar"b'19",
31749                                                     bVar"b'18",
31750                                                     bVar"b'17",bVar"b'16"]),
31751                                              Let(Var("Rm",F4),
31752                                                  Mop(Cast F4,
31753                                                      LL[bVar"b'3",
31754                                                         bVar"b'2",
31755                                                         bVar"b'1",
31756                                                         bVar"b'0"]),
31757                                                  Let(Var("Rd",F4),
31758                                                      Mop(Cast F4,
31759                                                          LL[bVar"b'11",
31760                                                             bVar"b'10",
31761                                                             bVar"b'9",
31762                                                             bVar"b'8"]),
31763                                                      Let(TP[Var("v",F4),
31764                                                             qVar"s"],
31765                                                          Apply
31766                                                            (Call
31767                                                               ("ThumbCondition",
31768                                                                ATy(qTy,
31769                                                                    PTy(F4,
31770                                                                        qTy)),
31771                                                                LU),
31772                                                             qVar"state"),
31773                                                          Let(TP[bVar"v",
31774                                                                 qVar"s"],
31775                                                              Apply
31776                                                                (Call
31777                                                                   ("Do",
31778                                                                    ATy(qTy,
31779                                                                        PTy(bTy,
31780                                                                            qTy)),
31781                                                                    TP[Var("v",
31782                                                                           F4),
31783                                                                       Apply
31784                                                                         (Call
31785                                                                            ("HaveThumb2",
31786                                                                             ATy(qTy,
31787                                                                                 bTy),
31788                                                                             LU),
31789                                                                          qVar"s")]),
31790                                                                 qVar"s"),
31791                                                              ITE(bVar"v",
31792                                                                  TP[Call
31793                                                                       ("Media",
31794                                                                        CTy"instruction",
31795                                                                        Call
31796                                                                          ("SaturatingAddSubtract",
31797                                                                           CTy"Media",
31798                                                                           TP[Mop(Rev,
31799                                                                                  Mop(Cast
31800                                                                                        (FTy 2),
31801                                                                                      LL[bVar"b'5",
31802                                                                                         bVar"b'4"])),
31803                                                                              Var("Rd",
31804                                                                                  F4),
31805                                                                              Var("Rm",
31806                                                                                  F4),
31807                                                                              Var("Rn",
31808                                                                                  F4)])),
31809                                                                     ITE(Bop(Or,
31810                                                                             Bop(In,
31811                                                                                 Var("Rd",
31812                                                                                     F4),
31813                                                                                 SL[LW(13,
31814                                                                                       4),
31815                                                                                    LW(15,
31816                                                                                       4)]),
31817                                                                             Bop(Or,
31818                                                                                 Bop(In,
31819                                                                                     Var("Rn",
31820                                                                                         F4),
31821                                                                                     SL[LW(13,
31822                                                                                           4),
31823                                                                                        LW(15,
31824                                                                                           4)]),
31825                                                                                 Bop(In,
31826                                                                                     Var("Rm",
31827                                                                                         F4),
31828                                                                                     SL[LW(13,
31829                                                                                           4),
31830                                                                                        LW(15,
31831                                                                                           4)]))),
31832                                                                         Apply
31833                                                                           (Call
31834                                                                              ("DECODE_UNPREDICTABLE",
31835                                                                               ATy(qTy,
31836                                                                                   qTy),
31837                                                                               TP[Var("mc",
31838                                                                                      CTy"MachineCode"),
31839                                                                                  LS
31840                                                                                   "SaturatingAddSubtract"]),
31841                                                                            qVar"s"),
31842                                                                         qVar"s")],
31843                                                                  TP[Apply
31844                                                                       (Call
31845                                                                          ("Skip",
31846                                                                           ATy(qTy,
31847                                                                               CTy"instruction"),
31848                                                                           LU),
31849                                                                        qVar"s"),
31850                                                                     qVar"s"]))))))),
31851                                         (Bop(And,Mop(Not,bVar"b'24"),
31852                                              Bop(And,bVar"b'23",
31853                                                  Bop(And,
31854                                                      Mop(Not,bVar"b'22"),
31855                                                      Bop(And,
31856                                                          Mop(Not,
31857                                                              bVar"b'21"),
31858                                                          Bop(And,
31859                                                              bVar"b'20",
31860                                                              Bop(And,
31861                                                                  bVar"b'15",
31862                                                                  Bop(And,
31863                                                                      bVar"b'14",
31864                                                                      Bop(And,
31865                                                                          bVar"b'13",
31866                                                                          Bop(And,
31867                                                                              bVar"b'12",
31868                                                                              Bop(And,
31869                                                                                  bVar"b'7",
31870                                                                                  Mop(Not,
31871                                                                                      bVar"b'6"))))))))))),
31872                                          Let(Var("Rm",F4),
31873                                              Mop(Cast F4,
31874                                                  LL[bVar"b'3",bVar"b'2",
31875                                                     bVar"b'1",bVar"b'0"]),
31876                                              Let(Var("Rd",F4),
31877                                                  Mop(Cast F4,
31878                                                      LL[bVar"b'11",
31879                                                         bVar"b'10",
31880                                                         bVar"b'9",
31881                                                         bVar"b'8"]),
31882                                                  Let(TP[Var("v",F4),
31883                                                         qVar"s"],
31884                                                      Apply
31885                                                        (Call
31886                                                           ("ThumbCondition",
31887                                                            ATy(qTy,
31888                                                                PTy(F4,qTy)),
31889                                                            LU),
31890                                                         qVar"state"),
31891                                                      Let(TP[bVar"v",
31892                                                             qVar"s"],
31893                                                          Apply
31894                                                            (Call
31895                                                               ("Do",
31896                                                                ATy(qTy,
31897                                                                    PTy(bTy,
31898                                                                        qTy)),
31899                                                                TP[Var("v",
31900                                                                       F4),
31901                                                                   Apply
31902                                                                     (Call
31903                                                                        ("HaveThumb2",
31904                                                                         ATy(qTy,
31905                                                                             bTy),
31906                                                                         LU),
31907                                                                      qVar"s")]),
31908                                                             qVar"s"),
31909                                                          ITE(bVar"v",
31910                                                              TP[CS(Mop(Cast
31911                                                                          (FTy 2),
31912                                                                        LL[bVar"b'5",
31913                                                                           bVar"b'4"]),
31914                                                                    [(LW(0,
31915                                                                         2),
31916                                                                      Call
31917                                                                        ("Media",
31918                                                                         CTy"instruction",
31919                                                                         Call
31920                                                                           ("ByteReverse",
31921                                                                            CTy"Media",
31922                                                                            TP[Var("Rd",
31923                                                                                   F4),
31924                                                                               Var("Rm",
31925                                                                                   F4)]))),
31926                                                                     (LW(1,
31927                                                                         2),
31928                                                                      Call
31929                                                                        ("Media",
31930                                                                         CTy"instruction",
31931                                                                         Call
31932                                                                           ("ByteReversePackedHalfword",
31933                                                                            CTy"Media",
31934                                                                            TP[Var("Rd",
31935                                                                                   F4),
31936                                                                               Var("Rm",
31937                                                                                   F4)]))),
31938                                                                     (LW(2,
31939                                                                         2),
31940                                                                      Call
31941                                                                        ("Media",
31942                                                                         CTy"instruction",
31943                                                                         Call
31944                                                                           ("ReverseBits",
31945                                                                            CTy"Media",
31946                                                                            TP[Var("Rd",
31947                                                                                   F4),
31948                                                                               Var("Rm",
31949                                                                                   F4)]))),
31950                                                                     (LW(3,
31951                                                                         2),
31952                                                                      Call
31953                                                                        ("Media",
31954                                                                         CTy"instruction",
31955                                                                         Call
31956                                                                           ("ByteReverseSignedHalfword",
31957                                                                            CTy"Media",
31958                                                                            TP[Var("Rd",
31959                                                                                   F4),
31960                                                                               Var("Rm",
31961                                                                                   F4)])))]),
31962                                                                 ITE(Bop(Or,
31963                                                                         Mop(Not,
31964                                                                             EQ(Mop(Cast
31965                                                                                      F4,
31966                                                                                    LL[bVar"b'19",
31967                                                                                       bVar"b'18",
31968                                                                                       bVar"b'17",
31969                                                                                       bVar"b'16"]),
31970                                                                                Var("Rm",
31971                                                                                    F4))),
31972                                                                         Bop(Or,
31973                                                                             Bop(In,
31974                                                                                 Var("Rd",
31975                                                                                     F4),
31976                                                                                 SL[LW(13,
31977                                                                                       4),
31978                                                                                    LW(15,
31979                                                                                       4)]),
31980                                                                             Bop(In,
31981                                                                                 Var("Rm",
31982                                                                                     F4),
31983                                                                                 SL[LW(13,
31984                                                                                       4),
31985                                                                                    LW(15,
31986                                                                                       4)]))),
31987                                                                     Apply
31988                                                                       (Call
31989                                                                          ("DECODE_UNPREDICTABLE",
31990                                                                           ATy(qTy,
31991                                                                               qTy),
31992                                                                           TP[Var("mc",
31993                                                                                  CTy"MachineCode"),
31994                                                                              LS
31995                                                                               "Reverses"]),
31996                                                                        qVar"s"),
31997                                                                     qVar"s")],
31998                                                              TP[Apply
31999                                                                   (Call
32000                                                                      ("Skip",
32001                                                                       ATy(qTy,
32002                                                                           CTy"instruction"),
32003                                                                       LU),
32004                                                                    qVar"s"),
32005                                                                 qVar"s"])))))),
32006                                         (Bop(And,Mop(Not,bVar"b'24"),
32007                                              Bop(And,bVar"b'23",
32008                                                  Bop(And,
32009                                                      Mop(Not,bVar"b'22"),
32010                                                      Bop(And,bVar"b'21",
32011                                                          Bop(And,
32012                                                              Mop(Not,
32013                                                                  bVar"b'20"),
32014                                                              Bop(And,
32015                                                                  bVar"b'15",
32016                                                                  Bop(And,
32017                                                                      bVar"b'14",
32018                                                                      Bop(And,
32019                                                                          bVar"b'13",
32020                                                                          Bop(And,
32021                                                                              bVar"b'12",
32022                                                                              Bop(And,
32023                                                                                  bVar"b'7",
32024                                                                                  Bop(And,
32025                                                                                      Mop(Not,
32026                                                                                          bVar"b'6"),
32027                                                                                      Bop(And,
32028                                                                                          Mop(Not,
32029                                                                                              bVar"b'5"),
32030                                                                                          Mop(Not,
32031                                                                                              bVar"b'4"))))))))))))),
32032                                          Let(Var("Rn",F4),
32033                                              Mop(Cast F4,
32034                                                  LL[bVar"b'19",
32035                                                     bVar"b'18",
32036                                                     bVar"b'17",bVar"b'16"]),
32037                                              Let(Var("Rm",F4),
32038                                                  Mop(Cast F4,
32039                                                      LL[bVar"b'3",
32040                                                         bVar"b'2",
32041                                                         bVar"b'1",
32042                                                         bVar"b'0"]),
32043                                                  Let(Var("Rd",F4),
32044                                                      Mop(Cast F4,
32045                                                          LL[bVar"b'11",
32046                                                             bVar"b'10",
32047                                                             bVar"b'9",
32048                                                             bVar"b'8"]),
32049                                                      Let(TP[Var("v",F4),
32050                                                             qVar"s"],
32051                                                          Apply
32052                                                            (Call
32053                                                               ("ThumbCondition",
32054                                                                ATy(qTy,
32055                                                                    PTy(F4,
32056                                                                        qTy)),
32057                                                                LU),
32058                                                             qVar"state"),
32059                                                          Let(TP[bVar"v",
32060                                                                 qVar"s"],
32061                                                              Apply
32062                                                                (Call
32063                                                                   ("Do",
32064                                                                    ATy(qTy,
32065                                                                        PTy(bTy,
32066                                                                            qTy)),
32067                                                                    TP[Var("v",
32068                                                                           F4),
32069                                                                       Apply
32070                                                                         (Call
32071                                                                            ("HaveThumb2",
32072                                                                             ATy(qTy,
32073                                                                                 bTy),
32074                                                                             LU),
32075                                                                          qVar"s")]),
32076                                                                 qVar"s"),
32077                                                              ITE(bVar"v",
32078                                                                  TP[Call
32079                                                                       ("Media",
32080                                                                        CTy"instruction",
32081                                                                        Call
32082                                                                          ("SelectBytes",
32083                                                                           CTy"Media",
32084                                                                           TP[Var("Rd",
32085                                                                                  F4),
32086                                                                              Var("Rn",
32087                                                                                  F4),
32088                                                                              Var("Rm",
32089                                                                                  F4)])),
32090                                                                     ITE(Bop(Or,
32091                                                                             Bop(In,
32092                                                                                 Var("Rd",
32093                                                                                     F4),
32094                                                                                 SL[LW(13,
32095                                                                                       4),
32096                                                                                    LW(15,
32097                                                                                       4)]),
32098                                                                             Bop(Or,
32099                                                                                 Bop(In,
32100                                                                                     Var("Rn",
32101                                                                                         F4),
32102                                                                                     SL[LW(13,
32103                                                                                           4),
32104                                                                                        LW(15,
32105                                                                                           4)]),
32106                                                                                 Bop(In,
32107                                                                                     Var("Rm",
32108                                                                                         F4),
32109                                                                                     SL[LW(13,
32110                                                                                           4),
32111                                                                                        LW(15,
32112                                                                                           4)]))),
32113                                                                         Apply
32114                                                                           (Call
32115                                                                              ("DECODE_UNPREDICTABLE",
32116                                                                               ATy(qTy,
32117                                                                                   qTy),
32118                                                                               TP[Var("mc",
32119                                                                                      CTy"MachineCode"),
32120                                                                                  LS
32121                                                                                   "SelectBytes"]),
32122                                                                            qVar"s"),
32123                                                                         qVar"s")],
32124                                                                  TP[Apply
32125                                                                       (Call
32126                                                                          ("Skip",
32127                                                                           ATy(qTy,
32128                                                                               CTy"instruction"),
32129                                                                           LU),
32130                                                                        qVar"s"),
32131                                                                     qVar"s"]))))))),
32132                                         (Bop(And,Mop(Not,bVar"b'24"),
32133                                              Bop(And,bVar"b'23",
32134                                                  Bop(And,
32135                                                      Mop(Not,bVar"b'22"),
32136                                                      Bop(And,bVar"b'21",
32137                                                          Bop(And,
32138                                                              bVar"b'20",
32139                                                              Bop(And,
32140                                                                  bVar"b'15",
32141                                                                  Bop(And,
32142                                                                      bVar"b'14",
32143                                                                      Bop(And,
32144                                                                          bVar"b'13",
32145                                                                          Bop(And,
32146                                                                              bVar"b'12",
32147                                                                              Bop(And,
32148                                                                                  bVar"b'7",
32149                                                                                  Bop(And,
32150                                                                                      Mop(Not,
32151                                                                                          bVar"b'6"),
32152                                                                                      Bop(And,
32153                                                                                          Mop(Not,
32154                                                                                              bVar"b'5"),
32155                                                                                          Mop(Not,
32156                                                                                              bVar"b'4"))))))))))))),
32157                                          Let(Var("Rm",F4),
32158                                              Mop(Cast F4,
32159                                                  LL[bVar"b'3",bVar"b'2",
32160                                                     bVar"b'1",bVar"b'0"]),
32161                                              Let(Var("Rd",F4),
32162                                                  Mop(Cast F4,
32163                                                      LL[bVar"b'11",
32164                                                         bVar"b'10",
32165                                                         bVar"b'9",
32166                                                         bVar"b'8"]),
32167                                                  Let(TP[Var("v",F4),
32168                                                         qVar"s"],
32169                                                      Apply
32170                                                        (Call
32171                                                           ("ThumbCondition",
32172                                                            ATy(qTy,
32173                                                                PTy(F4,qTy)),
32174                                                            LU),
32175                                                         qVar"state"),
32176                                                      Let(TP[bVar"v",
32177                                                             qVar"s"],
32178                                                          Apply
32179                                                            (Call
32180                                                               ("Do",
32181                                                                ATy(qTy,
32182                                                                    PTy(bTy,
32183                                                                        qTy)),
32184                                                                TP[Var("v",
32185                                                                       F4),
32186                                                                   Apply
32187                                                                     (Call
32188                                                                        ("HaveThumb2",
32189                                                                         ATy(qTy,
32190                                                                             bTy),
32191                                                                         LU),
32192                                                                      qVar"s")]),
32193                                                             qVar"s"),
32194                                                          ITE(bVar"v",
32195                                                              TP[Call
32196                                                                   ("Data",
32197                                                                    CTy"instruction",
32198                                                                    Call
32199                                                                      ("CountLeadingZeroes",
32200                                                                       CTy"Data",
32201                                                                       TP[Var("Rd",
32202                                                                              F4),
32203                                                                          Var("Rm",
32204                                                                              F4)])),
32205                                                                 ITE(Bop(Or,
32206                                                                         Mop(Not,
32207                                                                             EQ(Mop(Cast
32208                                                                                      F4,
32209                                                                                    LL[bVar"b'19",
32210                                                                                       bVar"b'18",
32211                                                                                       bVar"b'17",
32212                                                                                       bVar"b'16"]),
32213                                                                                Var("Rm",
32214                                                                                    F4))),
32215                                                                         Bop(Or,
32216                                                                             Bop(In,
32217                                                                                 Var("Rd",
32218                                                                                     F4),
32219                                                                                 SL[LW(13,
32220                                                                                       4),
32221                                                                                    LW(15,
32222                                                                                       4)]),
32223                                                                             Bop(In,
32224                                                                                 Var("Rm",
32225                                                                                     F4),
32226                                                                                 SL[LW(13,
32227                                                                                       4),
32228                                                                                    LW(15,
32229                                                                                       4)]))),
32230                                                                     Apply
32231                                                                       (Call
32232                                                                          ("DECODE_UNPREDICTABLE",
32233                                                                           ATy(qTy,
32234                                                                               qTy),
32235                                                                           TP[Var("mc",
32236                                                                                  CTy"MachineCode"),
32237                                                                              LS
32238                                                                               "CountLeadingZeroes"]),
32239                                                                        qVar"s"),
32240                                                                     qVar"s")],
32241                                                              TP[Apply
32242                                                                   (Call
32243                                                                      ("Skip",
32244                                                                       ATy(qTy,
32245                                                                           CTy"instruction"),
32246                                                                       LU),
32247                                                                    qVar"s"),
32248                                                                 qVar"s"])))))),
32249                                         (Bop(And,bVar"b'24",
32250                                              Bop(And,Mop(Not,bVar"b'23"),
32251                                                  Bop(And,
32252                                                      Mop(Not,bVar"b'7"),
32253                                                      Mop(Not,bVar"b'6")))),
32254                                          Let(Var("Rn",F4),
32255                                              Mop(Cast F4,
32256                                                  LL[bVar"b'19",
32257                                                     bVar"b'18",
32258                                                     bVar"b'17",bVar"b'16"]),
32259                                              Let(Var("Rm",F4),
32260                                                  Mop(Cast F4,
32261                                                      LL[bVar"b'3",
32262                                                         bVar"b'2",
32263                                                         bVar"b'1",
32264                                                         bVar"b'0"]),
32265                                                  Let(Var("Rd",F4),
32266                                                      Mop(Cast F4,
32267                                                          LL[bVar"b'11",
32268                                                             bVar"b'10",
32269                                                             bVar"b'9",
32270                                                             bVar"b'8"]),
32271                                                      Let(Var("Ra",F4),
32272                                                          Mop(Cast F4,
32273                                                              LL[bVar"b'15",
32274                                                                 bVar"b'14",
32275                                                                 bVar"b'13",
32276                                                                 bVar"b'12"]),
32277                                                          Let(TP[Var("v",
32278                                                                     F4),
32279                                                                 qVar"s"],
32280                                                              Apply
32281                                                                (Call
32282                                                                   ("ThumbCondition",
32283                                                                    ATy(qTy,
32284                                                                        PTy(F4,
32285                                                                            qTy)),
32286                                                                    LU),
32287                                                                 qVar"state"),
32288                                                              Let(TP[bVar"v",
32289                                                                     qVar"s"],
32290                                                                  Apply
32291                                                                    (Call
32292                                                                       ("Do",
32293                                                                        ATy(qTy,
32294                                                                            PTy(bTy,
32295                                                                                qTy)),
32296                                                                        TP[Var("v",
32297                                                                               F4),
32298                                                                           Apply
32299                                                                             (Call
32300                                                                                ("HaveThumb2",
32301                                                                                 ATy(qTy,
32302                                                                                     bTy),
32303                                                                                 LU),
32304                                                                              qVar"s")]),
32305                                                                     qVar"s"),
32306                                                                  ITE(bVar"v",
32307                                                                      Let(qVar"s",
32308                                                                          ITE(Bop(Or,
32309                                                                                  Bop(In,
32310                                                                                      Var("Rd",
32311                                                                                          F4),
32312                                                                                      SL[LW(13,
32313                                                                                            4),
32314                                                                                         LW(15,
32315                                                                                            4)]),
32316                                                                                  Bop(Or,
32317                                                                                      Bop(In,
32318                                                                                          Var("Rn",
32319                                                                                              F4),
32320                                                                                          SL[LW(13,
32321                                                                                                4),
32322                                                                                             LW(15,
32323                                                                                                4)]),
32324                                                                                      Bop(Or,
32325                                                                                          Bop(In,
32326                                                                                              Var("Rm",
32327                                                                                                  F4),
32328                                                                                              SL[LW(13,
32329                                                                                                    4),
32330                                                                                                 LW(15,
32331                                                                                                    4)]),
32332                                                                                          EQ(Var("Ra",
32333                                                                                                 F4),
32334                                                                                             LW(13,
32335                                                                                                4))))),
32336                                                                              Apply
32337                                                                                (Call
32338                                                                                   ("DECODE_UNPREDICTABLE",
32339                                                                                    ATy(qTy,
32340                                                                                        qTy),
32341                                                                                    TP[Var("mc",
32342                                                                                           CTy"MachineCode"),
32343                                                                                       LS
32344                                                                                        "Multiplies and absolute difference"]),
32345                                                                                 qVar"s"),
32346                                                                              qVar"s"),
32347                                                                          CS(TP[Mop(Cast
32348                                                                                      (FTy 3),
32349                                                                                    LL[bVar"b'22",
32350                                                                                       bVar"b'21",
32351                                                                                       bVar"b'20"]),
32352                                                                                Var("Ra",
32353                                                                                    F4),
32354                                                                                EQ(Mop(Cast
32355                                                                                         F1,
32356                                                                                       LL[bVar"b'5"]),
32357                                                                                   LW(1,
32358                                                                                      1)),
32359                                                                                EQ(Mop(Cast
32360                                                                                         F1,
32361                                                                                       LL[bVar"b'4"]),
32362                                                                                   LW(1,
32363                                                                                      1))],
32364                                                                             [(TP[LW(0,
32365                                                                                     3),
32366                                                                                  LW(15,
32367                                                                                     4),
32368                                                                                  LF,
32369                                                                                  LF],
32370                                                                               TP[Call
32371                                                                                    ("Multiply",
32372                                                                                     CTy"instruction",
32373                                                                                     Call
32374                                                                                       ("Multiply32",
32375                                                                                        CTy"Multiply",
32376                                                                                        TP[LF,
32377                                                                                           Var("Rd",
32378                                                                                               F4),
32379                                                                                           Var("Rn",
32380                                                                                               F4),
32381                                                                                           Var("Rm",
32382                                                                                               F4)])),
32383                                                                                  qVar"s"]),
32384                                                                              (TP[LW(0,
32385                                                                                     3),
32386                                                                                  AVar
32387                                                                                    F4,
32388                                                                                  LF,
32389                                                                                  LF],
32390                                                                               TP[Call
32391                                                                                    ("Multiply",
32392                                                                                     CTy"instruction",
32393                                                                                     Call
32394                                                                                       ("MultiplyAccumulate",
32395                                                                                        CTy"Multiply",
32396                                                                                        TP[LF,
32397                                                                                           Var("Rd",
32398                                                                                               F4),
32399                                                                                           Var("Rn",
32400                                                                                               F4),
32401                                                                                           Var("Rm",
32402                                                                                               F4),
32403                                                                                           Var("Ra",
32404                                                                                               F4)])),
32405                                                                                  qVar"s"]),
32406                                                                              (TP[LW(0,
32407                                                                                     3),
32408                                                                                  LW(15,
32409                                                                                     4),
32410                                                                                  LF,
32411                                                                                  LT],
32412                                                                               TP[LX(CTy"instruction"),
32413                                                                                  Apply
32414                                                                                    (Call
32415                                                                                       ("DECODE_UNPREDICTABLE",
32416                                                                                        ATy(qTy,
32417                                                                                            qTy),
32418                                                                                        TP[Var("mc",
32419                                                                                               CTy"MachineCode"),
32420                                                                                           LS
32421                                                                                            "MultiplySubtract"]),
32422                                                                                     qVar"s")]),
32423                                                                              (TP[LW(0,
32424                                                                                     3),
32425                                                                                  AVar
32426                                                                                    F4,
32427                                                                                  LF,
32428                                                                                  LT],
32429                                                                               TP[Call
32430                                                                                    ("Multiply",
32431                                                                                     CTy"instruction",
32432                                                                                     Call
32433                                                                                       ("MultiplySubtract",
32434                                                                                        CTy"Multiply",
32435                                                                                        TP[Var("Rd",
32436                                                                                               F4),
32437                                                                                           Var("Rn",
32438                                                                                               F4),
32439                                                                                           Var("Rm",
32440                                                                                               F4),
32441                                                                                           Var("Ra",
32442                                                                                               F4)])),
32443                                                                                  qVar"s"]),
32444                                                                              (TP[LW(1,
32445                                                                                     3),
32446                                                                                  LW(15,
32447                                                                                     4),
32448                                                                                  bVar"n_high",
32449                                                                                  bVar"m_high"],
32450                                                                               TP[Call
32451                                                                                    ("Multiply",
32452                                                                                     CTy"instruction",
32453                                                                                     Call
32454                                                                                       ("Signed16Multiply32Result",
32455                                                                                        CTy"Multiply",
32456                                                                                        TP[bVar"m_high",
32457                                                                                           bVar"n_high",
32458                                                                                           Var("Rd",
32459                                                                                               F4),
32460                                                                                           Var("Rn",
32461                                                                                               F4),
32462                                                                                           Var("Rm",
32463                                                                                               F4)])),
32464                                                                                  qVar"s"]),
32465                                                                              (TP[LW(1,
32466                                                                                     3),
32467                                                                                  AVar
32468                                                                                    F4,
32469                                                                                  bVar"n_high",
32470                                                                                  bVar"m_high"],
32471                                                                               TP[Call
32472                                                                                    ("Multiply",
32473                                                                                     CTy"instruction",
32474                                                                                     Call
32475                                                                                       ("Signed16Multiply32Accumulate",
32476                                                                                        CTy"Multiply",
32477                                                                                        TP[bVar"m_high",
32478                                                                                           bVar"n_high",
32479                                                                                           Var("Rd",
32480                                                                                               F4),
32481                                                                                           Var("Rn",
32482                                                                                               F4),
32483                                                                                           Var("Rm",
32484                                                                                               F4),
32485                                                                                           Var("Ra",
32486                                                                                               F4)])),
32487                                                                                  qVar"s"]),
32488                                                                              (TP[LW(2,
32489                                                                                     3),
32490                                                                                  AVar
32491                                                                                    F4,
32492                                                                                  LF,
32493                                                                                  bVar"m_swap"],
32494                                                                               TP[Call
32495                                                                                    ("Multiply",
32496                                                                                     CTy"instruction",
32497                                                                                     Call
32498                                                                                       ("SignedMultiplyDual",
32499                                                                                        CTy"Multiply",
32500                                                                                        TP[LF,
32501                                                                                           bVar"m_swap",
32502                                                                                           Var("Rd",
32503                                                                                               F4),
32504                                                                                           Var("Rn",
32505                                                                                               F4),
32506                                                                                           Var("Rm",
32507                                                                                               F4),
32508                                                                                           Var("Ra",
32509                                                                                               F4)])),
32510                                                                                  qVar"s"]),
32511                                                                              (TP[LW(3,
32512                                                                                     3),
32513                                                                                  LW(15,
32514                                                                                     4),
32515                                                                                  LF,
32516                                                                                  bVar"m_high"],
32517                                                                               TP[Call
32518                                                                                    ("Multiply",
32519                                                                                     CTy"instruction",
32520                                                                                     Call
32521                                                                                       ("Signed16x32Multiply32Result",
32522                                                                                        CTy"Multiply",
32523                                                                                        TP[bVar"m_high",
32524                                                                                           Var("Rd",
32525                                                                                               F4),
32526                                                                                           Var("Rn",
32527                                                                                               F4),
32528                                                                                           Var("Rm",
32529                                                                                               F4)])),
32530                                                                                  qVar"s"]),
32531                                                                              (TP[LW(3,
32532                                                                                     3),
32533                                                                                  AVar
32534                                                                                    F4,
32535                                                                                  LF,
32536                                                                                  bVar"m_high"],
32537                                                                               TP[Call
32538                                                                                    ("Multiply",
32539                                                                                     CTy"instruction",
32540                                                                                     Call
32541                                                                                       ("Signed16x32Multiply32Accumulate",
32542                                                                                        CTy"Multiply",
32543                                                                                        TP[bVar"m_high",
32544                                                                                           Var("Rd",
32545                                                                                               F4),
32546                                                                                           Var("Rn",
32547                                                                                               F4),
32548                                                                                           Var("Rm",
32549                                                                                               F4),
32550                                                                                           Var("Ra",
32551                                                                                               F4)])),
32552                                                                                  qVar"s"]),
32553                                                                              (TP[LW(4,
32554                                                                                     3),
32555                                                                                  AVar
32556                                                                                    F4,
32557                                                                                  LF,
32558                                                                                  bVar"m_swap"],
32559                                                                               TP[Call
32560                                                                                    ("Multiply",
32561                                                                                     CTy"instruction",
32562                                                                                     Call
32563                                                                                       ("SignedMultiplyDual",
32564                                                                                        CTy"Multiply",
32565                                                                                        TP[LT,
32566                                                                                           bVar"m_swap",
32567                                                                                           Var("Rd",
32568                                                                                               F4),
32569                                                                                           Var("Rn",
32570                                                                                               F4),
32571                                                                                           Var("Rm",
32572                                                                                               F4),
32573                                                                                           Var("Ra",
32574                                                                                               F4)])),
32575                                                                                  qVar"s"]),
32576                                                                              (TP[LW(5,
32577                                                                                     3),
32578                                                                                  AVar
32579                                                                                    F4,
32580                                                                                  LF,
32581                                                                                  bVar"round"],
32582                                                                               TP[Call
32583                                                                                    ("Multiply",
32584                                                                                     CTy"instruction",
32585                                                                                     Call
32586                                                                                       ("SignedMostSignificantMultiply",
32587                                                                                        CTy"Multiply",
32588                                                                                        TP[bVar"round",
32589                                                                                           Var("Rd",
32590                                                                                               F4),
32591                                                                                           Var("Rn",
32592                                                                                               F4),
32593                                                                                           Var("Rm",
32594                                                                                               F4),
32595                                                                                           Var("Ra",
32596                                                                                               F4)])),
32597                                                                                  qVar"s"]),
32598                                                                              (TP[LW(6,
32599                                                                                     3),
32600                                                                                  LW(15,
32601                                                                                     4),
32602                                                                                  LF,
32603                                                                                  AVar
32604                                                                                    bTy],
32605                                                                               TP[LX(CTy"instruction"),
32606                                                                                  Apply
32607                                                                                    (Call
32608                                                                                       ("DECODE_UNPREDICTABLE",
32609                                                                                        ATy(qTy,
32610                                                                                            qTy),
32611                                                                                        TP[Var("mc",
32612                                                                                               CTy"MachineCode"),
32613                                                                                           LS
32614                                                                                            "SignedMostSignificantMultiplySubtract"]),
32615                                                                                     qVar"s")]),
32616                                                                              (TP[LW(6,
32617                                                                                     3),
32618                                                                                  AVar
32619                                                                                    F4,
32620                                                                                  LF,
32621                                                                                  bVar"round"],
32622                                                                               TP[Call
32623                                                                                    ("Multiply",
32624                                                                                     CTy"instruction",
32625                                                                                     Call
32626                                                                                       ("SignedMostSignificantMultiplySubtract",
32627                                                                                        CTy"Multiply",
32628                                                                                        TP[bVar"round",
32629                                                                                           Var("Rd",
32630                                                                                               F4),
32631                                                                                           Var("Rn",
32632                                                                                               F4),
32633                                                                                           Var("Rm",
32634                                                                                               F4),
32635                                                                                           Var("Ra",
32636                                                                                               F4)])),
32637                                                                                  qVar"s"]),
32638                                                                              (TP[LW(7,
32639                                                                                     3),
32640                                                                                  AVar
32641                                                                                    F4,
32642                                                                                  LF,
32643                                                                                  LF],
32644                                                                               TP[Call
32645                                                                                    ("SIMD",
32646                                                                                     CTy"instruction",
32647                                                                                     Call
32648                                                                                       ("UnsignedSumAbsoluteDifferences",
32649                                                                                        CTy"SIMD",
32650                                                                                        TP[Var("Rd",
32651                                                                                               F4),
32652                                                                                           Var("Rn",
32653                                                                                               F4),
32654                                                                                           Var("Rm",
32655                                                                                               F4),
32656                                                                                           Var("Ra",
32657                                                                                               F4)])),
32658                                                                                  qVar"s"]),
32659                                                                              (AVar
32660                                                                                 (PTy(FTy 3,
32661                                                                                      PTy(F4,
32662                                                                                          PTy(bTy,
32663                                                                                              bTy)))),
32664                                                                               TP[Call
32665                                                                                    ("Undefined",
32666                                                                                     CTy"instruction",
32667                                                                                     LW(0,
32668                                                                                        32)),
32669                                                                                  qVar"s"])])),
32670                                                                      TP[Apply
32671                                                                           (Call
32672                                                                              ("Skip",
32673                                                                               ATy(qTy,
32674                                                                                   CTy"instruction"),
32675                                                                               LU),
32676                                                                            qVar"s"),
32677                                                                         qVar"s"])))))))),
32678                                         (Bop(And,bVar"b'24",
32679                                              Bop(And,bVar"b'23",
32680                                                  Bop(And,
32681                                                      Mop(Not,bVar"b'22"),
32682                                                      Bop(And,bVar"b'20",
32683                                                          Bop(And,
32684                                                              bVar"b'7",
32685                                                              Bop(And,
32686                                                                  bVar"b'6",
32687                                                                  Bop(And,
32688                                                                      bVar"b'5",
32689                                                                      bVar"b'4"))))))),
32690                                          Let(Var("Rn",F4),
32691                                              Mop(Cast F4,
32692                                                  LL[bVar"b'19",
32693                                                     bVar"b'18",
32694                                                     bVar"b'17",bVar"b'16"]),
32695                                              Let(Var("Rm",F4),
32696                                                  Mop(Cast F4,
32697                                                      LL[bVar"b'3",
32698                                                         bVar"b'2",
32699                                                         bVar"b'1",
32700                                                         bVar"b'0"]),
32701                                                  Let(Var("Rd",F4),
32702                                                      Mop(Cast F4,
32703                                                          LL[bVar"b'11",
32704                                                             bVar"b'10",
32705                                                             bVar"b'9",
32706                                                             bVar"b'8"]),
32707                                                      Let(TP[Var("v",F4),
32708                                                             qVar"s"],
32709                                                          Apply
32710                                                            (Call
32711                                                               ("ThumbCondition",
32712                                                                ATy(qTy,
32713                                                                    PTy(F4,
32714                                                                        qTy)),
32715                                                                LU),
32716                                                             qVar"state"),
32717                                                          Let(TP[bVar"v",
32718                                                                 qVar"s"],
32719                                                              Apply
32720                                                                (Call
32721                                                                   ("Do",
32722                                                                    ATy(qTy,
32723                                                                        PTy(bTy,
32724                                                                            qTy)),
32725                                                                    TP[Var("v",
32726                                                                           F4),
32727                                                                       Bop(Or,
32728                                                                           Apply
32729                                                                             (Call
32730                                                                                ("HaveVirtExt",
32731                                                                                 ATy(qTy,
32732                                                                                     bTy),
32733                                                                                 LU),
32734                                                                              qVar"s"),
32735                                                                           EQ(Dest
32736                                                                                ("Architecture",
32737                                                                                 CTy"Architecture",
32738                                                                                 qVar"s"),
32739                                                                              LC("ARMv7_R",
32740                                                                                 CTy"Architecture")))]),
32741                                                                 qVar"s"),
32742                                                              ITE(bVar"v",
32743                                                                  TP[Call
32744                                                                       ("Divide",
32745                                                                        CTy"instruction",
32746                                                                        TP[EQ(Mop(Cast
32747                                                                                    F1,
32748                                                                                  LL[bVar"b'21"]),
32749                                                                              LW(1,
32750                                                                                 1)),
32751                                                                           Var("Rd",
32752                                                                               F4),
32753                                                                           Var("Rn",
32754                                                                               F4),
32755                                                                           Var("Rm",
32756                                                                               F4)]),
32757                                                                     ITE(Bop(Or,
32758                                                                             Bop(In,
32759                                                                                 Var("Rd",
32760                                                                                     F4),
32761                                                                                 SL[LW(13,
32762                                                                                       4),
32763                                                                                    LW(15,
32764                                                                                       4)]),
32765                                                                             Bop(Or,
32766                                                                                 Bop(In,
32767                                                                                     Var("Rn",
32768                                                                                         F4),
32769                                                                                     SL[LW(13,
32770                                                                                           4),
32771                                                                                        LW(15,
32772                                                                                           4)]),
32773                                                                                 Bop(Or,
32774                                                                                     Bop(In,
32775                                                                                         Var("Rm",
32776                                                                                             F4),
32777                                                                                         SL[LW(13,
32778                                                                                               4),
32779                                                                                            LW(15,
32780                                                                                               4)]),
32781                                                                                     Mop(Not,
32782                                                                                         EQ(Mop(Cast
32783                                                                                                  F4,
32784                                                                                                LL[bVar"b'15",
32785                                                                                                   bVar"b'14",
32786                                                                                                   bVar"b'13",
32787                                                                                                   bVar"b'12"]),
32788                                                                                            LW(15,
32789                                                                                               4)))))),
32790                                                                         Apply
32791                                                                           (Call
32792                                                                              ("DECODE_UNPREDICTABLE",
32793                                                                               ATy(qTy,
32794                                                                                   qTy),
32795                                                                               TP[Var("mc",
32796                                                                                      CTy"MachineCode"),
32797                                                                                  LS
32798                                                                                   "Divide"]),
32799                                                                            qVar"s"),
32800                                                                         qVar"s")],
32801                                                                  TP[Apply
32802                                                                       (Call
32803                                                                          ("Skip",
32804                                                                           ATy(qTy,
32805                                                                               CTy"instruction"),
32806                                                                           LU),
32807                                                                        qVar"s"),
32808                                                                     qVar"s"]))))))),
32809                                         (Bop(And,bVar"b'24",bVar"b'23"),
32810                                          Let(Var("Rn",F4),
32811                                              Mop(Cast F4,
32812                                                  LL[bVar"b'19",
32813                                                     bVar"b'18",
32814                                                     bVar"b'17",bVar"b'16"]),
32815                                              Let(Var("Rm",F4),
32816                                                  Mop(Cast F4,
32817                                                      LL[bVar"b'3",
32818                                                         bVar"b'2",
32819                                                         bVar"b'1",
32820                                                         bVar"b'0"]),
32821                                                  Let(Var("RdHi",F4),
32822                                                      Mop(Cast F4,
32823                                                          LL[bVar"b'11",
32824                                                             bVar"b'10",
32825                                                             bVar"b'9",
32826                                                             bVar"b'8"]),
32827                                                      Let(Var("RdLo",F4),
32828                                                          Mop(Cast F4,
32829                                                              LL[bVar"b'15",
32830                                                                 bVar"b'14",
32831                                                                 bVar"b'13",
32832                                                                 bVar"b'12"]),
32833                                                          Let(TP[Var("v",
32834                                                                     F4),
32835                                                                 qVar"s"],
32836                                                              Apply
32837                                                                (Call
32838                                                                   ("ThumbCondition",
32839                                                                    ATy(qTy,
32840                                                                        PTy(F4,
32841                                                                            qTy)),
32842                                                                    LU),
32843                                                                 qVar"state"),
32844                                                              Let(TP[bVar"v",
32845                                                                     qVar"s"],
32846                                                                  Apply
32847                                                                    (Call
32848                                                                       ("Do",
32849                                                                        ATy(qTy,
32850                                                                            PTy(bTy,
32851                                                                                qTy)),
32852                                                                        TP[Var("v",
32853                                                                               F4),
32854                                                                           Apply
32855                                                                             (Call
32856                                                                                ("HaveThumb2",
32857                                                                                 ATy(qTy,
32858                                                                                     bTy),
32859                                                                                 LU),
32860                                                                              qVar"s")]),
32861                                                                     qVar"s"),
32862                                                                  ITE(bVar"v",
32863                                                                      TP[Let(TP[TP[bVar"b'6",
32864                                                                                   bVar"b'5",
32865                                                                                   bVar"b'4"],
32866                                                                                bVar"b'3",
32867                                                                                bVar"b'2",
32868                                                                                bVar"b'1",
32869                                                                                bVar"b'0"],
32870                                                                             TP[BL(3,
32871                                                                                   Mop(Cast
32872                                                                                         (FTy 3),
32873                                                                                       LL[bVar"b'22",
32874                                                                                          bVar"b'21",
32875                                                                                          bVar"b'20"])),
32876                                                                                BL(4,
32877                                                                                   Mop(Cast
32878                                                                                         F4,
32879                                                                                       LL[bVar"b'7",
32880                                                                                          bVar"b'6",
32881                                                                                          bVar"b'5",
32882                                                                                          bVar"b'4"]))],
32883                                                                             ITB([(Bop(And,
32884                                                                                       Mop(Not,
32885                                                                                           bVar"b'4"),
32886                                                                                       Bop(And,
32887                                                                                           Mop(Not,
32888                                                                                               bVar"b'3"),
32889                                                                                           Bop(And,
32890                                                                                               Mop(Not,
32891                                                                                                   bVar"b'2"),
32892                                                                                               Bop(And,
32893                                                                                                   Mop(Not,
32894                                                                                                       bVar"b'1"),
32895                                                                                                   Mop(Not,
32896                                                                                                       bVar"b'0"))))),
32897                                                                                   Call
32898                                                                                     ("Multiply",
32899                                                                                      CTy"instruction",
32900                                                                                      Call
32901                                                                                        ("MultiplyLong",
32902                                                                                         CTy"Multiply",
32903                                                                                         TP[EQ(Mop(Cast
32904                                                                                                     F1,
32905                                                                                                   LL[bVar"b'6"]),
32906                                                                                               LW(1,
32907                                                                                                  1)),
32908                                                                                            EQ(Mop(Cast
32909                                                                                                     F1,
32910                                                                                                   LL[bVar"b'5"]),
32911                                                                                               LW(0,
32912                                                                                                  1)),
32913                                                                                            LF,
32914                                                                                            Var("RdHi",
32915                                                                                                F4),
32916                                                                                            Var("RdLo",
32917                                                                                                F4),
32918                                                                                            Var("Rn",
32919                                                                                                F4),
32920                                                                                            Var("Rm",
32921                                                                                                F4)]))),
32922                                                                                  (Bop(And,
32923                                                                                       bVar"b'6",
32924                                                                                       Bop(And,
32925                                                                                           Mop(Not,
32926                                                                                               bVar"b'5"),
32927                                                                                           Bop(And,
32928                                                                                               Mop(Not,
32929                                                                                                   bVar"b'4"),
32930                                                                                               Bop(And,
32931                                                                                                   bVar"b'3",
32932                                                                                                   Mop(Not,
32933                                                                                                       bVar"b'2"))))),
32934                                                                                   Call
32935                                                                                     ("Multiply",
32936                                                                                      CTy"instruction",
32937                                                                                      Call
32938                                                                                        ("Signed16Multiply64Accumulate",
32939                                                                                         CTy"Multiply",
32940                                                                                         TP[EQ(Mop(Cast
32941                                                                                                     F1,
32942                                                                                                   LL[bVar"b'0"]),
32943                                                                                               LW(1,
32944                                                                                                  1)),
32945                                                                                            EQ(Mop(Cast
32946                                                                                                     F1,
32947                                                                                                   LL[bVar"b'1"]),
32948                                                                                               LW(1,
32949                                                                                                  1)),
32950                                                                                            Var("RdHi",
32951                                                                                                F4),
32952                                                                                            Var("RdLo",
32953                                                                                                F4),
32954                                                                                            Var("Rn",
32955                                                                                                F4),
32956                                                                                            Var("Rm",
32957                                                                                                F4)]))),
32958                                                                                  (Bop(And,
32959                                                                                       bVar"b'6",
32960                                                                                       Bop(And,
32961                                                                                           Mop(Not,
32962                                                                                               bVar"b'5"),
32963                                                                                           Bop(And,
32964                                                                                               bVar"b'3",
32965                                                                                               Bop(And,
32966                                                                                                   bVar"b'2",
32967                                                                                                   Mop(Not,
32968                                                                                                       bVar"b'1"))))),
32969                                                                                   Call
32970                                                                                     ("Multiply",
32971                                                                                      CTy"instruction",
32972                                                                                      Call
32973                                                                                        ("SignedMultiplyLongDual",
32974                                                                                         CTy"Multiply",
32975                                                                                         TP[EQ(Mop(Cast
32976                                                                                                     F1,
32977                                                                                                   LL[bVar"b'4"]),
32978                                                                                               LW(1,
32979                                                                                                  1)),
32980                                                                                            EQ(Mop(Cast
32981                                                                                                     F1,
32982                                                                                                   LL[bVar"b'0"]),
32983                                                                                               LW(1,
32984                                                                                                  1)),
32985                                                                                            Var("RdHi",
32986                                                                                                F4),
32987                                                                                            Var("RdLo",
32988                                                                                                F4),
32989                                                                                            Var("Rn",
32990                                                                                                F4),
32991                                                                                            Var("Rm",
32992                                                                                                F4)]))),
32993                                                                                  (Bop(And,
32994                                                                                       bVar"b'6",
32995                                                                                       Bop(And,
32996                                                                                           bVar"b'5",
32997                                                                                           Bop(And,
32998                                                                                               Mop(Not,
32999                                                                                                   bVar"b'4"),
33000                                                                                               Bop(And,
33001                                                                                                   Mop(Not,
33002                                                                                                       bVar"b'3"),
33003                                                                                                   Bop(And,
33004                                                                                                       bVar"b'2",
33005                                                                                                       Bop(And,
33006                                                                                                           bVar"b'1",
33007                                                                                                           Mop(Not,
33008                                                                                                               bVar"b'0"))))))),
33009                                                                                   Call
33010                                                                                     ("Multiply",
33011                                                                                      CTy"instruction",
33012                                                                                      Call
33013                                                                                        ("MultiplyAccumulateAccumulate",
33014                                                                                         CTy"Multiply",
33015                                                                                         TP[Var("RdHi",
33016                                                                                                F4),
33017                                                                                            Var("RdLo",
33018                                                                                                F4),
33019                                                                                            Var("Rn",
33020                                                                                                F4),
33021                                                                                            Var("Rm",
33022                                                                                                F4)])))],
33023                                                                                 Call
33024                                                                                   ("Undefined",
33025                                                                                    CTy"instruction",
33026                                                                                    LW(0,
33027                                                                                       32)))),
33028                                                                         ITE(Bop(Or,
33029                                                                                 Bop(In,
33030                                                                                     Var("RdLo",
33031                                                                                         F4),
33032                                                                                     SL[LW(13,
33033                                                                                           4),
33034                                                                                        LW(15,
33035                                                                                           4)]),
33036                                                                                 Bop(Or,
33037                                                                                     Bop(In,
33038                                                                                         Var("RdHi",
33039                                                                                             F4),
33040                                                                                         SL[LW(13,
33041                                                                                               4),
33042                                                                                            LW(15,
33043                                                                                               4)]),
33044                                                                                     Bop(Or,
33045                                                                                         Bop(In,
33046                                                                                             Var("Rn",
33047                                                                                                 F4),
33048                                                                                             SL[LW(13,
33049                                                                                                   4),
33050                                                                                                LW(15,
33051                                                                                                   4)]),
33052                                                                                         Bop(Or,
33053                                                                                             Bop(In,
33054                                                                                                 Var("Rm",
33055                                                                                                     F4),
33056                                                                                                 SL[LW(13,
33057                                                                                                       4),
33058                                                                                                    LW(15,
33059                                                                                                       4)]),
33060                                                                                             EQ(Var("RdHi",
33061                                                                                                    F4),
33062                                                                                                Var("RdLo",
33063                                                                                                    F4)))))),
33064                                                                             Apply
33065                                                                               (Call
33066                                                                                  ("DECODE_UNPREDICTABLE",
33067                                                                                   ATy(qTy,
33068                                                                                       qTy),
33069                                                                                   TP[Var("mc",
33070                                                                                          CTy"MachineCode"),
33071                                                                                      LS
33072                                                                                       "Long multiply, long multiply accumulate"]),
33073                                                                                qVar"s"),
33074                                                                             qVar"s")],
33075                                                                      TP[Apply
33076                                                                           (Call
33077                                                                              ("Skip",
33078                                                                               ATy(qTy,
33079                                                                                   CTy"instruction"),
33080                                                                               LU),
33081                                                                            qVar"s"),
33082                                                                         qVar"s"]))))))))],
33083                                        Apply
33084                                          (Call
33085                                             ("UndefinedThumb",
33086                                              ATy(qTy,
33087                                                  PTy(CTy"instruction",qTy)),
33088                                              LU),qVar"state")),
33089                                    Apply
33090                                      (Call
33091                                         ("UndefinedThumb",
33092                                          ATy(qTy,
33093                                              PTy(CTy"instruction",qTy)),
33094                                          LU),qVar"state"))),
33095                               (bVar"b'22",
33096                                ITB([(bVar"b'20",
33097                                      ITE(Bop(And,bVar"b'31",
33098                                              Bop(And,bVar"b'30",
33099                                                  Bop(And,bVar"b'29",
33100                                                      Bop(And,
33101                                                          Mop(Not,
33102                                                              bVar"b'26"),
33103                                                          Bop(And,
33104                                                              Mop(Not,
33105                                                                  bVar"b'24"),
33106                                                              Mop(Not,
33107                                                                  bVar"b'21")))))),
33108                                          ITB([(Bop(And,bVar"b'19",
33109                                                    Bop(And,bVar"b'18",
33110                                                        Bop(And,
33111                                                            bVar"b'17",
33112                                                            bVar"b'16"))),
33113                                                Let(Var("Rt",F4),
33114                                                    Mop(Cast F4,
33115                                                        LL[bVar"b'15",
33116                                                           bVar"b'14",
33117                                                           bVar"b'13",
33118                                                           bVar"b'12"]),
33119                                                    Let(TP[Var("v",F4),
33120                                                           qVar"s"],
33121                                                        Apply
33122                                                          (Call
33123                                                             ("ThumbCondition",
33124                                                              ATy(qTy,
33125                                                                  PTy(F4,
33126                                                                      qTy)),
33127                                                              LU),
33128                                                           qVar"state"),
33129                                                        Let(TP[bVar"v",
33130                                                               qVar"s"],
33131                                                            Apply
33132                                                              (Call
33133                                                                 ("Do",
33134                                                                  ATy(qTy,
33135                                                                      PTy(bTy,
33136                                                                          qTy)),
33137                                                                  TP[Var("v",
33138                                                                         F4),
33139                                                                     Apply
33140                                                                       (Call
33141                                                                          ("HaveThumb2",
33142                                                                           ATy(qTy,
33143                                                                               bTy),
33144                                                                           LU),
33145                                                                        qVar"s")]),
33146                                                               qVar"s"),
33147                                                            ITE(bVar"v",
33148                                                                TP[Call
33149                                                                     ("Load",
33150                                                                      CTy"instruction",
33151                                                                      Call
33152                                                                        ("LoadLiteral",
33153                                                                         CTy"Load",
33154                                                                         TP[EQ(Mop(Cast
33155                                                                                     F1,
33156                                                                                   LL[bVar"b'23"]),
33157                                                                               LW(1,
33158                                                                                  1)),
33159                                                                            Var("Rt",
33160                                                                                F4),
33161                                                                            Mop(Cast
33162                                                                                  F32,
33163                                                                                Mop(Cast
33164                                                                                      (FTy 12),
33165                                                                                    LL[bVar"b'11",
33166                                                                                       bVar"b'10",
33167                                                                                       bVar"b'9",
33168                                                                                       bVar"b'8",
33169                                                                                       bVar"b'7",
33170                                                                                       bVar"b'6",
33171                                                                                       bVar"b'5",
33172                                                                                       bVar"b'4",
33173                                                                                       bVar"b'3",
33174                                                                                       bVar"b'2",
33175                                                                                       bVar"b'1",
33176                                                                                       bVar"b'0"]))])),
33177                                                                   ITE(Bop(And,
33178                                                                           EQ(Var("Rt",
33179                                                                                  F4),
33180                                                                              LW(15,
33181                                                                                 4)),
33182                                                                           Bop(And,
33183                                                                               Apply
33184                                                                                 (Call
33185                                                                                    ("InITBlock",
33186                                                                                     ATy(qTy,
33187                                                                                         bTy),
33188                                                                                     LU),
33189                                                                                  qVar"s"),
33190                                                                               Mop(Not,
33191                                                                                   Apply
33192                                                                                     (Call
33193                                                                                        ("LastInITBlock",
33194                                                                                         ATy(qTy,
33195                                                                                             bTy),
33196                                                                                         LU),
33197                                                                                      qVar"s")))),
33198                                                                       Apply
33199                                                                         (Call
33200                                                                            ("DECODE_UNPREDICTABLE",
33201                                                                             ATy(qTy,
33202                                                                                 qTy),
33203                                                                             TP[Var("mc",
33204                                                                                    CTy"MachineCode"),
33205                                                                                LS
33206                                                                                 "LoadLiteral"]),
33207                                                                          qVar"s"),
33208                                                                       qVar"s")],
33209                                                                TP[Apply
33210                                                                     (Call
33211                                                                        ("Skip",
33212                                                                         ATy(qTy,
33213                                                                             CTy"instruction"),
33214                                                                         LU),
33215                                                                      qVar"s"),
33216                                                                   qVar"s"]))))),
33217                                               (bVar"b'23",
33218                                                Let(Var("Rt",F4),
33219                                                    Mop(Cast F4,
33220                                                        LL[bVar"b'15",
33221                                                           bVar"b'14",
33222                                                           bVar"b'13",
33223                                                           bVar"b'12"]),
33224                                                    Let(TP[Var("v",F4),
33225                                                           qVar"s"],
33226                                                        Apply
33227                                                          (Call
33228                                                             ("ThumbCondition",
33229                                                              ATy(qTy,
33230                                                                  PTy(F4,
33231                                                                      qTy)),
33232                                                              LU),
33233                                                           qVar"state"),
33234                                                        Let(TP[bVar"v",
33235                                                               qVar"s"],
33236                                                            Apply
33237                                                              (Call
33238                                                                 ("Do",
33239                                                                  ATy(qTy,
33240                                                                      PTy(bTy,
33241                                                                          qTy)),
33242                                                                  TP[Var("v",
33243                                                                         F4),
33244                                                                     Apply
33245                                                                       (Call
33246                                                                          ("HaveThumb2",
33247                                                                           ATy(qTy,
33248                                                                               bTy),
33249                                                                           LU),
33250                                                                        qVar"s")]),
33251                                                               qVar"s"),
33252                                                            ITE(bVar"v",
33253                                                                TP[Call
33254                                                                     ("Load",
33255                                                                      CTy"instruction",
33256                                                                      Call
33257                                                                        ("LoadWord",
33258                                                                         CTy"Load",
33259                                                                         TP[LT,
33260                                                                            LT,
33261                                                                            LF,
33262                                                                            Var("Rt",
33263                                                                                F4),
33264                                                                            Mop(Cast
33265                                                                                  F4,
33266                                                                                LL[bVar"b'19",
33267                                                                                   bVar"b'18",
33268                                                                                   bVar"b'17",
33269                                                                                   bVar"b'16"]),
33270                                                                            Call
33271                                                                              ("immediate_form1",
33272                                                                               CTy"offset1",
33273                                                                               Mop(Cast
33274                                                                                     F32,
33275                                                                                   Mop(Cast
33276                                                                                         (FTy 12),
33277                                                                                       LL[bVar"b'11",
33278                                                                                          bVar"b'10",
33279                                                                                          bVar"b'9",
33280                                                                                          bVar"b'8",
33281                                                                                          bVar"b'7",
33282                                                                                          bVar"b'6",
33283                                                                                          bVar"b'5",
33284                                                                                          bVar"b'4",
33285                                                                                          bVar"b'3",
33286                                                                                          bVar"b'2",
33287                                                                                          bVar"b'1",
33288                                                                                          bVar"b'0"])))])),
33289                                                                   ITE(Bop(And,
33290                                                                           EQ(Var("Rt",
33291                                                                                  F4),
33292                                                                              LW(15,
33293                                                                                 4)),
33294                                                                           Bop(And,
33295                                                                               Apply
33296                                                                                 (Call
33297                                                                                    ("InITBlock",
33298                                                                                     ATy(qTy,
33299                                                                                         bTy),
33300                                                                                     LU),
33301                                                                                  qVar"s"),
33302                                                                               Mop(Not,
33303                                                                                   Apply
33304                                                                                     (Call
33305                                                                                        ("LastInITBlock",
33306                                                                                         ATy(qTy,
33307                                                                                             bTy),
33308                                                                                         LU),
33309                                                                                      qVar"s")))),
33310                                                                       Apply
33311                                                                         (Call
33312                                                                            ("DECODE_UNPREDICTABLE",
33313                                                                             ATy(qTy,
33314                                                                                 qTy),
33315                                                                             TP[Var("mc",
33316                                                                                    CTy"MachineCode"),
33317                                                                                LS
33318                                                                                 "LoadWord"]),
33319                                                                          qVar"s"),
33320                                                                       qVar"s")],
33321                                                                TP[Apply
33322                                                                     (Call
33323                                                                        ("Skip",
33324                                                                         ATy(qTy,
33325                                                                             CTy"instruction"),
33326                                                                         LU),
33327                                                                      qVar"s"),
33328                                                                   qVar"s"]))))),
33329                                               (Bop(And,
33330                                                    Mop(Not,bVar"b'23"),
33331                                                    Bop(And,bVar"b'11",
33332                                                        Bop(And,
33333                                                            bVar"b'10",
33334                                                            Bop(And,
33335                                                                bVar"b'9",
33336                                                                Mop(Not,
33337                                                                    bVar"b'8"))))),
33338                                                Let(Var("Rt",F4),
33339                                                    Mop(Cast F4,
33340                                                        LL[bVar"b'15",
33341                                                           bVar"b'14",
33342                                                           bVar"b'13",
33343                                                           bVar"b'12"]),
33344                                                    Let(TP[Var("v",F4),
33345                                                           qVar"s"],
33346                                                        Apply
33347                                                          (Call
33348                                                             ("ThumbCondition",
33349                                                              ATy(qTy,
33350                                                                  PTy(F4,
33351                                                                      qTy)),
33352                                                              LU),
33353                                                           qVar"state"),
33354                                                        Let(TP[bVar"v",
33355                                                               qVar"s"],
33356                                                            Apply
33357                                                              (Call
33358                                                                 ("Do",
33359                                                                  ATy(qTy,
33360                                                                      PTy(bTy,
33361                                                                          qTy)),
33362                                                                  TP[Var("v",
33363                                                                         F4),
33364                                                                     Apply
33365                                                                       (Call
33366                                                                          ("HaveThumb2",
33367                                                                           ATy(qTy,
33368                                                                               bTy),
33369                                                                           LU),
33370                                                                        qVar"s")]),
33371                                                               qVar"s"),
33372                                                            ITE(bVar"v",
33373                                                                TP[Call
33374                                                                     ("Load",
33375                                                                      CTy"instruction",
33376                                                                      Call
33377                                                                        ("LoadUnprivileged",
33378                                                                         CTy"Load",
33379                                                                         TP[LT,
33380                                                                            LF,
33381                                                                            Var("Rt",
33382                                                                                F4),
33383                                                                            Mop(Cast
33384                                                                                  F4,
33385                                                                                LL[bVar"b'19",
33386                                                                                   bVar"b'18",
33387                                                                                   bVar"b'17",
33388                                                                                   bVar"b'16"]),
33389                                                                            Call
33390                                                                              ("immediate_form1",
33391                                                                               CTy"offset1",
33392                                                                               Mop(Cast
33393                                                                                     F32,
33394                                                                                   Mop(Cast
33395                                                                                         F8,
33396                                                                                       LL[bVar"b'7",
33397                                                                                          bVar"b'6",
33398                                                                                          bVar"b'5",
33399                                                                                          bVar"b'4",
33400                                                                                          bVar"b'3",
33401                                                                                          bVar"b'2",
33402                                                                                          bVar"b'1",
33403                                                                                          bVar"b'0"])))])),
33404                                                                   ITE(Bop(In,
33405                                                                           Var("Rt",
33406                                                                               F4),
33407                                                                           SL[LW(13,
33408                                                                                 4),
33409                                                                              LW(15,
33410                                                                                 4)]),
33411                                                                       Apply
33412                                                                         (Call
33413                                                                            ("DECODE_UNPREDICTABLE",
33414                                                                             ATy(qTy,
33415                                                                                 qTy),
33416                                                                             TP[Var("mc",
33417                                                                                    CTy"MachineCode"),
33418                                                                                LS
33419                                                                                 "LoadUnprivileged"]),
33420                                                                          qVar"s"),
33421                                                                       qVar"s")],
33422                                                                TP[Apply
33423                                                                     (Call
33424                                                                        ("Skip",
33425                                                                         ATy(qTy,
33426                                                                             CTy"instruction"),
33427                                                                         LU),
33428                                                                      qVar"s"),
33429                                                                   qVar"s"]))))),
33430                                               (Bop(And,
33431                                                    Mop(Not,bVar"b'23"),
33432                                                    bVar"b'11"),
33433                                                Let(Var("Rn",F4),
33434                                                    Mop(Cast F4,
33435                                                        LL[bVar"b'19",
33436                                                           bVar"b'18",
33437                                                           bVar"b'17",
33438                                                           bVar"b'16"]),
33439                                                    Let(Var("W",F1),
33440                                                        Mop(Cast F1,
33441                                                            LL[bVar"b'8"]),
33442                                                        Let(Var("P",F1),
33443                                                            Mop(Cast F1,
33444                                                                LL[bVar"b'10"]),
33445                                                            Let(Var("Rt",
33446                                                                    F4),
33447                                                                Mop(Cast
33448                                                                      F4,
33449                                                                    LL[bVar"b'15",
33450                                                                       bVar"b'14",
33451                                                                       bVar"b'13",
33452                                                                       bVar"b'12"]),
33453                                                                Let(TP[Var("v",
33454                                                                           F4),
33455                                                                       qVar"s"],
33456                                                                    Apply
33457                                                                      (Call
33458                                                                         ("ThumbCondition",
33459                                                                          ATy(qTy,
33460                                                                              PTy(F4,
33461                                                                                  qTy)),
33462                                                                          LU),
33463                                                                       qVar"state"),
33464                                                                    Let(TP[bVar"v",
33465                                                                           qVar"s"],
33466                                                                        Apply
33467                                                                          (Call
33468                                                                             ("Do",
33469                                                                              ATy(qTy,
33470                                                                                  PTy(bTy,
33471                                                                                      qTy)),
33472                                                                              TP[Var("v",
33473                                                                                     F4),
33474                                                                                 Bop(And,
33475                                                                                     Bop(Or,
33476                                                                                         EQ(Var("P",
33477                                                                                                F1),
33478                                                                                            LW(1,
33479                                                                                               1)),
33480                                                                                         EQ(Var("W",
33481                                                                                                F1),
33482                                                                                            LW(1,
33483                                                                                               1))),
33484                                                                                     Apply
33485                                                                                       (Call
33486                                                                                          ("HaveThumb2",
33487                                                                                           ATy(qTy,
33488                                                                                               bTy),
33489                                                                                           LU),
33490                                                                                        qVar"s"))]),
33491                                                                           qVar"s"),
33492                                                                        ITE(bVar"v",
33493                                                                            Let(bVar"wback",
33494                                                                                EQ(Var("W",
33495                                                                                       F1),
33496                                                                                   LW(1,
33497                                                                                      1)),
33498                                                                                TP[Call
33499                                                                                     ("Load",
33500                                                                                      CTy"instruction",
33501                                                                                      Call
33502                                                                                        ("LoadWord",
33503                                                                                         CTy"Load",
33504                                                                                         TP[EQ(Mop(Cast
33505                                                                                                     F1,
33506                                                                                                   LL[bVar"b'9"]),
33507                                                                                               LW(1,
33508                                                                                                  1)),
33509                                                                                            EQ(Var("P",
33510                                                                                                   F1),
33511                                                                                               LW(1,
33512                                                                                                  1)),
33513                                                                                            bVar"wback",
33514                                                                                            Var("Rt",
33515                                                                                                F4),
33516                                                                                            Var("Rn",
33517                                                                                                F4),
33518                                                                                            Call
33519                                                                                              ("immediate_form1",
33520                                                                                               CTy"offset1",
33521                                                                                               Mop(Cast
33522                                                                                                     F32,
33523                                                                                                   Mop(Cast
33524                                                                                                         F8,
33525                                                                                                       LL[bVar"b'7",
33526                                                                                                          bVar"b'6",
33527                                                                                                          bVar"b'5",
33528                                                                                                          bVar"b'4",
33529                                                                                                          bVar"b'3",
33530                                                                                                          bVar"b'2",
33531                                                                                                          bVar"b'1",
33532                                                                                                          bVar"b'0"])))])),
33533                                                                                   ITE(Bop(Or,
33534                                                                                           Bop(And,
33535                                                                                               bVar"wback",
33536                                                                                               EQ(Var("Rn",
33537                                                                                                      F4),
33538                                                                                                  Var("Rt",
33539                                                                                                      F4))),
33540                                                                                           Bop(And,
33541                                                                                               EQ(Var("Rt",
33542                                                                                                      F4),
33543                                                                                                  LW(15,
33544                                                                                                     4)),
33545                                                                                               Bop(And,
33546                                                                                                   Apply
33547                                                                                                     (Call
33548                                                                                                        ("InITBlock",
33549                                                                                                         ATy(qTy,
33550                                                                                                             bTy),
33551                                                                                                         LU),
33552                                                                                                      qVar"s"),
33553                                                                                                   Mop(Not,
33554                                                                                                       Apply
33555                                                                                                         (Call
33556                                                                                                            ("LastInITBlock",
33557                                                                                                             ATy(qTy,
33558                                                                                                                 bTy),
33559                                                                                                             LU),
33560                                                                                                          qVar"s"))))),
33561                                                                                       Apply
33562                                                                                         (Call
33563                                                                                            ("DECODE_UNPREDICTABLE",
33564                                                                                             ATy(qTy,
33565                                                                                                 qTy),
33566                                                                                             TP[Var("mc",
33567                                                                                                    CTy"MachineCode"),
33568                                                                                                LS
33569                                                                                                 "LoadWord"]),
33570                                                                                          qVar"s"),
33571                                                                                       qVar"s")]),
33572                                                                            TP[Apply
33573                                                                                 (Call
33574                                                                                    ("Skip",
33575                                                                                     ATy(qTy,
33576                                                                                         CTy"instruction"),
33577                                                                                     LU),
33578                                                                                  qVar"s"),
33579                                                                               qVar"s"])))))))),
33580                                               (Bop(And,
33581                                                    Mop(Not,bVar"b'23"),
33582                                                    Bop(And,
33583                                                        Mop(Not,bVar"b'11"),
33584                                                        Bop(And,
33585                                                            Mop(Not,
33586                                                                bVar"b'10"),
33587                                                            Bop(And,
33588                                                                Mop(Not,
33589                                                                    bVar"b'9"),
33590                                                                Bop(And,
33591                                                                    Mop(Not,
33592                                                                        bVar"b'8"),
33593                                                                    Bop(And,
33594                                                                        Mop(Not,
33595                                                                            bVar"b'7"),
33596                                                                        Mop(Not,
33597                                                                            bVar"b'6"))))))),
33598                                                Let(Var("Rm",F4),
33599                                                    Mop(Cast F4,
33600                                                        LL[bVar"b'3",
33601                                                           bVar"b'2",
33602                                                           bVar"b'1",
33603                                                           bVar"b'0"]),
33604                                                    Let(Var("Rt",F4),
33605                                                        Mop(Cast F4,
33606                                                            LL[bVar"b'15",
33607                                                               bVar"b'14",
33608                                                               bVar"b'13",
33609                                                               bVar"b'12"]),
33610                                                        Let(TP[Var("v",F4),
33611                                                               qVar"s"],
33612                                                            Apply
33613                                                              (Call
33614                                                                 ("ThumbCondition",
33615                                                                  ATy(qTy,
33616                                                                      PTy(F4,
33617                                                                          qTy)),
33618                                                                  LU),
33619                                                               qVar"state"),
33620                                                            Let(TP[bVar"v",
33621                                                                   qVar"s"],
33622                                                                Apply
33623                                                                  (Call
33624                                                                     ("Do",
33625                                                                      ATy(qTy,
33626                                                                          PTy(bTy,
33627                                                                              qTy)),
33628                                                                      TP[Var("v",
33629                                                                             F4),
33630                                                                         Apply
33631                                                                           (Call
33632                                                                              ("HaveThumb2",
33633                                                                               ATy(qTy,
33634                                                                                   bTy),
33635                                                                               LU),
33636                                                                            qVar"s")]),
33637                                                                   qVar"s"),
33638                                                                ITE(bVar"v",
33639                                                                    TP[Call
33640                                                                         ("Load",
33641                                                                          CTy"instruction",
33642                                                                          Call
33643                                                                            ("LoadWord",
33644                                                                             CTy"Load",
33645                                                                             TP[LT,
33646                                                                                LT,
33647                                                                                LF,
33648                                                                                Var("Rt",
33649                                                                                    F4),
33650                                                                                Mop(Cast
33651                                                                                      F4,
33652                                                                                    LL[bVar"b'19",
33653                                                                                       bVar"b'18",
33654                                                                                       bVar"b'17",
33655                                                                                       bVar"b'16"]),
33656                                                                                Call
33657                                                                                  ("register_form1",
33658                                                                                   CTy"offset1",
33659                                                                                   TP[Var("Rm",
33660                                                                                          F4),
33661                                                                                      LC("SRType_LSL",
33662                                                                                         CTy"SRType"),
33663                                                                                      Mop(Cast
33664                                                                                            nTy,
33665                                                                                          Mop(Cast
33666                                                                                                (FTy 2),
33667                                                                                              LL[bVar"b'5",
33668                                                                                                 bVar"b'4"]))])])),
33669                                                                       ITE(Bop(Or,
33670                                                                               Bop(And,
33671                                                                                   EQ(Var("Rt",
33672                                                                                          F4),
33673                                                                                      LW(15,
33674                                                                                         4)),
33675                                                                                   Bop(And,
33676                                                                                       Apply
33677                                                                                         (Call
33678                                                                                            ("InITBlock",
33679                                                                                             ATy(qTy,
33680                                                                                                 bTy),
33681                                                                                             LU),
33682                                                                                          qVar"s"),
33683                                                                                       Mop(Not,
33684                                                                                           Apply
33685                                                                                             (Call
33686                                                                                                ("LastInITBlock",
33687                                                                                                 ATy(qTy,
33688                                                                                                     bTy),
33689                                                                                                 LU),
33690                                                                                              qVar"s")))),
33691                                                                               Bop(In,
33692                                                                                   Var("Rm",
33693                                                                                       F4),
33694                                                                                   SL[LW(13,
33695                                                                                         4),
33696                                                                                      LW(15,
33697                                                                                         4)])),
33698                                                                           Apply
33699                                                                             (Call
33700                                                                                ("DECODE_UNPREDICTABLE",
33701                                                                                 ATy(qTy,
33702                                                                                     qTy),
33703                                                                                 TP[Var("mc",
33704                                                                                        CTy"MachineCode"),
33705                                                                                    LS
33706                                                                                     "LoadWord"]),
33707                                                                              qVar"s"),
33708                                                                           qVar"s")],
33709                                                                    TP[Apply
33710                                                                         (Call
33711                                                                            ("Skip",
33712                                                                             ATy(qTy,
33713                                                                                 CTy"instruction"),
33714                                                                             LU),
33715                                                                          qVar"s"),
33716                                                                       qVar"s"]))))))],
33717                                              Apply
33718                                                (Call
33719                                                   ("UndefinedThumb",
33720                                                    ATy(qTy,
33721                                                        PTy(CTy"instruction",
33722                                                            qTy)),LU),
33723                                                 qVar"state")),
33724                                          Apply
33725                                            (Call
33726                                               ("UndefinedThumb",
33727                                                ATy(qTy,
33728                                                    PTy(CTy"instruction",
33729                                                        qTy)),LU),
33730                                             qVar"state"))),
33731                                     (Bop(And,bVar"b'31",
33732                                          Bop(And,bVar"b'30",
33733                                              Bop(And,bVar"b'29",
33734                                                  Bop(And,
33735                                                      Mop(Not,bVar"b'26"),
33736                                                      Bop(And,
33737                                                          Mop(Not,
33738                                                              bVar"b'24"),
33739                                                          Mop(Not,
33740                                                              bVar"b'21")))))),
33741                                      ITB([(Bop(And,Mop(Not,bVar"b'23"),
33742                                                Bop(And,
33743                                                    Mop(Not,bVar"b'11"),
33744                                                    Bop(And,
33745                                                        Mop(Not,bVar"b'10"),
33746                                                        Bop(And,
33747                                                            Mop(Not,
33748                                                                bVar"b'9"),
33749                                                            Bop(And,
33750                                                                Mop(Not,
33751                                                                    bVar"b'8"),
33752                                                                Bop(And,
33753                                                                    Mop(Not,
33754                                                                        bVar"b'7"),
33755                                                                    Mop(Not,
33756                                                                        bVar"b'6"))))))),
33757                                            Let(Var("Rn",F4),
33758                                                Mop(Cast F4,
33759                                                    LL[bVar"b'19",
33760                                                       bVar"b'18",
33761                                                       bVar"b'17",
33762                                                       bVar"b'16"]),
33763                                                Let(Var("Rm",F4),
33764                                                    Mop(Cast F4,
33765                                                        LL[bVar"b'3",
33766                                                           bVar"b'2",
33767                                                           bVar"b'1",
33768                                                           bVar"b'0"]),
33769                                                    Let(Var("Rt",F4),
33770                                                        Mop(Cast F4,
33771                                                            LL[bVar"b'15",
33772                                                               bVar"b'14",
33773                                                               bVar"b'13",
33774                                                               bVar"b'12"]),
33775                                                        Let(TP[Var("v",F4),
33776                                                               qVar"s"],
33777                                                            Apply
33778                                                              (Call
33779                                                                 ("ThumbCondition",
33780                                                                  ATy(qTy,
33781                                                                      PTy(F4,
33782                                                                          qTy)),
33783                                                                  LU),
33784                                                               qVar"state"),
33785                                                            Let(TP[bVar"v",
33786                                                                   qVar"s"],
33787                                                                Apply
33788                                                                  (Call
33789                                                                     ("Do",
33790                                                                      ATy(qTy,
33791                                                                          PTy(bTy,
33792                                                                              qTy)),
33793                                                                      TP[Var("v",
33794                                                                             F4),
33795                                                                         Bop(And,
33796                                                                             Mop(Not,
33797                                                                                 EQ(Var("Rn",
33798                                                                                        F4),
33799                                                                                    LW(15,
33800                                                                                       4))),
33801                                                                             Apply
33802                                                                               (Call
33803                                                                                  ("HaveThumb2",
33804                                                                                   ATy(qTy,
33805                                                                                       bTy),
33806                                                                                   LU),
33807                                                                                qVar"s"))]),
33808                                                                   qVar"s"),
33809                                                                ITE(bVar"v",
33810                                                                    TP[Call
33811                                                                         ("Store",
33812                                                                          CTy"instruction",
33813                                                                          Call
33814                                                                            ("StoreWord",
33815                                                                             CTy"Store",
33816                                                                             TP[LT,
33817                                                                                LT,
33818                                                                                LF,
33819                                                                                Var("Rt",
33820                                                                                    F4),
33821                                                                                Var("Rn",
33822                                                                                    F4),
33823                                                                                Call
33824                                                                                  ("register_form1",
33825                                                                                   CTy"offset1",
33826                                                                                   TP[Var("Rm",
33827                                                                                          F4),
33828                                                                                      LC("SRType_LSL",
33829                                                                                         CTy"SRType"),
33830                                                                                      Mop(Cast
33831                                                                                            nTy,
33832                                                                                          Mop(Cast
33833                                                                                                (FTy 2),
33834                                                                                              LL[bVar"b'5",
33835                                                                                                 bVar"b'4"]))])])),
33836                                                                       ITE(Bop(Or,
33837                                                                               EQ(Var("Rt",
33838                                                                                      F4),
33839                                                                                  LW(15,
33840                                                                                     4)),
33841                                                                               Bop(In,
33842                                                                                   Var("Rm",
33843                                                                                       F4),
33844                                                                                   SL[LW(13,
33845                                                                                         4),
33846                                                                                      LW(15,
33847                                                                                         4)])),
33848                                                                           Apply
33849                                                                             (Call
33850                                                                                ("DECODE_UNPREDICTABLE",
33851                                                                                 ATy(qTy,
33852                                                                                     qTy),
33853                                                                                 TP[Var("mc",
33854                                                                                        CTy"MachineCode"),
33855                                                                                    LS
33856                                                                                     "Store (register)"]),
33857                                                                              qVar"s"),
33858                                                                           qVar"s")],
33859                                                                    TP[Apply
33860                                                                         (Call
33861                                                                            ("Skip",
33862                                                                             ATy(qTy,
33863                                                                                 CTy"instruction"),
33864                                                                             LU),
33865                                                                          qVar"s"),
33866                                                                       qVar"s"]))))))),
33867                                           (Bop(And,Mop(Not,bVar"b'23"),
33868                                                Bop(And,bVar"b'11",
33869                                                    Bop(And,bVar"b'10",
33870                                                        Bop(And,bVar"b'9",
33871                                                            Mop(Not,
33872                                                                bVar"b'8"))))),
33873                                            Let(Var("Rn",F4),
33874                                                Mop(Cast F4,
33875                                                    LL[bVar"b'19",
33876                                                       bVar"b'18",
33877                                                       bVar"b'17",
33878                                                       bVar"b'16"]),
33879                                                Let(Var("Rt",F4),
33880                                                    Mop(Cast F4,
33881                                                        LL[bVar"b'15",
33882                                                           bVar"b'14",
33883                                                           bVar"b'13",
33884                                                           bVar"b'12"]),
33885                                                    Let(TP[Var("v",F4),
33886                                                           qVar"s"],
33887                                                        Apply
33888                                                          (Call
33889                                                             ("ThumbCondition",
33890                                                              ATy(qTy,
33891                                                                  PTy(F4,
33892                                                                      qTy)),
33893                                                              LU),
33894                                                           qVar"state"),
33895                                                        Let(TP[bVar"v",
33896                                                               qVar"s"],
33897                                                            Apply
33898                                                              (Call
33899                                                                 ("Do",
33900                                                                  ATy(qTy,
33901                                                                      PTy(bTy,
33902                                                                          qTy)),
33903                                                                  TP[Var("v",
33904                                                                         F4),
33905                                                                     Bop(And,
33906                                                                         Mop(Not,
33907                                                                             EQ(Var("Rn",
33908                                                                                    F4),
33909                                                                                LW(15,
33910                                                                                   4))),
33911                                                                         Apply
33912                                                                           (Call
33913                                                                              ("HaveThumb2",
33914                                                                               ATy(qTy,
33915                                                                                   bTy),
33916                                                                               LU),
33917                                                                            qVar"s"))]),
33918                                                               qVar"s"),
33919                                                            ITE(bVar"v",
33920                                                                TP[Call
33921                                                                     ("Store",
33922                                                                      CTy"instruction",
33923                                                                      Call
33924                                                                        ("StoreUnprivileged",
33925                                                                         CTy"Store",
33926                                                                         TP[LT,
33927                                                                            LF,
33928                                                                            Var("Rt",
33929                                                                                F4),
33930                                                                            Var("Rn",
33931                                                                                F4),
33932                                                                            Call
33933                                                                              ("immediate_form1",
33934                                                                               CTy"offset1",
33935                                                                               Mop(Cast
33936                                                                                     F32,
33937                                                                                   Mop(Cast
33938                                                                                         F8,
33939                                                                                       LL[bVar"b'7",
33940                                                                                          bVar"b'6",
33941                                                                                          bVar"b'5",
33942                                                                                          bVar"b'4",
33943                                                                                          bVar"b'3",
33944                                                                                          bVar"b'2",
33945                                                                                          bVar"b'1",
33946                                                                                          bVar"b'0"])))])),
33947                                                                   ITE(Bop(In,
33948                                                                           Var("Rt",
33949                                                                               F4),
33950                                                                           SL[LW(13,
33951                                                                                 4),
33952                                                                              LW(15,
33953                                                                                 4)]),
33954                                                                       Apply
33955                                                                         (Call
33956                                                                            ("DECODE_UNPREDICTABLE",
33957                                                                             ATy(qTy,
33958                                                                                 qTy),
33959                                                                             TP[Var("mc",
33960                                                                                    CTy"MachineCode"),
33961                                                                                LS
33962                                                                                 "StoreUnprivileged"]),
33963                                                                          qVar"s"),
33964                                                                       qVar"s")],
33965                                                                TP[Apply
33966                                                                     (Call
33967                                                                        ("Skip",
33968                                                                         ATy(qTy,
33969                                                                             CTy"instruction"),
33970                                                                         LU),
33971                                                                      qVar"s"),
33972                                                                   qVar"s"])))))),
33973                                           (Bop(And,Mop(Not,bVar"b'23"),
33974                                                bVar"b'11"),
33975                                            Let(Var("Rn",F4),
33976                                                Mop(Cast F4,
33977                                                    LL[bVar"b'19",
33978                                                       bVar"b'18",
33979                                                       bVar"b'17",
33980                                                       bVar"b'16"]),
33981                                                Let(Var("W",F1),
33982                                                    Mop(Cast F1,
33983                                                        LL[bVar"b'8"]),
33984                                                    Let(Var("P",F1),
33985                                                        Mop(Cast F1,
33986                                                            LL[bVar"b'10"]),
33987                                                        Let(Var("Rt",F4),
33988                                                            Mop(Cast F4,
33989                                                                LL[bVar"b'15",
33990                                                                   bVar"b'14",
33991                                                                   bVar"b'13",
33992                                                                   bVar"b'12"]),
33993                                                            Let(TP[Var("v",
33994                                                                       F4),
33995                                                                   qVar"s"],
33996                                                                Apply
33997                                                                  (Call
33998                                                                     ("ThumbCondition",
33999                                                                      ATy(qTy,
34000                                                                          PTy(F4,
34001                                                                              qTy)),
34002                                                                      LU),
34003                                                                   qVar"state"),
34004                                                                Let(TP[bVar"v",
34005                                                                       qVar"s"],
34006                                                                    Apply
34007                                                                      (Call
34008                                                                         ("Do",
34009                                                                          ATy(qTy,
34010                                                                              PTy(bTy,
34011                                                                                  qTy)),
34012                                                                          TP[Var("v",
34013                                                                                 F4),
34014                                                                             Bop(And,
34015                                                                                 Mop(Not,
34016                                                                                     EQ(Var("Rn",
34017                                                                                            F4),
34018                                                                                        LW(15,
34019                                                                                           4))),
34020                                                                                 Bop(And,
34021                                                                                     Bop(Or,
34022                                                                                         EQ(Var("P",
34023                                                                                                F1),
34024                                                                                            LW(1,
34025                                                                                               1)),
34026                                                                                         EQ(Var("W",
34027                                                                                                F1),
34028                                                                                            LW(1,
34029                                                                                               1))),
34030                                                                                     Apply
34031                                                                                       (Call
34032                                                                                          ("HaveThumb2",
34033                                                                                           ATy(qTy,
34034                                                                                               bTy),
34035                                                                                           LU),
34036                                                                                        qVar"s")))]),
34037                                                                       qVar"s"),
34038                                                                    ITE(bVar"v",
34039                                                                        Let(bVar"wback",
34040                                                                            EQ(Var("W",
34041                                                                                   F1),
34042                                                                               LW(1,
34043                                                                                  1)),
34044                                                                            TP[Call
34045                                                                                 ("Store",
34046                                                                                  CTy"instruction",
34047                                                                                  Call
34048                                                                                    ("StoreWord",
34049                                                                                     CTy"Store",
34050                                                                                     TP[EQ(Mop(Cast
34051                                                                                                 F1,
34052                                                                                               LL[bVar"b'9"]),
34053                                                                                           LW(1,
34054                                                                                              1)),
34055                                                                                        EQ(Var("P",
34056                                                                                               F1),
34057                                                                                           LW(1,
34058                                                                                              1)),
34059                                                                                        bVar"wback",
34060                                                                                        Var("Rt",
34061                                                                                            F4),
34062                                                                                        Var("Rn",
34063                                                                                            F4),
34064                                                                                        Call
34065                                                                                          ("immediate_form1",
34066                                                                                           CTy"offset1",
34067                                                                                           Mop(Cast
34068                                                                                                 F32,
34069                                                                                               Mop(Cast
34070                                                                                                     F8,
34071                                                                                                   LL[bVar"b'7",
34072                                                                                                      bVar"b'6",
34073                                                                                                      bVar"b'5",
34074                                                                                                      bVar"b'4",
34075                                                                                                      bVar"b'3",
34076                                                                                                      bVar"b'2",
34077                                                                                                      bVar"b'1",
34078                                                                                                      bVar"b'0"])))])),
34079                                                                               ITE(Bop(Or,
34080                                                                                       EQ(Var("Rt",
34081                                                                                              F4),
34082                                                                                          LW(15,
34083                                                                                             4)),
34084                                                                                       Bop(And,
34085                                                                                           bVar"wback",
34086                                                                                           EQ(Var("Rn",
34087                                                                                                  F4),
34088                                                                                              Var("Rt",
34089                                                                                                  F4)))),
34090                                                                                   Apply
34091                                                                                     (Call
34092                                                                                        ("DECODE_UNPREDICTABLE",
34093                                                                                         ATy(qTy,
34094                                                                                             qTy),
34095                                                                                         TP[Var("mc",
34096                                                                                                CTy"MachineCode"),
34097                                                                                            LS
34098                                                                                             "Store (immediate)"]),
34099                                                                                      qVar"s"),
34100                                                                                   qVar"s")]),
34101                                                                        TP[Apply
34102                                                                             (Call
34103                                                                                ("Skip",
34104                                                                                 ATy(qTy,
34105                                                                                     CTy"instruction"),
34106                                                                                 LU),
34107                                                                              qVar"s"),
34108                                                                           qVar"s"])))))))),
34109                                           (bVar"b'23",
34110                                            Let(Var("Rn",F4),
34111                                                Mop(Cast F4,
34112                                                    LL[bVar"b'19",
34113                                                       bVar"b'18",
34114                                                       bVar"b'17",
34115                                                       bVar"b'16"]),
34116                                                Let(Var("Rt",F4),
34117                                                    Mop(Cast F4,
34118                                                        LL[bVar"b'15",
34119                                                           bVar"b'14",
34120                                                           bVar"b'13",
34121                                                           bVar"b'12"]),
34122                                                    Let(TP[Var("v",F4),
34123                                                           qVar"s"],
34124                                                        Apply
34125                                                          (Call
34126                                                             ("ThumbCondition",
34127                                                              ATy(qTy,
34128                                                                  PTy(F4,
34129                                                                      qTy)),
34130                                                              LU),
34131                                                           qVar"state"),
34132                                                        Let(TP[bVar"v",
34133                                                               qVar"s"],
34134                                                            Apply
34135                                                              (Call
34136                                                                 ("Do",
34137                                                                  ATy(qTy,
34138                                                                      PTy(bTy,
34139                                                                          qTy)),
34140                                                                  TP[Var("v",
34141                                                                         F4),
34142                                                                     Bop(And,
34143                                                                         Mop(Not,
34144                                                                             EQ(Var("Rn",
34145                                                                                    F4),
34146                                                                                LW(15,
34147                                                                                   4))),
34148                                                                         Apply
34149                                                                           (Call
34150                                                                              ("HaveThumb2",
34151                                                                               ATy(qTy,
34152                                                                                   bTy),
34153                                                                               LU),
34154                                                                            qVar"s"))]),
34155                                                               qVar"s"),
34156                                                            ITE(bVar"v",
34157                                                                TP[Call
34158                                                                     ("Store",
34159                                                                      CTy"instruction",
34160                                                                      Call
34161                                                                        ("StoreWord",
34162                                                                         CTy"Store",
34163                                                                         TP[LT,
34164                                                                            LT,
34165                                                                            LF,
34166                                                                            Var("Rt",
34167                                                                                F4),
34168                                                                            Var("Rn",
34169                                                                                F4),
34170                                                                            Call
34171                                                                              ("immediate_form1",
34172                                                                               CTy"offset1",
34173                                                                               Mop(Cast
34174                                                                                     F32,
34175                                                                                   Mop(Cast
34176                                                                                         (FTy 12),
34177                                                                                       LL[bVar"b'11",
34178                                                                                          bVar"b'10",
34179                                                                                          bVar"b'9",
34180                                                                                          bVar"b'8",
34181                                                                                          bVar"b'7",
34182                                                                                          bVar"b'6",
34183                                                                                          bVar"b'5",
34184                                                                                          bVar"b'4",
34185                                                                                          bVar"b'3",
34186                                                                                          bVar"b'2",
34187                                                                                          bVar"b'1",
34188                                                                                          bVar"b'0"])))])),
34189                                                                   ITE(EQ(Var("Rt",
34190                                                                              F4),
34191                                                                          LW(15,
34192                                                                             4)),
34193                                                                       Apply
34194                                                                         (Call
34195                                                                            ("DECODE_UNPREDICTABLE",
34196                                                                             ATy(qTy,
34197                                                                                 qTy),
34198                                                                             TP[Var("mc",
34199                                                                                    CTy"MachineCode"),
34200                                                                                LS
34201                                                                                 "Store (immediate)"]),
34202                                                                          qVar"s"),
34203                                                                       qVar"s")],
34204                                                                TP[Apply
34205                                                                     (Call
34206                                                                        ("Skip",
34207                                                                         ATy(qTy,
34208                                                                             CTy"instruction"),
34209                                                                         LU),
34210                                                                      qVar"s"),
34211                                                                   qVar"s"]))))))],
34212                                          Apply
34213                                            (Call
34214                                               ("UndefinedThumb",
34215                                                ATy(qTy,
34216                                                    PTy(CTy"instruction",
34217                                                        qTy)),LU),
34218                                             qVar"state")))],
34219                                    Apply
34220                                      (Call
34221                                         ("UndefinedThumb",
34222                                          ATy(qTy,
34223                                              PTy(CTy"instruction",qTy)),
34224                                          LU),qVar"state"))),
34225                               (bVar"b'20",
34226                                ITE(Bop(And,bVar"b'31",
34227                                        Bop(And,bVar"b'30",
34228                                            Bop(And,bVar"b'29",
34229                                                Mop(Not,bVar"b'26")))),
34230                                    ITB([(Bop(And,Mop(Not,bVar"b'24"),
34231                                              Bop(And,bVar"b'21",
34232                                                  Bop(And,bVar"b'19",
34233                                                      Bop(And,bVar"b'18",
34234                                                          Bop(And,
34235                                                              bVar"b'17",
34236                                                              Bop(And,
34237                                                                  bVar"b'16",
34238                                                                  Bop(And,
34239                                                                      bVar"b'15",
34240                                                                      Bop(And,
34241                                                                          bVar"b'14",
34242                                                                          Bop(And,
34243                                                                              bVar"b'13",
34244                                                                              bVar"b'12"))))))))),
34245                                          TP[LX(CTy"instruction"),
34246                                             Apply
34247                                               (Call
34248                                                  ("DECODE_UNPREDICTABLE",
34249                                                   ATy(qTy,qTy),
34250                                                   TP[Var("mc",
34251                                                          CTy"MachineCode"),
34252                                                      LS
34253                                                       "PreloadDataLiteral"]),
34254                                                qVar"state")]),
34255                                         (Bop(And,Mop(Not,bVar"b'24"),
34256                                              Bop(And,bVar"b'19",
34257                                                  Bop(And,bVar"b'18",
34258                                                      Bop(And,bVar"b'17",
34259                                                          Bop(And,
34260                                                              bVar"b'16",
34261                                                              Bop(And,
34262                                                                  bVar"b'15",
34263                                                                  Bop(And,
34264                                                                      bVar"b'14",
34265                                                                      Bop(And,
34266                                                                          bVar"b'13",
34267                                                                          bVar"b'12")))))))),
34268                                          Let(TP[Var("v",F4),qVar"s"],
34269                                              Apply
34270                                                (Call
34271                                                   ("ThumbCondition",
34272                                                    ATy(qTy,PTy(F4,qTy)),
34273                                                    LU),qVar"state"),
34274                                              Let(TP[bVar"v",qVar"s"],
34275                                                  Apply
34276                                                    (Call
34277                                                       ("Do",
34278                                                        ATy(qTy,
34279                                                            PTy(bTy,qTy)),
34280                                                        TP[Var("v",F4),
34281                                                           Apply
34282                                                             (Call
34283                                                                ("HaveThumb2",
34284                                                                 ATy(qTy,
34285                                                                     bTy),
34286                                                                 LU),
34287                                                              qVar"s")]),
34288                                                     qVar"s"),
34289                                                  ITE(bVar"v",
34290                                                      TP[Call
34291                                                           ("Hint",
34292                                                            CTy"instruction",
34293                                                            Call
34294                                                              ("PreloadDataLiteral",
34295                                                               CTy"Hint",
34296                                                               TP[EQ(Mop(Cast
34297                                                                           F1,
34298                                                                         LL[bVar"b'23"]),
34299                                                                     LW(1,
34300                                                                        1)),
34301                                                                  Mop(Cast
34302                                                                        F32,
34303                                                                      Mop(Cast
34304                                                                            (FTy 12),
34305                                                                          LL[bVar"b'11",
34306                                                                             bVar"b'10",
34307                                                                             bVar"b'9",
34308                                                                             bVar"b'8",
34309                                                                             bVar"b'7",
34310                                                                             bVar"b'6",
34311                                                                             bVar"b'5",
34312                                                                             bVar"b'4",
34313                                                                             bVar"b'3",
34314                                                                             bVar"b'2",
34315                                                                             bVar"b'1",
34316                                                                             bVar"b'0"]))])),
34317                                                         ITE(Mop(Not,
34318                                                                 EQ(Mop(Cast
34319                                                                          F1,
34320                                                                        LL[bVar"b'21"]),
34321                                                                    LW(0,1))),
34322                                                             Apply
34323                                                               (Call
34324                                                                  ("DECODE_UNPREDICTABLE",
34325                                                                   ATy(qTy,
34326                                                                       qTy),
34327                                                                   TP[Var("mc",
34328                                                                          CTy"MachineCode"),
34329                                                                      LS
34330                                                                       "PLD"]),
34331                                                                qVar"s"),
34332                                                             qVar"s")],
34333                                                      TP[Apply
34334                                                           (Call
34335                                                              ("Skip",
34336                                                               ATy(qTy,
34337                                                                   CTy"instruction"),
34338                                                               LU),qVar"s"),
34339                                                         qVar"s"])))),
34340                                         (Bop(And,bVar"b'24",
34341                                              Bop(And,Mop(Not,bVar"b'21"),
34342                                                  Bop(And,bVar"b'19",
34343                                                      Bop(And,bVar"b'18",
34344                                                          Bop(And,
34345                                                              bVar"b'17",
34346                                                              Bop(And,
34347                                                                  bVar"b'16",
34348                                                                  Bop(And,
34349                                                                      bVar"b'15",
34350                                                                      Bop(And,
34351                                                                          bVar"b'14",
34352                                                                          Bop(And,
34353                                                                              bVar"b'13",
34354                                                                              bVar"b'12"))))))))),
34355                                          Let(TP[Var("v",F4),qVar"s"],
34356                                              Apply
34357                                                (Call
34358                                                   ("ThumbCondition",
34359                                                    ATy(qTy,PTy(F4,qTy)),
34360                                                    LU),qVar"state"),
34361                                              Let(TP[bVar"v",qVar"s"],
34362                                                  Apply
34363                                                    (Call
34364                                                       ("Do",
34365                                                        ATy(qTy,
34366                                                            PTy(bTy,qTy)),
34367                                                        TP[Var("v",F4),
34368                                                           Bop(Ge,
34369                                                               Apply
34370                                                                 (Call
34371                                                                    ("ArchVersion",
34372                                                                     ATy(qTy,
34373                                                                         nTy),
34374                                                                     LU),
34375                                                                  qVar"s"),
34376                                                               LN 7)]),
34377                                                     qVar"s"),
34378                                                  TP[ITE(bVar"v",
34379                                                         Call
34380                                                           ("Hint",
34381                                                            CTy"instruction",
34382                                                            Call
34383                                                              ("PreloadInstruction",
34384                                                               CTy"Hint",
34385                                                               TP[EQ(Mop(Cast
34386                                                                           F1,
34387                                                                         LL[bVar"b'23"]),
34388                                                                     LW(1,
34389                                                                        1)),
34390                                                                  LW(15,4),
34391                                                                  Call
34392                                                                    ("immediate_form1",
34393                                                                     CTy"offset1",
34394                                                                     Mop(Cast
34395                                                                           F32,
34396                                                                         Mop(Cast
34397                                                                               (FTy 12),
34398                                                                             LL[bVar"b'11",
34399                                                                                bVar"b'10",
34400                                                                                bVar"b'9",
34401                                                                                bVar"b'8",
34402                                                                                bVar"b'7",
34403                                                                                bVar"b'6",
34404                                                                                bVar"b'5",
34405                                                                                bVar"b'4",
34406                                                                                bVar"b'3",
34407                                                                                bVar"b'2",
34408                                                                                bVar"b'1",
34409                                                                                bVar"b'0"])))])),
34410                                                         Apply
34411                                                           (Call
34412                                                              ("Skip",
34413                                                               ATy(qTy,
34414                                                                   CTy"instruction"),
34415                                                               LU),qVar"s")),
34416                                                     qVar"s"]))),
34417                                         (Bop(And,bVar"b'24",
34418                                              Bop(And,bVar"b'23",
34419                                                  Bop(And,
34420                                                      Mop(Not,bVar"b'21"),
34421                                                      Bop(And,bVar"b'15",
34422                                                          Bop(And,
34423                                                              bVar"b'14",
34424                                                              Bop(And,
34425                                                                  bVar"b'13",
34426                                                                  bVar"b'12")))))),
34427                                          Let(TP[Var("v",F4),qVar"s"],
34428                                              Apply
34429                                                (Call
34430                                                   ("ThumbCondition",
34431                                                    ATy(qTy,PTy(F4,qTy)),
34432                                                    LU),qVar"state"),
34433                                              Let(TP[bVar"v",qVar"s"],
34434                                                  Apply
34435                                                    (Call
34436                                                       ("Do",
34437                                                        ATy(qTy,
34438                                                            PTy(bTy,qTy)),
34439                                                        TP[Var("v",F4),
34440                                                           Bop(Ge,
34441                                                               Apply
34442                                                                 (Call
34443                                                                    ("ArchVersion",
34444                                                                     ATy(qTy,
34445                                                                         nTy),
34446                                                                     LU),
34447                                                                  qVar"s"),
34448                                                               LN 7)]),
34449                                                     qVar"s"),
34450                                                  TP[ITE(bVar"v",
34451                                                         Call
34452                                                           ("Hint",
34453                                                            CTy"instruction",
34454                                                            Call
34455                                                              ("PreloadInstruction",
34456                                                               CTy"Hint",
34457                                                               TP[LT,
34458                                                                  Mop(Cast
34459                                                                        F4,
34460                                                                      LL[bVar"b'19",
34461                                                                         bVar"b'18",
34462                                                                         bVar"b'17",
34463                                                                         bVar"b'16"]),
34464                                                                  Call
34465                                                                    ("immediate_form1",
34466                                                                     CTy"offset1",
34467                                                                     Mop(Cast
34468                                                                           F32,
34469                                                                         Mop(Cast
34470                                                                               (FTy 12),
34471                                                                             LL[bVar"b'11",
34472                                                                                bVar"b'10",
34473                                                                                bVar"b'9",
34474                                                                                bVar"b'8",
34475                                                                                bVar"b'7",
34476                                                                                bVar"b'6",
34477                                                                                bVar"b'5",
34478                                                                                bVar"b'4",
34479                                                                                bVar"b'3",
34480                                                                                bVar"b'2",
34481                                                                                bVar"b'1",
34482                                                                                bVar"b'0"])))])),
34483                                                         Apply
34484                                                           (Call
34485                                                              ("Skip",
34486                                                               ATy(qTy,
34487                                                                   CTy"instruction"),
34488                                                               LU),qVar"s")),
34489                                                     qVar"s"]))),
34490                                         (Bop(And,Mop(Not,bVar"b'24"),
34491                                              Bop(And,bVar"b'23",
34492                                                  Bop(And,bVar"b'15",
34493                                                      Bop(And,bVar"b'14",
34494                                                          Bop(And,
34495                                                              bVar"b'13",
34496                                                              bVar"b'12"))))),
34497                                          Let(Var("W",F1),
34498                                              Mop(Cast F1,LL[bVar"b'21"]),
34499                                              Let(TP[Var("v",F4),qVar"s"],
34500                                                  Apply
34501                                                    (Call
34502                                                       ("ThumbCondition",
34503                                                        ATy(qTy,
34504                                                            PTy(F4,qTy)),
34505                                                        LU),qVar"state"),
34506                                                  Let(TP[bVar"v",qVar"s"],
34507                                                      Apply
34508                                                        (Call
34509                                                           ("Do",
34510                                                            ATy(qTy,
34511                                                                PTy(bTy,
34512                                                                    qTy)),
34513                                                            TP[Var("v",F4),
34514                                                               ITE(EQ(Var("W",
34515                                                                          F1),
34516                                                                      LW(1,
34517                                                                         1)),
34518                                                                   Apply
34519                                                                     (Call
34520                                                                        ("HaveMPExt",
34521                                                                         ATy(qTy,
34522                                                                             bTy),
34523                                                                         LU),
34524                                                                      qVar"s"),
34525                                                                   Apply
34526                                                                     (Call
34527                                                                        ("HaveThumb2",
34528                                                                         ATy(qTy,
34529                                                                             bTy),
34530                                                                         LU),
34531                                                                      qVar"s"))]),
34532                                                         qVar"s"),
34533                                                      TP[ITE(bVar"v",
34534                                                             Call
34535                                                               ("Hint",
34536                                                                CTy"instruction",
34537                                                                Call
34538                                                                  ("PreloadData",
34539                                                                   CTy"Hint",
34540                                                                   TP[LT,
34541                                                                      EQ(Var("W",
34542                                                                             F1),
34543                                                                         LW(1,
34544                                                                            1)),
34545                                                                      Mop(Cast
34546                                                                            F4,
34547                                                                          LL[bVar"b'19",
34548                                                                             bVar"b'18",
34549                                                                             bVar"b'17",
34550                                                                             bVar"b'16"]),
34551                                                                      Call
34552                                                                        ("immediate_form1",
34553                                                                         CTy"offset1",
34554                                                                         Mop(Cast
34555                                                                               F32,
34556                                                                             Mop(Cast
34557                                                                                   (FTy 12),
34558                                                                                 LL[bVar"b'11",
34559                                                                                    bVar"b'10",
34560                                                                                    bVar"b'9",
34561                                                                                    bVar"b'8",
34562                                                                                    bVar"b'7",
34563                                                                                    bVar"b'6",
34564                                                                                    bVar"b'5",
34565                                                                                    bVar"b'4",
34566                                                                                    bVar"b'3",
34567                                                                                    bVar"b'2",
34568                                                                                    bVar"b'1",
34569                                                                                    bVar"b'0"])))])),
34570                                                             Apply
34571                                                               (Call
34572                                                                  ("Skip",
34573                                                                   ATy(qTy,
34574                                                                       CTy"instruction"),
34575                                                                   LU),
34576                                                                qVar"s")),
34577                                                         qVar"s"])))),
34578                                         (Bop(And,bVar"b'24",
34579                                              Bop(And,bVar"b'21",
34580                                                  Bop(And,bVar"b'19",
34581                                                      Bop(And,bVar"b'18",
34582                                                          Bop(And,
34583                                                              bVar"b'17",
34584                                                              Bop(And,
34585                                                                  bVar"b'16",
34586                                                                  Bop(And,
34587                                                                      bVar"b'15",
34588                                                                      Bop(And,
34589                                                                          bVar"b'14",
34590                                                                          Bop(And,
34591                                                                              bVar"b'13",
34592                                                                              bVar"b'12"))))))))),
34593                                          TP[Const
34594                                               ("NoOperation",
34595                                                CTy"instruction"),
34596                                             qVar"state"]),
34597                                         (Bop(And,bVar"b'19",
34598                                              Bop(And,bVar"b'18",
34599                                                  Bop(And,bVar"b'17",
34600                                                      bVar"b'16"))),
34601                                          Let(Var("Rt",F4),
34602                                              Mop(Cast F4,
34603                                                  LL[bVar"b'15",
34604                                                     bVar"b'14",
34605                                                     bVar"b'13",bVar"b'12"]),
34606                                              Let(TP[Var("v",F4),qVar"s"],
34607                                                  Apply
34608                                                    (Call
34609                                                       ("ThumbCondition",
34610                                                        ATy(qTy,
34611                                                            PTy(F4,qTy)),
34612                                                        LU),qVar"state"),
34613                                                  Let(TP[bVar"v",qVar"s"],
34614                                                      Apply
34615                                                        (Call
34616                                                           ("Do",
34617                                                            ATy(qTy,
34618                                                                PTy(bTy,
34619                                                                    qTy)),
34620                                                            TP[Var("v",F4),
34621                                                               Apply
34622                                                                 (Call
34623                                                                    ("HaveThumb2",
34624                                                                     ATy(qTy,
34625                                                                         bTy),
34626                                                                     LU),
34627                                                                  qVar"s")]),
34628                                                         qVar"s"),
34629                                                      ITE(bVar"v",
34630                                                          TP[Let(Var("imm32",
34631                                                                     F32),
34632                                                                 Mop(Cast
34633                                                                       F32,
34634                                                                     Mop(Cast
34635                                                                           (FTy 12),
34636                                                                         LL[bVar"b'11",
34637                                                                            bVar"b'10",
34638                                                                            bVar"b'9",
34639                                                                            bVar"b'8",
34640                                                                            bVar"b'7",
34641                                                                            bVar"b'6",
34642                                                                            bVar"b'5",
34643                                                                            bVar"b'4",
34644                                                                            bVar"b'3",
34645                                                                            bVar"b'2",
34646                                                                            bVar"b'1",
34647                                                                            bVar"b'0"])),
34648                                                                 Let(bVar"add",
34649                                                                     EQ(Mop(Cast
34650                                                                              F1,
34651                                                                            LL[bVar"b'23"]),
34652                                                                        LW(1,
34653                                                                           1)),
34654                                                                     Let(bVar"unsigned",
34655                                                                         EQ(Mop(Cast
34656                                                                                  F1,
34657                                                                                LL[bVar"b'24"]),
34658                                                                            LW(0,
34659                                                                               1)),
34660                                                                         ITE(EQ(Mop(Cast
34661                                                                                      F1,
34662                                                                                    LL[bVar"b'21"]),
34663                                                                                LW(1,
34664                                                                                   1)),
34665                                                                             Call
34666                                                                               ("Load",
34667                                                                                CTy"instruction",
34668                                                                                Call
34669                                                                                  ("LoadHalfLiteral",
34670                                                                                   CTy"Load",
34671                                                                                   TP[bVar"unsigned",
34672                                                                                      bVar"add",
34673                                                                                      Var("Rt",
34674                                                                                          F4),
34675                                                                                      Var("imm32",
34676                                                                                          F32)])),
34677                                                                             Call
34678                                                                               ("Load",
34679                                                                                CTy"instruction",
34680                                                                                Call
34681                                                                                  ("LoadByteLiteral",
34682                                                                                   CTy"Load",
34683                                                                                   TP[bVar"unsigned",
34684                                                                                      bVar"add",
34685                                                                                      Var("Rt",
34686                                                                                          F4),
34687                                                                                      Var("imm32",
34688                                                                                          F32)])))))),
34689                                                             ITE(EQ(Var("Rt",
34690                                                                        F4),
34691                                                                    LW(13,
34692                                                                       4)),
34693                                                                 Apply
34694                                                                   (Call
34695                                                                      ("DECODE_UNPREDICTABLE",
34696                                                                       ATy(qTy,
34697                                                                           qTy),
34698                                                                       TP[Var("mc",
34699                                                                              CTy"MachineCode"),
34700                                                                          LS
34701                                                                           "LoadByteLiteral/LoadHalfLiteral"]),
34702                                                                    qVar"s"),
34703                                                                 qVar"s")],
34704                                                          TP[Apply
34705                                                               (Call
34706                                                                  ("Skip",
34707                                                                   ATy(qTy,
34708                                                                       CTy"instruction"),
34709                                                                   LU),
34710                                                                qVar"s"),
34711                                                             qVar"s"]))))),
34712                                         (bVar"b'23",
34713                                          Let(Var("Rn",F4),
34714                                              Mop(Cast F4,
34715                                                  LL[bVar"b'19",
34716                                                     bVar"b'18",
34717                                                     bVar"b'17",bVar"b'16"]),
34718                                              Let(Var("Rt",F4),
34719                                                  Mop(Cast F4,
34720                                                      LL[bVar"b'15",
34721                                                         bVar"b'14",
34722                                                         bVar"b'13",
34723                                                         bVar"b'12"]),
34724                                                  Let(TP[Var("v",F4),
34725                                                         qVar"s"],
34726                                                      Apply
34727                                                        (Call
34728                                                           ("ThumbCondition",
34729                                                            ATy(qTy,
34730                                                                PTy(F4,qTy)),
34731                                                            LU),
34732                                                         qVar"state"),
34733                                                      Let(TP[bVar"v",
34734                                                             qVar"s"],
34735                                                          Apply
34736                                                            (Call
34737                                                               ("Do",
34738                                                                ATy(qTy,
34739                                                                    PTy(bTy,
34740                                                                        qTy)),
34741                                                                TP[Var("v",
34742                                                                       F4),
34743                                                                   Apply
34744                                                                     (Call
34745                                                                        ("HaveThumb2",
34746                                                                         ATy(qTy,
34747                                                                             bTy),
34748                                                                         LU),
34749                                                                      qVar"s")]),
34750                                                             qVar"s"),
34751                                                          ITE(bVar"v",
34752                                                              TP[Let(Var("m",
34753                                                                         CTy"offset1"),
34754                                                                     Call
34755                                                                       ("immediate_form1",
34756                                                                        CTy"offset1",
34757                                                                        Mop(Cast
34758                                                                              F32,
34759                                                                            Mop(Cast
34760                                                                                  (FTy 12),
34761                                                                                LL[bVar"b'11",
34762                                                                                   bVar"b'10",
34763                                                                                   bVar"b'9",
34764                                                                                   bVar"b'8",
34765                                                                                   bVar"b'7",
34766                                                                                   bVar"b'6",
34767                                                                                   bVar"b'5",
34768                                                                                   bVar"b'4",
34769                                                                                   bVar"b'3",
34770                                                                                   bVar"b'2",
34771                                                                                   bVar"b'1",
34772                                                                                   bVar"b'0"]))),
34773                                                                     Let(bVar"unsigned",
34774                                                                         EQ(Mop(Cast
34775                                                                                  F1,
34776                                                                                LL[bVar"b'24"]),
34777                                                                            LW(0,
34778                                                                               1)),
34779                                                                         ITE(EQ(Mop(Cast
34780                                                                                      F1,
34781                                                                                    LL[bVar"b'21"]),
34782                                                                                LW(1,
34783                                                                                   1)),
34784                                                                             Call
34785                                                                               ("Load",
34786                                                                                CTy"instruction",
34787                                                                                Call
34788                                                                                  ("LoadHalf",
34789                                                                                   CTy"Load",
34790                                                                                   TP[bVar"unsigned",
34791                                                                                      LT,
34792                                                                                      LT,
34793                                                                                      LF,
34794                                                                                      Var("Rt",
34795                                                                                          F4),
34796                                                                                      Var("Rn",
34797                                                                                          F4),
34798                                                                                      Var("m",
34799                                                                                          CTy"offset1")])),
34800                                                                             Call
34801                                                                               ("Load",
34802                                                                                CTy"instruction",
34803                                                                                Call
34804                                                                                  ("LoadByte",
34805                                                                                   CTy"Load",
34806                                                                                   TP[bVar"unsigned",
34807                                                                                      LT,
34808                                                                                      LT,
34809                                                                                      LF,
34810                                                                                      Var("Rt",
34811                                                                                          F4),
34812                                                                                      Var("Rn",
34813                                                                                          F4),
34814                                                                                      Var("m",
34815                                                                                          CTy"offset1")]))))),
34816                                                                 ITE(EQ(Var("Rt",
34817                                                                            F4),
34818                                                                        LW(13,
34819                                                                           4)),
34820                                                                     Apply
34821                                                                       (Call
34822                                                                          ("DECODE_UNPREDICTABLE",
34823                                                                           ATy(qTy,
34824                                                                               qTy),
34825                                                                           TP[Var("mc",
34826                                                                                  CTy"MachineCode"),
34827                                                                              LS
34828                                                                               "LoadByte/LoadHalf (immediate)"]),
34829                                                                        qVar"s"),
34830                                                                     qVar"s")],
34831                                                              TP[Apply
34832                                                                   (Call
34833                                                                      ("Skip",
34834                                                                       ATy(qTy,
34835                                                                           CTy"instruction"),
34836                                                                       LU),
34837                                                                    qVar"s"),
34838                                                                 qVar"s"])))))),
34839                                         (Bop(And,Mop(Not,bVar"b'24"),
34840                                              Bop(And,Mop(Not,bVar"b'23"),
34841                                                  Bop(And,bVar"b'15",
34842                                                      Bop(And,bVar"b'14",
34843                                                          Bop(And,
34844                                                              bVar"b'13",
34845                                                              Bop(And,
34846                                                                  bVar"b'12",
34847                                                                  Bop(And,
34848                                                                      bVar"b'11",
34849                                                                      Bop(And,
34850                                                                          bVar"b'10",
34851                                                                          Bop(And,
34852                                                                              Mop(Not,
34853                                                                                  bVar"b'9"),
34854                                                                              Mop(Not,
34855                                                                                  bVar"b'8")))))))))),
34856                                          Let(Var("W",F1),
34857                                              Mop(Cast F1,LL[bVar"b'21"]),
34858                                              Let(TP[Var("v",F4),qVar"s"],
34859                                                  Apply
34860                                                    (Call
34861                                                       ("ThumbCondition",
34862                                                        ATy(qTy,
34863                                                            PTy(F4,qTy)),
34864                                                        LU),qVar"state"),
34865                                                  Let(TP[bVar"v",qVar"s"],
34866                                                      Apply
34867                                                        (Call
34868                                                           ("Do",
34869                                                            ATy(qTy,
34870                                                                PTy(bTy,
34871                                                                    qTy)),
34872                                                            TP[Var("v",F4),
34873                                                               ITE(EQ(Var("W",
34874                                                                          F1),
34875                                                                      LW(1,
34876                                                                         1)),
34877                                                                   Apply
34878                                                                     (Call
34879                                                                        ("HaveMPExt",
34880                                                                         ATy(qTy,
34881                                                                             bTy),
34882                                                                         LU),
34883                                                                      qVar"s"),
34884                                                                   Apply
34885                                                                     (Call
34886                                                                        ("HaveThumb2",
34887                                                                         ATy(qTy,
34888                                                                             bTy),
34889                                                                         LU),
34890                                                                      qVar"s"))]),
34891                                                         qVar"s"),
34892                                                      TP[ITE(bVar"v",
34893                                                             Call
34894                                                               ("Hint",
34895                                                                CTy"instruction",
34896                                                                Call
34897                                                                  ("PreloadData",
34898                                                                   CTy"Hint",
34899                                                                   TP[LF,
34900                                                                      EQ(Var("W",
34901                                                                             F1),
34902                                                                         LW(1,
34903                                                                            1)),
34904                                                                      Mop(Cast
34905                                                                            F4,
34906                                                                          LL[bVar"b'19",
34907                                                                             bVar"b'18",
34908                                                                             bVar"b'17",
34909                                                                             bVar"b'16"]),
34910                                                                      Call
34911                                                                        ("immediate_form1",
34912                                                                         CTy"offset1",
34913                                                                         Mop(Cast
34914                                                                               F32,
34915                                                                             Mop(Cast
34916                                                                                   F8,
34917                                                                                 LL[bVar"b'7",
34918                                                                                    bVar"b'6",
34919                                                                                    bVar"b'5",
34920                                                                                    bVar"b'4",
34921                                                                                    bVar"b'3",
34922                                                                                    bVar"b'2",
34923                                                                                    bVar"b'1",
34924                                                                                    bVar"b'0"])))])),
34925                                                             Apply
34926                                                               (Call
34927                                                                  ("Skip",
34928                                                                   ATy(qTy,
34929                                                                       CTy"instruction"),
34930                                                                   LU),
34931                                                                qVar"s")),
34932                                                         qVar"s"])))),
34933                                         (Bop(And,bVar"b'24",
34934                                              Bop(And,Mop(Not,bVar"b'23"),
34935                                                  Bop(And,
34936                                                      Mop(Not,bVar"b'21"),
34937                                                      Bop(And,bVar"b'15",
34938                                                          Bop(And,
34939                                                              bVar"b'14",
34940                                                              Bop(And,
34941                                                                  bVar"b'13",
34942                                                                  Bop(And,
34943                                                                      bVar"b'12",
34944                                                                      Bop(And,
34945                                                                          bVar"b'11",
34946                                                                          Bop(And,
34947                                                                              bVar"b'10",
34948                                                                              Bop(And,
34949                                                                                  Mop(Not,
34950                                                                                      bVar"b'9"),
34951                                                                                  Mop(Not,
34952                                                                                      bVar"b'8"))))))))))),
34953                                          Let(TP[Var("v",F4),qVar"s"],
34954                                              Apply
34955                                                (Call
34956                                                   ("ThumbCondition",
34957                                                    ATy(qTy,PTy(F4,qTy)),
34958                                                    LU),qVar"state"),
34959                                              Let(TP[bVar"v",qVar"s"],
34960                                                  Apply
34961                                                    (Call
34962                                                       ("Do",
34963                                                        ATy(qTy,
34964                                                            PTy(bTy,qTy)),
34965                                                        TP[Var("v",F4),
34966                                                           Bop(Ge,
34967                                                               Apply
34968                                                                 (Call
34969                                                                    ("ArchVersion",
34970                                                                     ATy(qTy,
34971                                                                         nTy),
34972                                                                     LU),
34973                                                                  qVar"s"),
34974                                                               LN 7)]),
34975                                                     qVar"s"),
34976                                                  TP[ITE(bVar"v",
34977                                                         Call
34978                                                           ("Hint",
34979                                                            CTy"instruction",
34980                                                            Call
34981                                                              ("PreloadInstruction",
34982                                                               CTy"Hint",
34983                                                               TP[LF,
34984                                                                  Mop(Cast
34985                                                                        F4,
34986                                                                      LL[bVar"b'19",
34987                                                                         bVar"b'18",
34988                                                                         bVar"b'17",
34989                                                                         bVar"b'16"]),
34990                                                                  Call
34991                                                                    ("immediate_form1",
34992                                                                     CTy"offset1",
34993                                                                     Mop(Cast
34994                                                                           F32,
34995                                                                         Mop(Cast
34996                                                                               F8,
34997                                                                             LL[bVar"b'7",
34998                                                                                bVar"b'6",
34999                                                                                bVar"b'5",
35000                                                                                bVar"b'4",
35001                                                                                bVar"b'3",
35002                                                                                bVar"b'2",
35003                                                                                bVar"b'1",
35004                                                                                bVar"b'0"])))])),
35005                                                         Apply
35006                                                           (Call
35007                                                              ("Skip",
35008                                                               ATy(qTy,
35009                                                                   CTy"instruction"),
35010                                                               LU),qVar"s")),
35011                                                     qVar"s"]))),
35012                                         (Bop(And,Mop(Not,bVar"b'23"),
35013                                              Bop(And,bVar"b'11",
35014                                                  Bop(And,
35015                                                      Mop(Not,bVar"b'10"),
35016                                                      Mop(Not,bVar"b'8")))),
35017                                          TP[Call
35018                                               ("Undefined",
35019                                                CTy"instruction",LW(0,32)),
35020                                             qVar"state"]),
35021                                         (Bop(And,Mop(Not,bVar"b'23"),
35022                                              Bop(And,bVar"b'11",
35023                                                  Bop(And,bVar"b'10",
35024                                                      Bop(And,bVar"b'9",
35025                                                          Mop(Not,
35026                                                              bVar"b'8"))))),
35027                                          Let(Var("Rn",F4),
35028                                              Mop(Cast F4,
35029                                                  LL[bVar"b'19",
35030                                                     bVar"b'18",
35031                                                     bVar"b'17",bVar"b'16"]),
35032                                              Let(Var("Rt",F4),
35033                                                  Mop(Cast F4,
35034                                                      LL[bVar"b'15",
35035                                                         bVar"b'14",
35036                                                         bVar"b'13",
35037                                                         bVar"b'12"]),
35038                                                  Let(TP[Var("v",F4),
35039                                                         qVar"s"],
35040                                                      Apply
35041                                                        (Call
35042                                                           ("ThumbCondition",
35043                                                            ATy(qTy,
35044                                                                PTy(F4,qTy)),
35045                                                            LU),
35046                                                         qVar"state"),
35047                                                      Let(TP[bVar"v",
35048                                                             qVar"s"],
35049                                                          Apply
35050                                                            (Call
35051                                                               ("Do",
35052                                                                ATy(qTy,
35053                                                                    PTy(bTy,
35054                                                                        qTy)),
35055                                                                TP[Var("v",
35056                                                                       F4),
35057                                                                   Apply
35058                                                                     (Call
35059                                                                        ("HaveThumb2",
35060                                                                         ATy(qTy,
35061                                                                             bTy),
35062                                                                         LU),
35063                                                                      qVar"s")]),
35064                                                             qVar"s"),
35065                                                          ITE(bVar"v",
35066                                                              TP[Let(bVar"unsigned",
35067                                                                     EQ(Mop(Cast
35068                                                                              F1,
35069                                                                            LL[bVar"b'24"]),
35070                                                                        LW(0,
35071                                                                           1)),
35072                                                                     Let(Var("imm32",
35073                                                                             F32),
35074                                                                         Mop(Cast
35075                                                                               F32,
35076                                                                             Mop(Cast
35077                                                                                   F8,
35078                                                                                 LL[bVar"b'7",
35079                                                                                    bVar"b'6",
35080                                                                                    bVar"b'5",
35081                                                                                    bVar"b'4",
35082                                                                                    bVar"b'3",
35083                                                                                    bVar"b'2",
35084                                                                                    bVar"b'1",
35085                                                                                    bVar"b'0"])),
35086                                                                         Let(Var("m",
35087                                                                                 CTy"offset2"),
35088                                                                             Call
35089                                                                               ("immediate_form2",
35090                                                                                CTy"offset2",
35091                                                                                Var("imm32",
35092                                                                                    F32)),
35093                                                                             ITB([(EQ(Mop(Cast
35094                                                                                            F1,
35095                                                                                          LL[bVar"b'21"]),
35096                                                                                      LW(1,
35097                                                                                         1)),
35098                                                                                   Call
35099                                                                                     ("Load",
35100                                                                                      CTy"instruction",
35101                                                                                      Call
35102                                                                                        ("LoadHalfUnprivileged",
35103                                                                                         CTy"Load",
35104                                                                                         TP[bVar"unsigned",
35105                                                                                            LT,
35106                                                                                            LF,
35107                                                                                            Var("Rt",
35108                                                                                                F4),
35109                                                                                            Var("Rn",
35110                                                                                                F4),
35111                                                                                            Var("m",
35112                                                                                                CTy"offset2")]))),
35113                                                                                  (bVar"unsigned",
35114                                                                                   Call
35115                                                                                     ("Load",
35116                                                                                      CTy"instruction",
35117                                                                                      Call
35118                                                                                        ("LoadByteUnprivileged",
35119                                                                                         CTy"Load",
35120                                                                                         TP[LT,
35121                                                                                            LF,
35122                                                                                            Var("Rt",
35123                                                                                                F4),
35124                                                                                            Var("Rn",
35125                                                                                                F4),
35126                                                                                            Call
35127                                                                                              ("immediate_form1",
35128                                                                                               CTy"offset1",
35129                                                                                               Var("imm32",
35130                                                                                                   F32))])))],
35131                                                                                 Call
35132                                                                                   ("Load",
35133                                                                                    CTy"instruction",
35134                                                                                    Call
35135                                                                                      ("LoadSignedByteUnprivileged",
35136                                                                                       CTy"Load",
35137                                                                                       TP[LT,
35138                                                                                          LF,
35139                                                                                          Var("Rt",
35140                                                                                              F4),
35141                                                                                          Var("Rn",
35142                                                                                              F4),
35143                                                                                          Var("m",
35144                                                                                              CTy"offset2")])))))),
35145                                                                 ITE(Bop(In,
35146                                                                         Var("Rt",
35147                                                                             F4),
35148                                                                         SL[LW(13,
35149                                                                               4),
35150                                                                            LW(15,
35151                                                                               4)]),
35152                                                                     Apply
35153                                                                       (Call
35154                                                                          ("DECODE_UNPREDICTABLE",
35155                                                                           ATy(qTy,
35156                                                                               qTy),
35157                                                                           TP[Var("mc",
35158                                                                                  CTy"MachineCode"),
35159                                                                              LS
35160                                                                               "LoadUnprivileged"]),
35161                                                                        qVar"s"),
35162                                                                     qVar"s")],
35163                                                              TP[Apply
35164                                                                   (Call
35165                                                                      ("Skip",
35166                                                                       ATy(qTy,
35167                                                                           CTy"instruction"),
35168                                                                       LU),
35169                                                                    qVar"s"),
35170                                                                 qVar"s"])))))),
35171                                         (Bop(And,bVar"b'24",
35172                                              Bop(And,Mop(Not,bVar"b'23"),
35173                                                  Bop(And,bVar"b'21",
35174                                                      Bop(And,bVar"b'15",
35175                                                          Bop(And,
35176                                                              bVar"b'14",
35177                                                              Bop(And,
35178                                                                  bVar"b'13",
35179                                                                  Bop(And,
35180                                                                      bVar"b'12",
35181                                                                      Bop(And,
35182                                                                          bVar"b'11",
35183                                                                          Bop(And,
35184                                                                              bVar"b'10",
35185                                                                              Bop(And,
35186                                                                                  Mop(Not,
35187                                                                                      bVar"b'9"),
35188                                                                                  Mop(Not,
35189                                                                                      bVar"b'8"))))))))))),
35190                                          TP[Const
35191                                               ("NoOperation",
35192                                                CTy"instruction"),
35193                                             qVar"state"]),
35194                                         (Bop(And,Mop(Not,bVar"b'23"),
35195                                              bVar"b'11"),
35196                                          Let(Var("Rn",F4),
35197                                              Mop(Cast F4,
35198                                                  LL[bVar"b'19",
35199                                                     bVar"b'18",
35200                                                     bVar"b'17",bVar"b'16"]),
35201                                              Let(Var("Rt",F4),
35202                                                  Mop(Cast F4,
35203                                                      LL[bVar"b'15",
35204                                                         bVar"b'14",
35205                                                         bVar"b'13",
35206                                                         bVar"b'12"]),
35207                                                  Let(TP[Var("v",F4),
35208                                                         qVar"s"],
35209                                                      Apply
35210                                                        (Call
35211                                                           ("ThumbCondition",
35212                                                            ATy(qTy,
35213                                                                PTy(F4,qTy)),
35214                                                            LU),
35215                                                         qVar"state"),
35216                                                      Let(TP[bVar"v",
35217                                                             qVar"s"],
35218                                                          Apply
35219                                                            (Call
35220                                                               ("Do",
35221                                                                ATy(qTy,
35222                                                                    PTy(bTy,
35223                                                                        qTy)),
35224                                                                TP[Var("v",
35225                                                                       F4),
35226                                                                   Apply
35227                                                                     (Call
35228                                                                        ("HaveThumb2",
35229                                                                         ATy(qTy,
35230                                                                             bTy),
35231                                                                         LU),
35232                                                                      qVar"s")]),
35233                                                             qVar"s"),
35234                                                          ITE(bVar"v",
35235                                                              Let(bVar"wback",
35236                                                                  EQ(Mop(Cast
35237                                                                           F1,
35238                                                                         LL[bVar"b'8"]),
35239                                                                     LW(1,
35240                                                                        1)),
35241                                                                  TP[Let(bVar"add",
35242                                                                         EQ(Mop(Cast
35243                                                                                  F1,
35244                                                                                LL[bVar"b'9"]),
35245                                                                            LW(1,
35246                                                                               1)),
35247                                                                         Let(bVar"index",
35248                                                                             EQ(Mop(Cast
35249                                                                                      F1,
35250                                                                                    LL[bVar"b'10"]),
35251                                                                                LW(1,
35252                                                                                   1)),
35253                                                                             Let(bVar"unsigned",
35254                                                                                 EQ(Mop(Cast
35255                                                                                          F1,
35256                                                                                        LL[bVar"b'24"]),
35257                                                                                    LW(0,
35258                                                                                       1)),
35259                                                                                 Let(Var("m",
35260                                                                                         CTy"offset1"),
35261                                                                                     Call
35262                                                                                       ("immediate_form1",
35263                                                                                        CTy"offset1",
35264                                                                                        Mop(Cast
35265                                                                                              F32,
35266                                                                                            Mop(Cast
35267                                                                                                  F8,
35268                                                                                                LL[bVar"b'7",
35269                                                                                                   bVar"b'6",
35270                                                                                                   bVar"b'5",
35271                                                                                                   bVar"b'4",
35272                                                                                                   bVar"b'3",
35273                                                                                                   bVar"b'2",
35274                                                                                                   bVar"b'1",
35275                                                                                                   bVar"b'0"]))),
35276                                                                                     ITE(EQ(Mop(Cast
35277                                                                                                  F1,
35278                                                                                                LL[bVar"b'21"]),
35279                                                                                            LW(1,
35280                                                                                               1)),
35281                                                                                         Call
35282                                                                                           ("Load",
35283                                                                                            CTy"instruction",
35284                                                                                            Call
35285                                                                                              ("LoadHalf",
35286                                                                                               CTy"Load",
35287                                                                                               TP[bVar"unsigned",
35288                                                                                                  bVar"add",
35289                                                                                                  bVar"index",
35290                                                                                                  bVar"wback",
35291                                                                                                  Var("Rt",
35292                                                                                                      F4),
35293                                                                                                  Var("Rn",
35294                                                                                                      F4),
35295                                                                                                  Var("m",
35296                                                                                                      CTy"offset1")])),
35297                                                                                         Call
35298                                                                                           ("Load",
35299                                                                                            CTy"instruction",
35300                                                                                            Call
35301                                                                                              ("LoadByte",
35302                                                                                               CTy"Load",
35303                                                                                               TP[bVar"unsigned",
35304                                                                                                  bVar"add",
35305                                                                                                  bVar"index",
35306                                                                                                  bVar"wback",
35307                                                                                                  Var("Rt",
35308                                                                                                      F4),
35309                                                                                                  Var("Rn",
35310                                                                                                      F4),
35311                                                                                                  Var("m",
35312                                                                                                      CTy"offset1")]))))))),
35313                                                                     ITE(Bop(Or,
35314                                                                             EQ(Var("Rt",
35315                                                                                    F4),
35316                                                                                LW(13,
35317                                                                                   4)),
35318                                                                             Bop(Or,
35319                                                                                 Bop(And,
35320                                                                                     EQ(Var("Rt",
35321                                                                                            F4),
35322                                                                                        LW(15,
35323                                                                                           4)),
35324                                                                                     bVar"wback"),
35325                                                                                 Bop(And,
35326                                                                                     bVar"wback",
35327                                                                                     EQ(Var("Rn",
35328                                                                                            F4),
35329                                                                                        Var("Rt",
35330                                                                                            F4))))),
35331                                                                         Apply
35332                                                                           (Call
35333                                                                              ("DECODE_UNPREDICTABLE",
35334                                                                               ATy(qTy,
35335                                                                                   qTy),
35336                                                                               TP[Var("mc",
35337                                                                                      CTy"MachineCode"),
35338                                                                                  LS
35339                                                                                   "Load (immediate)"]),
35340                                                                            qVar"s"),
35341                                                                         qVar"s")]),
35342                                                              TP[Apply
35343                                                                   (Call
35344                                                                      ("Skip",
35345                                                                       ATy(qTy,
35346                                                                           CTy"instruction"),
35347                                                                       LU),
35348                                                                    qVar"s"),
35349                                                                 qVar"s"])))))),
35350                                         (Bop(And,Mop(Not,bVar"b'24"),
35351                                              Bop(And,Mop(Not,bVar"b'23"),
35352                                                  Bop(And,bVar"b'15",
35353                                                      Bop(And,bVar"b'14",
35354                                                          Bop(And,
35355                                                              bVar"b'13",
35356                                                              Bop(And,
35357                                                                  bVar"b'12",
35358                                                                  Bop(And,
35359                                                                      Mop(Not,
35360                                                                          bVar"b'11"),
35361                                                                      Bop(And,
35362                                                                          Mop(Not,
35363                                                                              bVar"b'10"),
35364                                                                          Bop(And,
35365                                                                              Mop(Not,
35366                                                                                  bVar"b'9"),
35367                                                                              Bop(And,
35368                                                                                  Mop(Not,
35369                                                                                      bVar"b'8"),
35370                                                                                  Bop(And,
35371                                                                                      Mop(Not,
35372                                                                                          bVar"b'7"),
35373                                                                                      Mop(Not,
35374                                                                                          bVar"b'6")))))))))))),
35375                                          Let(Var("W",F1),
35376                                              Mop(Cast F1,LL[bVar"b'21"]),
35377                                              Let(Var("Rm",F4),
35378                                                  Mop(Cast F4,
35379                                                      LL[bVar"b'3",
35380                                                         bVar"b'2",
35381                                                         bVar"b'1",
35382                                                         bVar"b'0"]),
35383                                                  Let(TP[Var("v",F4),
35384                                                         qVar"s"],
35385                                                      Apply
35386                                                        (Call
35387                                                           ("ThumbCondition",
35388                                                            ATy(qTy,
35389                                                                PTy(F4,qTy)),
35390                                                            LU),
35391                                                         qVar"state"),
35392                                                      Let(TP[bVar"v",
35393                                                             qVar"s"],
35394                                                          Apply
35395                                                            (Call
35396                                                               ("Do",
35397                                                                ATy(qTy,
35398                                                                    PTy(bTy,
35399                                                                        qTy)),
35400                                                                TP[Var("v",
35401                                                                       F4),
35402                                                                   ITE(EQ(Var("W",
35403                                                                              F1),
35404                                                                          LW(1,
35405                                                                             1)),
35406                                                                       Apply
35407                                                                         (Call
35408                                                                            ("HaveMPExt",
35409                                                                             ATy(qTy,
35410                                                                                 bTy),
35411                                                                             LU),
35412                                                                          qVar"s"),
35413                                                                       Apply
35414                                                                         (Call
35415                                                                            ("HaveThumb2",
35416                                                                             ATy(qTy,
35417                                                                                 bTy),
35418                                                                             LU),
35419                                                                          qVar"s"))]),
35420                                                             qVar"s"),
35421                                                          ITE(bVar"v",
35422                                                              TP[Call
35423                                                                   ("Hint",
35424                                                                    CTy"instruction",
35425                                                                    Call
35426                                                                      ("PreloadData",
35427                                                                       CTy"Hint",
35428                                                                       TP[LT,
35429                                                                          EQ(Var("W",
35430                                                                                 F1),
35431                                                                             LW(1,
35432                                                                                1)),
35433                                                                          Mop(Cast
35434                                                                                F4,
35435                                                                              LL[bVar"b'19",
35436                                                                                 bVar"b'18",
35437                                                                                 bVar"b'17",
35438                                                                                 bVar"b'16"]),
35439                                                                          Call
35440                                                                            ("register_form1",
35441                                                                             CTy"offset1",
35442                                                                             TP[Var("Rm",
35443                                                                                    F4),
35444                                                                                LC("SRType_LSL",
35445                                                                                   CTy"SRType"),
35446                                                                                Mop(Cast
35447                                                                                      nTy,
35448                                                                                    Mop(Cast
35449                                                                                          (FTy 2),
35450                                                                                        LL[bVar"b'5",
35451                                                                                           bVar"b'4"]))])])),
35452                                                                 ITE(Bop(In,
35453                                                                         Var("Rm",
35454                                                                             F4),
35455                                                                         SL[LW(13,
35456                                                                               4),
35457                                                                            LW(15,
35458                                                                               4)]),
35459                                                                     Apply
35460                                                                       (Call
35461                                                                          ("DECODE_UNPREDICTABLE",
35462                                                                           ATy(qTy,
35463                                                                               qTy),
35464                                                                           TP[Var("mc",
35465                                                                                  CTy"MachineCode"),
35466                                                                              LS
35467                                                                               "PreloadData"]),
35468                                                                        qVar"s"),
35469                                                                     qVar"s")],
35470                                                              TP[Apply
35471                                                                   (Call
35472                                                                      ("Skip",
35473                                                                       ATy(qTy,
35474                                                                           CTy"instruction"),
35475                                                                       LU),
35476                                                                    qVar"s"),
35477                                                                 qVar"s"])))))),
35478                                         (Bop(And,bVar"b'24",
35479                                              Bop(And,Mop(Not,bVar"b'23"),
35480                                                  Bop(And,
35481                                                      Mop(Not,bVar"b'21"),
35482                                                      Bop(And,bVar"b'15",
35483                                                          Bop(And,
35484                                                              bVar"b'14",
35485                                                              Bop(And,
35486                                                                  bVar"b'13",
35487                                                                  Bop(And,
35488                                                                      bVar"b'12",
35489                                                                      Bop(And,
35490                                                                          Mop(Not,
35491                                                                              bVar"b'11"),
35492                                                                          Bop(And,
35493                                                                              Mop(Not,
35494                                                                                  bVar"b'10"),
35495                                                                              Bop(And,
35496                                                                                  Mop(Not,
35497                                                                                      bVar"b'9"),
35498                                                                                  Bop(And,
35499                                                                                      Mop(Not,
35500                                                                                          bVar"b'8"),
35501                                                                                      Bop(And,
35502                                                                                          Mop(Not,
35503                                                                                              bVar"b'7"),
35504                                                                                          Mop(Not,
35505                                                                                              bVar"b'6"))))))))))))),
35506                                          Let(Var("Rm",F4),
35507                                              Mop(Cast F4,
35508                                                  LL[bVar"b'3",bVar"b'2",
35509                                                     bVar"b'1",bVar"b'0"]),
35510                                              Let(TP[Var("v",F4),qVar"s"],
35511                                                  Apply
35512                                                    (Call
35513                                                       ("ThumbCondition",
35514                                                        ATy(qTy,
35515                                                            PTy(F4,qTy)),
35516                                                        LU),qVar"state"),
35517                                                  Let(TP[bVar"v",qVar"s"],
35518                                                      Apply
35519                                                        (Call
35520                                                           ("Do",
35521                                                            ATy(qTy,
35522                                                                PTy(bTy,
35523                                                                    qTy)),
35524                                                            TP[Var("v",F4),
35525                                                               Bop(Ge,
35526                                                                   Apply
35527                                                                     (Call
35528                                                                        ("ArchVersion",
35529                                                                         ATy(qTy,
35530                                                                             nTy),
35531                                                                         LU),
35532                                                                      qVar"s"),
35533                                                                   LN 7)]),
35534                                                         qVar"s"),
35535                                                      ITE(bVar"v",
35536                                                          TP[Call
35537                                                               ("Hint",
35538                                                                CTy"instruction",
35539                                                                Call
35540                                                                  ("PreloadInstruction",
35541                                                                   CTy"Hint",
35542                                                                   TP[LT,
35543                                                                      Mop(Cast
35544                                                                            F4,
35545                                                                          LL[bVar"b'19",
35546                                                                             bVar"b'18",
35547                                                                             bVar"b'17",
35548                                                                             bVar"b'16"]),
35549                                                                      Call
35550                                                                        ("register_form1",
35551                                                                         CTy"offset1",
35552                                                                         TP[Var("Rm",
35553                                                                                F4),
35554                                                                            LC("SRType_LSL",
35555                                                                               CTy"SRType"),
35556                                                                            Mop(Cast
35557                                                                                  nTy,
35558                                                                                Mop(Cast
35559                                                                                      (FTy 2),
35560                                                                                    LL[bVar"b'5",
35561                                                                                       bVar"b'4"]))])])),
35562                                                             ITE(Bop(In,
35563                                                                     Var("Rm",
35564                                                                         F4),
35565                                                                     SL[LW(13,
35566                                                                           4),
35567                                                                        LW(15,
35568                                                                           4)]),
35569                                                                 Apply
35570                                                                   (Call
35571                                                                      ("DECODE_UNPREDICTABLE",
35572                                                                       ATy(qTy,
35573                                                                           qTy),
35574                                                                       TP[Var("mc",
35575                                                                              CTy"MachineCode"),
35576                                                                          LS
35577                                                                           "PreloadInstruction"]),
35578                                                                    qVar"s"),
35579                                                                 qVar"s")],
35580                                                          TP[Apply
35581                                                               (Call
35582                                                                  ("Skip",
35583                                                                   ATy(qTy,
35584                                                                       CTy"instruction"),
35585                                                                   LU),
35586                                                                qVar"s"),
35587                                                             qVar"s"]))))),
35588                                         (Bop(And,bVar"b'24",
35589                                              Bop(And,Mop(Not,bVar"b'23"),
35590                                                  Bop(And,bVar"b'21",
35591                                                      Bop(And,bVar"b'15",
35592                                                          Bop(And,
35593                                                              bVar"b'14",
35594                                                              Bop(And,
35595                                                                  bVar"b'13",
35596                                                                  Bop(And,
35597                                                                      bVar"b'12",
35598                                                                      Bop(And,
35599                                                                          Mop(Not,
35600                                                                              bVar"b'11"),
35601                                                                          Bop(And,
35602                                                                              Mop(Not,
35603                                                                                  bVar"b'10"),
35604                                                                              Bop(And,
35605                                                                                  Mop(Not,
35606                                                                                      bVar"b'9"),
35607                                                                                  Bop(And,
35608                                                                                      Mop(Not,
35609                                                                                          bVar"b'8"),
35610                                                                                      Bop(And,
35611                                                                                          Mop(Not,
35612                                                                                              bVar"b'7"),
35613                                                                                          Mop(Not,
35614                                                                                              bVar"b'6"))))))))))))),
35615                                          TP[Const
35616                                               ("NoOperation",
35617                                                CTy"instruction"),
35618                                             qVar"state"]),
35619                                         (Bop(And,Mop(Not,bVar"b'23"),
35620                                              Bop(And,Mop(Not,bVar"b'11"),
35621                                                  Bop(And,
35622                                                      Mop(Not,bVar"b'10"),
35623                                                      Bop(And,
35624                                                          Mop(Not,
35625                                                              bVar"b'9"),
35626                                                          Bop(And,
35627                                                              Mop(Not,
35628                                                                  bVar"b'8"),
35629                                                              Bop(And,
35630                                                                  Mop(Not,
35631                                                                      bVar"b'7"),
35632                                                                  Mop(Not,
35633                                                                      bVar"b'6"))))))),
35634                                          Let(Var("Rn",F4),
35635                                              Mop(Cast F4,
35636                                                  LL[bVar"b'19",
35637                                                     bVar"b'18",
35638                                                     bVar"b'17",bVar"b'16"]),
35639                                              Let(Var("Rm",F4),
35640                                                  Mop(Cast F4,
35641                                                      LL[bVar"b'3",
35642                                                         bVar"b'2",
35643                                                         bVar"b'1",
35644                                                         bVar"b'0"]),
35645                                                  Let(Var("Rt",F4),
35646                                                      Mop(Cast F4,
35647                                                          LL[bVar"b'15",
35648                                                             bVar"b'14",
35649                                                             bVar"b'13",
35650                                                             bVar"b'12"]),
35651                                                      Let(TP[Var("v",F4),
35652                                                             qVar"s"],
35653                                                          Apply
35654                                                            (Call
35655                                                               ("ThumbCondition",
35656                                                                ATy(qTy,
35657                                                                    PTy(F4,
35658                                                                        qTy)),
35659                                                                LU),
35660                                                             qVar"state"),
35661                                                          Let(TP[bVar"v",
35662                                                                 qVar"s"],
35663                                                              Apply
35664                                                                (Call
35665                                                                   ("Do",
35666                                                                    ATy(qTy,
35667                                                                        PTy(bTy,
35668                                                                            qTy)),
35669                                                                    TP[Var("v",
35670                                                                           F4),
35671                                                                       Apply
35672                                                                         (Call
35673                                                                            ("HaveThumb2",
35674                                                                             ATy(qTy,
35675                                                                                 bTy),
35676                                                                             LU),
35677                                                                          qVar"s")]),
35678                                                                 qVar"s"),
35679                                                              ITE(bVar"v",
35680                                                                  TP[Let(bVar"unsigned",
35681                                                                         EQ(Mop(Cast
35682                                                                                  F1,
35683                                                                                LL[bVar"b'24"]),
35684                                                                            LW(0,
35685                                                                               1)),
35686                                                                         Let(Var("m",
35687                                                                                 CTy"offset1"),
35688                                                                             Call
35689                                                                               ("register_form1",
35690                                                                                CTy"offset1",
35691                                                                                TP[Var("Rm",
35692                                                                                       F4),
35693                                                                                   LC("SRType_LSL",
35694                                                                                      CTy"SRType"),
35695                                                                                   Mop(Cast
35696                                                                                         nTy,
35697                                                                                       Mop(Cast
35698                                                                                             (FTy 2),
35699                                                                                           LL[bVar"b'5",
35700                                                                                              bVar"b'4"]))]),
35701                                                                             ITE(EQ(Mop(Cast
35702                                                                                          F1,
35703                                                                                        LL[bVar"b'21"]),
35704                                                                                    LW(1,
35705                                                                                       1)),
35706                                                                                 Call
35707                                                                                   ("Load",
35708                                                                                    CTy"instruction",
35709                                                                                    Call
35710                                                                                      ("LoadHalf",
35711                                                                                       CTy"Load",
35712                                                                                       TP[bVar"unsigned",
35713                                                                                          LT,
35714                                                                                          LT,
35715                                                                                          LF,
35716                                                                                          Var("Rt",
35717                                                                                              F4),
35718                                                                                          Var("Rn",
35719                                                                                              F4),
35720                                                                                          Var("m",
35721                                                                                              CTy"offset1")])),
35722                                                                                 Call
35723                                                                                   ("Load",
35724                                                                                    CTy"instruction",
35725                                                                                    Call
35726                                                                                      ("LoadByte",
35727                                                                                       CTy"Load",
35728                                                                                       TP[bVar"unsigned",
35729                                                                                          LT,
35730                                                                                          LT,
35731                                                                                          LF,
35732                                                                                          Var("Rt",
35733                                                                                              F4),
35734                                                                                          Var("Rn",
35735                                                                                              F4),
35736                                                                                          Var("m",
35737                                                                                              CTy"offset1")]))))),
35738                                                                     ITE(Bop(Or,
35739                                                                             EQ(Var("Rt",
35740                                                                                    F4),
35741                                                                                LW(13,
35742                                                                                   4)),
35743                                                                             Bop(In,
35744                                                                                 Var("Rm",
35745                                                                                     F4),
35746                                                                                 SL[LW(13,
35747                                                                                       4),
35748                                                                                    LW(15,
35749                                                                                       4)])),
35750                                                                         Apply
35751                                                                           (Call
35752                                                                              ("DECODE_UNPREDICTABLE",
35753                                                                               ATy(qTy,
35754                                                                                   qTy),
35755                                                                               TP[Var("mc",
35756                                                                                      CTy"MachineCode"),
35757                                                                                  LS
35758                                                                                   "Load (register)"]),
35759                                                                            qVar"s"),
35760                                                                         qVar"s")],
35761                                                                  TP[Apply
35762                                                                       (Call
35763                                                                          ("Skip",
35764                                                                           ATy(qTy,
35765                                                                               CTy"instruction"),
35766                                                                           LU),
35767                                                                        qVar"s"),
35768                                                                     qVar"s"])))))))],
35769                                        Apply
35770                                          (Call
35771                                             ("UndefinedThumb",
35772                                              ATy(qTy,
35773                                                  PTy(CTy"instruction",qTy)),
35774                                              LU),qVar"state")),
35775                                    Apply
35776                                      (Call
35777                                         ("UndefinedThumb",
35778                                          ATy(qTy,
35779                                              PTy(CTy"instruction",qTy)),
35780                                          LU),qVar"state"))),
35781                               (Bop(And,bVar"b'31",
35782                                    Bop(And,bVar"b'30",
35783                                        Bop(And,bVar"b'29",
35784                                            Bop(And,Mop(Not,bVar"b'26"),
35785                                                Mop(Not,bVar"b'24"))))),
35786                                ITB([(Bop(And,Mop(Not,bVar"b'23"),
35787                                          Bop(And,Mop(Not,bVar"b'11"),
35788                                              Bop(And,Mop(Not,bVar"b'10"),
35789                                                  Bop(And,
35790                                                      Mop(Not,bVar"b'9"),
35791                                                      Bop(And,
35792                                                          Mop(Not,
35793                                                              bVar"b'8"),
35794                                                          Bop(And,
35795                                                              Mop(Not,
35796                                                                  bVar"b'7"),
35797                                                              Mop(Not,
35798                                                                  bVar"b'6"))))))),
35799                                      Let(Var("Rn",F4),
35800                                          Mop(Cast F4,
35801                                              LL[bVar"b'19",bVar"b'18",
35802                                                 bVar"b'17",bVar"b'16"]),
35803                                          Let(Var("Rm",F4),
35804                                              Mop(Cast F4,
35805                                                  LL[bVar"b'3",bVar"b'2",
35806                                                     bVar"b'1",bVar"b'0"]),
35807                                              Let(Var("Rt",F4),
35808                                                  Mop(Cast F4,
35809                                                      LL[bVar"b'15",
35810                                                         bVar"b'14",
35811                                                         bVar"b'13",
35812                                                         bVar"b'12"]),
35813                                                  Let(TP[Var("v",F4),
35814                                                         qVar"s"],
35815                                                      Apply
35816                                                        (Call
35817                                                           ("ThumbCondition",
35818                                                            ATy(qTy,
35819                                                                PTy(F4,qTy)),
35820                                                            LU),
35821                                                         qVar"state"),
35822                                                      Let(TP[bVar"v",
35823                                                             qVar"s"],
35824                                                          Apply
35825                                                            (Call
35826                                                               ("Do",
35827                                                                ATy(qTy,
35828                                                                    PTy(bTy,
35829                                                                        qTy)),
35830                                                                TP[Var("v",
35831                                                                       F4),
35832                                                                   Bop(And,
35833                                                                       Mop(Not,
35834                                                                           EQ(Var("Rn",
35835                                                                                  F4),
35836                                                                              LW(15,
35837                                                                                 4))),
35838                                                                       Apply
35839                                                                         (Call
35840                                                                            ("HaveThumb2",
35841                                                                             ATy(qTy,
35842                                                                                 bTy),
35843                                                                             LU),
35844                                                                          qVar"s"))]),
35845                                                             qVar"s"),
35846                                                          ITE(bVar"v",
35847                                                              TP[Let(Var("m",
35848                                                                         CTy"offset1"),
35849                                                                     Call
35850                                                                       ("register_form1",
35851                                                                        CTy"offset1",
35852                                                                        TP[Var("Rm",
35853                                                                               F4),
35854                                                                           LC("SRType_LSL",
35855                                                                              CTy"SRType"),
35856                                                                           Mop(Cast
35857                                                                                 nTy,
35858                                                                               Mop(Cast
35859                                                                                     (FTy 2),
35860                                                                                   LL[bVar"b'5",
35861                                                                                      bVar"b'4"]))]),
35862                                                                     ITE(EQ(Mop(Cast
35863                                                                                  F1,
35864                                                                                LL[bVar"b'21"]),
35865                                                                            LW(1,
35866                                                                               1)),
35867                                                                         Call
35868                                                                           ("Store",
35869                                                                            CTy"instruction",
35870                                                                            Call
35871                                                                              ("StoreHalf",
35872                                                                               CTy"Store",
35873                                                                               TP[LT,
35874                                                                                  LT,
35875                                                                                  LF,
35876                                                                                  Var("Rt",
35877                                                                                      F4),
35878                                                                                  Var("Rn",
35879                                                                                      F4),
35880                                                                                  Var("m",
35881                                                                                      CTy"offset1")])),
35882                                                                         Call
35883                                                                           ("Store",
35884                                                                            CTy"instruction",
35885                                                                            Call
35886                                                                              ("StoreByte",
35887                                                                               CTy"Store",
35888                                                                               TP[LT,
35889                                                                                  LT,
35890                                                                                  LF,
35891                                                                                  Var("Rt",
35892                                                                                      F4),
35893                                                                                  Var("Rn",
35894                                                                                      F4),
35895                                                                                  Var("m",
35896                                                                                      CTy"offset1")])))),
35897                                                                 ITE(Bop(Or,
35898                                                                         Bop(In,
35899                                                                             Var("Rt",
35900                                                                                 F4),
35901                                                                             SL[LW(13,
35902                                                                                   4),
35903                                                                                LW(15,
35904                                                                                   4)]),
35905                                                                         Bop(In,
35906                                                                             Var("Rm",
35907                                                                                 F4),
35908                                                                             SL[LW(13,
35909                                                                                   4),
35910                                                                                LW(15,
35911                                                                                   4)])),
35912                                                                     Apply
35913                                                                       (Call
35914                                                                          ("DECODE_UNPREDICTABLE",
35915                                                                           ATy(qTy,
35916                                                                               qTy),
35917                                                                           TP[Var("mc",
35918                                                                                  CTy"MachineCode"),
35919                                                                              LS
35920                                                                               "StoreByte/Half (register)"]),
35921                                                                        qVar"s"),
35922                                                                     qVar"s")],
35923                                                              TP[Apply
35924                                                                   (Call
35925                                                                      ("Skip",
35926                                                                       ATy(qTy,
35927                                                                           CTy"instruction"),
35928                                                                       LU),
35929                                                                    qVar"s"),
35930                                                                 qVar"s"]))))))),
35931                                     (Bop(And,Mop(Not,bVar"b'23"),
35932                                          Bop(And,bVar"b'11",
35933                                              Bop(And,bVar"b'10",
35934                                                  Bop(And,bVar"b'9",
35935                                                      Mop(Not,bVar"b'8"))))),
35936                                      Let(Var("Rn",F4),
35937                                          Mop(Cast F4,
35938                                              LL[bVar"b'19",bVar"b'18",
35939                                                 bVar"b'17",bVar"b'16"]),
35940                                          Let(Var("Rt",F4),
35941                                              Mop(Cast F4,
35942                                                  LL[bVar"b'15",
35943                                                     bVar"b'14",
35944                                                     bVar"b'13",bVar"b'12"]),
35945                                              Let(TP[Var("v",F4),qVar"s"],
35946                                                  Apply
35947                                                    (Call
35948                                                       ("ThumbCondition",
35949                                                        ATy(qTy,
35950                                                            PTy(F4,qTy)),
35951                                                        LU),qVar"state"),
35952                                                  Let(TP[bVar"v",qVar"s"],
35953                                                      Apply
35954                                                        (Call
35955                                                           ("Do",
35956                                                            ATy(qTy,
35957                                                                PTy(bTy,
35958                                                                    qTy)),
35959                                                            TP[Var("v",F4),
35960                                                               Bop(And,
35961                                                                   Mop(Not,
35962                                                                       EQ(Var("Rn",
35963                                                                              F4),
35964                                                                          LW(15,
35965                                                                             4))),
35966                                                                   Apply
35967                                                                     (Call
35968                                                                        ("HaveThumb2",
35969                                                                         ATy(qTy,
35970                                                                             bTy),
35971                                                                         LU),
35972                                                                      qVar"s"))]),
35973                                                         qVar"s"),
35974                                                      ITE(bVar"v",
35975                                                          TP[Let(Var("imm32",
35976                                                                     F32),
35977                                                                 Mop(Cast
35978                                                                       F32,
35979                                                                     Mop(Cast
35980                                                                           F8,
35981                                                                         LL[bVar"b'7",
35982                                                                            bVar"b'6",
35983                                                                            bVar"b'5",
35984                                                                            bVar"b'4",
35985                                                                            bVar"b'3",
35986                                                                            bVar"b'2",
35987                                                                            bVar"b'1",
35988                                                                            bVar"b'0"])),
35989                                                                 ITE(EQ(Mop(Cast
35990                                                                              F1,
35991                                                                            LL[bVar"b'21"]),
35992                                                                        LW(1,
35993                                                                           1)),
35994                                                                     Call
35995                                                                       ("Store",
35996                                                                        CTy"instruction",
35997                                                                        Call
35998                                                                          ("StoreHalfUnprivileged",
35999                                                                           CTy"Store",
36000                                                                           TP[LT,
36001                                                                              LF,
36002                                                                              Var("Rt",
36003                                                                                  F4),
36004                                                                              Var("Rn",
36005                                                                                  F4),
36006                                                                              Call
36007                                                                                ("immediate_form2",
36008                                                                                 CTy"offset2",
36009                                                                                 Var("imm32",
36010                                                                                     F32))])),
36011                                                                     Call
36012                                                                       ("Store",
36013                                                                        CTy"instruction",
36014                                                                        Call
36015                                                                          ("StoreByteUnprivileged",
36016                                                                           CTy"Store",
36017                                                                           TP[LT,
36018                                                                              LF,
36019                                                                              Var("Rt",
36020                                                                                  F4),
36021                                                                              Var("Rn",
36022                                                                                  F4),
36023                                                                              Call
36024                                                                                ("immediate_form1",
36025                                                                                 CTy"offset1",
36026                                                                                 Var("imm32",
36027                                                                                     F32))])))),
36028                                                             ITE(Bop(In,
36029                                                                     Var("Rt",
36030                                                                         F4),
36031                                                                     SL[LW(13,
36032                                                                           4),
36033                                                                        LW(15,
36034                                                                           4)]),
36035                                                                 Apply
36036                                                                   (Call
36037                                                                      ("DECODE_UNPREDICTABLE",
36038                                                                       ATy(qTy,
36039                                                                           qTy),
36040                                                                       TP[Var("mc",
36041                                                                              CTy"MachineCode"),
36042                                                                          LS
36043                                                                           "StoreByte/HalfUnprivileged"]),
36044                                                                    qVar"s"),
36045                                                                 qVar"s")],
36046                                                          TP[Apply
36047                                                               (Call
36048                                                                  ("Skip",
36049                                                                   ATy(qTy,
36050                                                                       CTy"instruction"),
36051                                                                   LU),
36052                                                                qVar"s"),
36053                                                             qVar"s"])))))),
36054                                     (Bop(And,Mop(Not,bVar"b'23"),
36055                                          bVar"b'11"),
36056                                      Let(Var("Rn",F4),
36057                                          Mop(Cast F4,
36058                                              LL[bVar"b'19",bVar"b'18",
36059                                                 bVar"b'17",bVar"b'16"]),
36060                                          Let(Var("W",F1),
36061                                              Mop(Cast F1,LL[bVar"b'8"]),
36062                                              Let(Var("P",F1),
36063                                                  Mop(Cast F1,
36064                                                      LL[bVar"b'10"]),
36065                                                  Let(Var("Rt",F4),
36066                                                      Mop(Cast F4,
36067                                                          LL[bVar"b'15",
36068                                                             bVar"b'14",
36069                                                             bVar"b'13",
36070                                                             bVar"b'12"]),
36071                                                      Let(TP[Var("v",F4),
36072                                                             qVar"s"],
36073                                                          Apply
36074                                                            (Call
36075                                                               ("ThumbCondition",
36076                                                                ATy(qTy,
36077                                                                    PTy(F4,
36078                                                                        qTy)),
36079                                                                LU),
36080                                                             qVar"state"),
36081                                                          Let(TP[bVar"v",
36082                                                                 qVar"s"],
36083                                                              Apply
36084                                                                (Call
36085                                                                   ("Do",
36086                                                                    ATy(qTy,
36087                                                                        PTy(bTy,
36088                                                                            qTy)),
36089                                                                    TP[Var("v",
36090                                                                           F4),
36091                                                                       Bop(And,
36092                                                                           Mop(Not,
36093                                                                               EQ(Var("Rn",
36094                                                                                      F4),
36095                                                                                  LW(15,
36096                                                                                     4))),
36097                                                                           Bop(And,
36098                                                                               Bop(Or,
36099                                                                                   EQ(Var("P",
36100                                                                                          F1),
36101                                                                                      LW(1,
36102                                                                                         1)),
36103                                                                                   EQ(Var("W",
36104                                                                                          F1),
36105                                                                                      LW(1,
36106                                                                                         1))),
36107                                                                               Apply
36108                                                                                 (Call
36109                                                                                    ("HaveThumb2",
36110                                                                                     ATy(qTy,
36111                                                                                         bTy),
36112                                                                                     LU),
36113                                                                                  qVar"s")))]),
36114                                                                 qVar"s"),
36115                                                              ITE(bVar"v",
36116                                                                  Let(bVar"wback",
36117                                                                      EQ(Var("W",
36118                                                                             F1),
36119                                                                         LW(1,
36120                                                                            1)),
36121                                                                      TP[Let(bVar"add",
36122                                                                             EQ(Mop(Cast
36123                                                                                      F1,
36124                                                                                    LL[bVar"b'9"]),
36125                                                                                LW(1,
36126                                                                                   1)),
36127                                                                             Let(bVar"index",
36128                                                                                 EQ(Var("P",
36129                                                                                        F1),
36130                                                                                    LW(1,
36131                                                                                       1)),
36132                                                                                 Let(Var("m",
36133                                                                                         CTy"offset1"),
36134                                                                                     Call
36135                                                                                       ("immediate_form1",
36136                                                                                        CTy"offset1",
36137                                                                                        Mop(Cast
36138                                                                                              F32,
36139                                                                                            Mop(Cast
36140                                                                                                  F8,
36141                                                                                                LL[bVar"b'7",
36142                                                                                                   bVar"b'6",
36143                                                                                                   bVar"b'5",
36144                                                                                                   bVar"b'4",
36145                                                                                                   bVar"b'3",
36146                                                                                                   bVar"b'2",
36147                                                                                                   bVar"b'1",
36148                                                                                                   bVar"b'0"]))),
36149                                                                                     ITE(EQ(Mop(Cast
36150                                                                                                  F1,
36151                                                                                                LL[bVar"b'21"]),
36152                                                                                            LW(1,
36153                                                                                               1)),
36154                                                                                         Call
36155                                                                                           ("Store",
36156                                                                                            CTy"instruction",
36157                                                                                            Call
36158                                                                                              ("StoreHalf",
36159                                                                                               CTy"Store",
36160                                                                                               TP[bVar"add",
36161                                                                                                  bVar"index",
36162                                                                                                  bVar"wback",
36163                                                                                                  Var("Rt",
36164                                                                                                      F4),
36165                                                                                                  Var("Rn",
36166                                                                                                      F4),
36167                                                                                                  Var("m",
36168                                                                                                      CTy"offset1")])),
36169                                                                                         Call
36170                                                                                           ("Store",
36171                                                                                            CTy"instruction",
36172                                                                                            Call
36173                                                                                              ("StoreByte",
36174                                                                                               CTy"Store",
36175                                                                                               TP[bVar"add",
36176                                                                                                  bVar"index",
36177                                                                                                  bVar"wback",
36178                                                                                                  Var("Rt",
36179                                                                                                      F4),
36180                                                                                                  Var("Rn",
36181                                                                                                      F4),
36182                                                                                                  Var("m",
36183                                                                                                      CTy"offset1")])))))),
36184                                                                         ITE(Bop(Or,
36185                                                                                 Bop(In,
36186                                                                                     Var("Rt",
36187                                                                                         F4),
36188                                                                                     SL[LW(13,
36189                                                                                           4),
36190                                                                                        LW(15,
36191                                                                                           4)]),
36192                                                                                 Bop(And,
36193                                                                                     bVar"wback",
36194                                                                                     EQ(Var("Rn",
36195                                                                                            F4),
36196                                                                                        Var("Rt",
36197                                                                                            F4)))),
36198                                                                             Apply
36199                                                                               (Call
36200                                                                                  ("DECODE_UNPREDICTABLE",
36201                                                                                   ATy(qTy,
36202                                                                                       qTy),
36203                                                                                   TP[Var("mc",
36204                                                                                          CTy"MachineCode"),
36205                                                                                      LS
36206                                                                                       "StoreByte/Half (immediate)"]),
36207                                                                                qVar"s"),
36208                                                                             qVar"s")]),
36209                                                                  TP[Apply
36210                                                                       (Call
36211                                                                          ("Skip",
36212                                                                           ATy(qTy,
36213                                                                               CTy"instruction"),
36214                                                                           LU),
36215                                                                        qVar"s"),
36216                                                                     qVar"s"])))))))),
36217                                     (bVar"b'23",
36218                                      Let(Var("Rn",F4),
36219                                          Mop(Cast F4,
36220                                              LL[bVar"b'19",bVar"b'18",
36221                                                 bVar"b'17",bVar"b'16"]),
36222                                          Let(Var("Rt",F4),
36223                                              Mop(Cast F4,
36224                                                  LL[bVar"b'15",
36225                                                     bVar"b'14",
36226                                                     bVar"b'13",bVar"b'12"]),
36227                                              Let(TP[Var("v",F4),qVar"s"],
36228                                                  Apply
36229                                                    (Call
36230                                                       ("ThumbCondition",
36231                                                        ATy(qTy,
36232                                                            PTy(F4,qTy)),
36233                                                        LU),qVar"state"),
36234                                                  Let(TP[bVar"v",qVar"s"],
36235                                                      Apply
36236                                                        (Call
36237                                                           ("Do",
36238                                                            ATy(qTy,
36239                                                                PTy(bTy,
36240                                                                    qTy)),
36241                                                            TP[Var("v",F4),
36242                                                               Bop(And,
36243                                                                   Mop(Not,
36244                                                                       EQ(Var("Rn",
36245                                                                              F4),
36246                                                                          LW(15,
36247                                                                             4))),
36248                                                                   Apply
36249                                                                     (Call
36250                                                                        ("HaveThumb2",
36251                                                                         ATy(qTy,
36252                                                                             bTy),
36253                                                                         LU),
36254                                                                      qVar"s"))]),
36255                                                         qVar"s"),
36256                                                      ITE(bVar"v",
36257                                                          TP[Let(Var("m",
36258                                                                     CTy"offset1"),
36259                                                                 Call
36260                                                                   ("immediate_form1",
36261                                                                    CTy"offset1",
36262                                                                    Mop(Cast
36263                                                                          F32,
36264                                                                        Mop(Cast
36265                                                                              (FTy 12),
36266                                                                            LL[bVar"b'11",
36267                                                                               bVar"b'10",
36268                                                                               bVar"b'9",
36269                                                                               bVar"b'8",
36270                                                                               bVar"b'7",
36271                                                                               bVar"b'6",
36272                                                                               bVar"b'5",
36273                                                                               bVar"b'4",
36274                                                                               bVar"b'3",
36275                                                                               bVar"b'2",
36276                                                                               bVar"b'1",
36277                                                                               bVar"b'0"]))),
36278                                                                 ITE(EQ(Mop(Cast
36279                                                                              F1,
36280                                                                            LL[bVar"b'21"]),
36281                                                                        LW(1,
36282                                                                           1)),
36283                                                                     Call
36284                                                                       ("Store",
36285                                                                        CTy"instruction",
36286                                                                        Call
36287                                                                          ("StoreHalf",
36288                                                                           CTy"Store",
36289                                                                           TP[LT,
36290                                                                              LT,
36291                                                                              LF,
36292                                                                              Var("Rt",
36293                                                                                  F4),
36294                                                                              Var("Rn",
36295                                                                                  F4),
36296                                                                              Var("m",
36297                                                                                  CTy"offset1")])),
36298                                                                     Call
36299                                                                       ("Store",
36300                                                                        CTy"instruction",
36301                                                                        Call
36302                                                                          ("StoreByte",
36303                                                                           CTy"Store",
36304                                                                           TP[LT,
36305                                                                              LT,
36306                                                                              LF,
36307                                                                              Var("Rt",
36308                                                                                  F4),
36309                                                                              Var("Rn",
36310                                                                                  F4),
36311                                                                              Var("m",
36312                                                                                  CTy"offset1")])))),
36313                                                             ITE(Bop(In,
36314                                                                     Var("Rt",
36315                                                                         F4),
36316                                                                     SL[LW(13,
36317                                                                           4),
36318                                                                        LW(15,
36319                                                                           4)]),
36320                                                                 Apply
36321                                                                   (Call
36322                                                                      ("DECODE_UNPREDICTABLE",
36323                                                                       ATy(qTy,
36324                                                                           qTy),
36325                                                                       TP[Var("mc",
36326                                                                              CTy"MachineCode"),
36327                                                                          LS
36328                                                                           "StoreByte/Half (immediate)"]),
36329                                                                    qVar"s"),
36330                                                                 qVar"s")],
36331                                                          TP[Apply
36332                                                               (Call
36333                                                                  ("Skip",
36334                                                                   ATy(qTy,
36335                                                                       CTy"instruction"),
36336                                                                   LU),
36337                                                                qVar"s"),
36338                                                             qVar"s"]))))))],
36339                                    Apply
36340                                      (Call
36341                                         ("UndefinedThumb",
36342                                          ATy(qTy,
36343                                              PTy(CTy"instruction",qTy)),
36344                                          LU),qVar"state")))],
36345                              Apply
36346                                (Call
36347                                   ("UndefinedThumb",
36348                                    ATy(qTy,PTy(CTy"instruction",qTy)),LU),
36349                                 qVar"state"))),
36350                         (Bop(And,bVar"b'31",
36351                              Bop(And,bVar"b'30",
36352                                  Bop(And,bVar"b'29",Mop(Not,bVar"b'26")))),
36353                          ITB([(Bop(And,Mop(Not,bVar"b'25"),
36354                                    Bop(And,Mop(Not,bVar"b'24"),
36355                                        Bop(And,bVar"b'23",
36356                                            Bop(And,Mop(Not,bVar"b'22"),
36357                                                Mop(Not,bVar"b'20"))))),
36358                                Let(Var("Rn",F4),
36359                                    Mop(Cast F4,
36360                                        LL[bVar"b'19",bVar"b'18",
36361                                           bVar"b'17",bVar"b'16"]),
36362                                    Let(TP[Var("v",F4),qVar"s"],
36363                                        Apply
36364                                          (Call
36365                                             ("ThumbCondition",
36366                                              ATy(qTy,PTy(F4,qTy)),LU),
36367                                           qVar"state"),
36368                                        Let(TP[bVar"v",qVar"s"],
36369                                            Apply
36370                                              (Call
36371                                                 ("Do",
36372                                                  ATy(qTy,PTy(bTy,qTy)),
36373                                                  TP[Var("v",F4),
36374                                                     Apply
36375                                                       (Call
36376                                                          ("HaveThumb2",
36377                                                           ATy(qTy,bTy),LU),
36378                                                        qVar"s")]),qVar"s"),
36379                                            ITE(bVar"v",
36380                                                Let(Var("registers",F16),
36381                                                    CC[LW(0,1),
36382                                                       Mop(Cast F1,
36383                                                           LL[bVar"b'14"]),
36384                                                       LW(0,1),
36385                                                       Mop(Cast(FTy 13),
36386                                                           LL[bVar"b'12",
36387                                                              bVar"b'11",
36388                                                              bVar"b'10",
36389                                                              bVar"b'9",
36390                                                              bVar"b'8",
36391                                                              bVar"b'7",
36392                                                              bVar"b'6",
36393                                                              bVar"b'5",
36394                                                              bVar"b'4",
36395                                                              bVar"b'3",
36396                                                              bVar"b'2",
36397                                                              bVar"b'1",
36398                                                              bVar"b'0"])],
36399                                                    Let(bVar"wback",
36400                                                        EQ(Mop(Cast F1,
36401                                                               LL[bVar"b'21"]),
36402                                                           LW(1,1)),
36403                                                        TP[Call
36404                                                             ("Store",
36405                                                              CTy"instruction",
36406                                                              Call
36407                                                                ("StoreMultiple",
36408                                                                 CTy"Store",
36409                                                                 TP[LT,LF,
36410                                                                    bVar"wback",
36411                                                                    Var("Rn",
36412                                                                        F4),
36413                                                                    Var("registers",
36414                                                                        F16)])),
36415                                                           ITE(Bop(Or,
36416                                                                   EQ(Var("Rn",
36417                                                                          F4),
36418                                                                      LW(15,
36419                                                                         4)),
36420                                                                   Bop(Or,
36421                                                                       Bop(Lt,
36422                                                                           Call
36423                                                                             ("BitCount",
36424                                                                              nTy,
36425                                                                              Var("registers",
36426                                                                                  F16)),
36427                                                                           LN
36428                                                                            2),
36429                                                                       Bop(Or,
36430                                                                           Bop(And,
36431                                                                               bVar"wback",
36432                                                                               Bop(Bit,
36433                                                                                   Var("registers",
36434                                                                                       F16),
36435                                                                                   Mop(Cast
36436                                                                                         nTy,
36437                                                                                       Var("Rn",
36438                                                                                           F4)))),
36439                                                                           Mop(Not,
36440                                                                               Bop(And,
36441                                                                                   EQ(Mop(Cast
36442                                                                                            F1,
36443                                                                                          LL[bVar"b'15"]),
36444                                                                                      LW(0,
36445                                                                                         1)),
36446                                                                                   EQ(Mop(Cast
36447                                                                                            F1,
36448                                                                                          LL[bVar"b'13"]),
36449                                                                                      LW(0,
36450                                                                                         1))))))),
36451                                                               Apply
36452                                                                 (Call
36453                                                                    ("DECODE_UNPREDICTABLE",
36454                                                                     ATy(qTy,
36455                                                                         qTy),
36456                                                                     TP[Var("mc",
36457                                                                            CTy"MachineCode"),
36458                                                                        LS
36459                                                                         "StoreMultiple"]),
36460                                                                  qVar"s"),
36461                                                               qVar"s")])),
36462                                                TP[Apply
36463                                                     (Call
36464                                                        ("Skip",
36465                                                         ATy(qTy,
36466                                                             CTy"instruction"),
36467                                                         LU),qVar"s"),
36468                                                   qVar"s"]))))),
36469                               (Bop(And,Mop(Not,bVar"b'25"),
36470                                    Bop(And,bVar"b'24",
36471                                        Bop(And,Mop(Not,bVar"b'23"),
36472                                            Bop(And,Mop(Not,bVar"b'22"),
36473                                                Mop(Not,bVar"b'20"))))),
36474                                Let(Var("Rn",F4),
36475                                    Mop(Cast F4,
36476                                        LL[bVar"b'19",bVar"b'18",
36477                                           bVar"b'17",bVar"b'16"]),
36478                                    Let(TP[Var("v",F4),qVar"s"],
36479                                        Apply
36480                                          (Call
36481                                             ("ThumbCondition",
36482                                              ATy(qTy,PTy(F4,qTy)),LU),
36483                                           qVar"state"),
36484                                        Let(TP[bVar"v",qVar"s"],
36485                                            Apply
36486                                              (Call
36487                                                 ("Do",
36488                                                  ATy(qTy,PTy(bTy,qTy)),
36489                                                  TP[Var("v",F4),
36490                                                     Apply
36491                                                       (Call
36492                                                          ("HaveThumb2",
36493                                                           ATy(qTy,bTy),LU),
36494                                                        qVar"s")]),qVar"s"),
36495                                            ITE(bVar"v",
36496                                                Let(Var("registers",F16),
36497                                                    CC[LW(0,1),
36498                                                       Mop(Cast F1,
36499                                                           LL[bVar"b'14"]),
36500                                                       LW(0,1),
36501                                                       Mop(Cast(FTy 13),
36502                                                           LL[bVar"b'12",
36503                                                              bVar"b'11",
36504                                                              bVar"b'10",
36505                                                              bVar"b'9",
36506                                                              bVar"b'8",
36507                                                              bVar"b'7",
36508                                                              bVar"b'6",
36509                                                              bVar"b'5",
36510                                                              bVar"b'4",
36511                                                              bVar"b'3",
36512                                                              bVar"b'2",
36513                                                              bVar"b'1",
36514                                                              bVar"b'0"])],
36515                                                    Let(bVar"wback",
36516                                                        EQ(Mop(Cast F1,
36517                                                               LL[bVar"b'21"]),
36518                                                           LW(1,1)),
36519                                                        TP[Call
36520                                                             ("Store",
36521                                                              CTy"instruction",
36522                                                              Call
36523                                                                ("StoreMultiple",
36524                                                                 CTy"Store",
36525                                                                 TP[LF,LT,
36526                                                                    bVar"wback",
36527                                                                    Var("Rn",
36528                                                                        F4),
36529                                                                    Var("registers",
36530                                                                        F16)])),
36531                                                           ITE(Bop(Or,
36532                                                                   EQ(Var("Rn",
36533                                                                          F4),
36534                                                                      LW(15,
36535                                                                         4)),
36536                                                                   Bop(Or,
36537                                                                       Bop(Lt,
36538                                                                           Call
36539                                                                             ("BitCount",
36540                                                                              nTy,
36541                                                                              Var("registers",
36542                                                                                  F16)),
36543                                                                           LN
36544                                                                            2),
36545                                                                       Bop(Or,
36546                                                                           Bop(And,
36547                                                                               bVar"wback",
36548                                                                               Bop(Bit,
36549                                                                                   Var("registers",
36550                                                                                       F16),
36551                                                                                   Mop(Cast
36552                                                                                         nTy,
36553                                                                                       Var("Rn",
36554                                                                                           F4)))),
36555                                                                           Mop(Not,
36556                                                                               Bop(And,
36557                                                                                   EQ(Mop(Cast
36558                                                                                            F1,
36559                                                                                          LL[bVar"b'15"]),
36560                                                                                      LW(0,
36561                                                                                         1)),
36562                                                                                   EQ(Mop(Cast
36563                                                                                            F1,
36564                                                                                          LL[bVar"b'13"]),
36565                                                                                      LW(0,
36566                                                                                         1))))))),
36567                                                               Apply
36568                                                                 (Call
36569                                                                    ("DECODE_UNPREDICTABLE",
36570                                                                     ATy(qTy,
36571                                                                         qTy),
36572                                                                     TP[Var("mc",
36573                                                                            CTy"MachineCode"),
36574                                                                        LS
36575                                                                         "StoreMultiple"]),
36576                                                                  qVar"s"),
36577                                                               qVar"s")])),
36578                                                TP[Apply
36579                                                     (Call
36580                                                        ("Skip",
36581                                                         ATy(qTy,
36582                                                             CTy"instruction"),
36583                                                         LU),qVar"s"),
36584                                                   qVar"s"]))))),
36585                               (Bop(And,Mop(Not,bVar"b'25"),
36586                                    Bop(And,Mop(Not,bVar"b'24"),
36587                                        Bop(And,bVar"b'23",
36588                                            Bop(And,Mop(Not,bVar"b'22"),
36589                                                bVar"b'20")))),
36590                                Let(Var("Rn",F4),
36591                                    Mop(Cast F4,
36592                                        LL[bVar"b'19",bVar"b'18",
36593                                           bVar"b'17",bVar"b'16"]),
36594                                    Let(Var("M",F1),
36595                                        Mop(Cast F1,LL[bVar"b'14"]),
36596                                        Let(Var("P",F1),
36597                                            Mop(Cast F1,LL[bVar"b'15"]),
36598                                            Let(TP[Var("v",F4),qVar"s"],
36599                                                Apply
36600                                                  (Call
36601                                                     ("ThumbCondition",
36602                                                      ATy(qTy,PTy(F4,qTy)),
36603                                                      LU),qVar"state"),
36604                                                Let(TP[bVar"v",qVar"s"],
36605                                                    Apply
36606                                                      (Call
36607                                                         ("Do",
36608                                                          ATy(qTy,
36609                                                              PTy(bTy,qTy)),
36610                                                          TP[Var("v",F4),
36611                                                             Apply
36612                                                               (Call
36613                                                                  ("HaveThumb2",
36614                                                                   ATy(qTy,
36615                                                                       bTy),
36616                                                                   LU),
36617                                                                qVar"s")]),
36618                                                       qVar"s"),
36619                                                    ITE(bVar"v",
36620                                                        Let(Var("registers",
36621                                                                F16),
36622                                                            CC[Var("P",F1),
36623                                                               Var("M",F1),
36624                                                               LW(0,1),
36625                                                               Mop(Cast
36626                                                                     (FTy 13),
36627                                                                   LL[bVar"b'12",
36628                                                                      bVar"b'11",
36629                                                                      bVar"b'10",
36630                                                                      bVar"b'9",
36631                                                                      bVar"b'8",
36632                                                                      bVar"b'7",
36633                                                                      bVar"b'6",
36634                                                                      bVar"b'5",
36635                                                                      bVar"b'4",
36636                                                                      bVar"b'3",
36637                                                                      bVar"b'2",
36638                                                                      bVar"b'1",
36639                                                                      bVar"b'0"])],
36640                                                            Let(bVar"wback",
36641                                                                EQ(Mop(Cast
36642                                                                         F1,
36643                                                                       LL[bVar"b'21"]),
36644                                                                   LW(1,1)),
36645                                                                TP[Call
36646                                                                     ("Load",
36647                                                                      CTy"instruction",
36648                                                                      Call
36649                                                                        ("LoadMultiple",
36650                                                                         CTy"Load",
36651                                                                         TP[LT,
36652                                                                            LF,
36653                                                                            bVar"wback",
36654                                                                            Var("Rn",
36655                                                                                F4),
36656                                                                            Var("registers",
36657                                                                                F16)])),
36658                                                                   ITE(Bop(Or,
36659                                                                           EQ(Var("Rn",
36660                                                                                  F4),
36661                                                                              LW(15,
36662                                                                                 4)),
36663                                                                           Bop(Or,
36664                                                                               Bop(Lt,
36665                                                                                   Call
36666                                                                                     ("BitCount",
36667                                                                                      nTy,
36668                                                                                      Var("registers",
36669                                                                                          F16)),
36670                                                                                   LN
36671                                                                                    2),
36672                                                                               Bop(Or,
36673                                                                                   Bop(And,
36674                                                                                       EQ(Var("P",
36675                                                                                              F1),
36676                                                                                          LW(1,
36677                                                                                             1)),
36678                                                                                       EQ(Var("M",
36679                                                                                              F1),
36680                                                                                          LW(1,
36681                                                                                             1))),
36682                                                                                   Bop(Or,
36683                                                                                       Bop(And,
36684                                                                                           Bop(Bit,
36685                                                                                               Var("registers",
36686                                                                                                   F16),
36687                                                                                               LN
36688                                                                                                15),
36689                                                                                           Bop(And,
36690                                                                                               Apply
36691                                                                                                 (Call
36692                                                                                                    ("InITBlock",
36693                                                                                                     ATy(qTy,
36694                                                                                                         bTy),
36695                                                                                                     LU),
36696                                                                                                  qVar"s"),
36697                                                                                               Mop(Not,
36698                                                                                                   Apply
36699                                                                                                     (Call
36700                                                                                                        ("LastInITBlock",
36701                                                                                                         ATy(qTy,
36702                                                                                                             bTy),
36703                                                                                                         LU),
36704                                                                                                      qVar"s")))),
36705                                                                                       Bop(Or,
36706                                                                                           Bop(And,
36707                                                                                               bVar"wback",
36708                                                                                               Bop(Bit,
36709                                                                                                   Var("registers",
36710                                                                                                       F16),
36711                                                                                                   Mop(Cast
36712                                                                                                         nTy,
36713                                                                                                       Var("Rn",
36714                                                                                                           F4)))),
36715                                                                                           Mop(Not,
36716                                                                                               EQ(Mop(Cast
36717                                                                                                        F1,
36718                                                                                                      LL[bVar"b'13"]),
36719                                                                                                  LW(0,
36720                                                                                                     1)))))))),
36721                                                                       Apply
36722                                                                         (Call
36723                                                                            ("DECODE_UNPREDICTABLE",
36724                                                                             ATy(qTy,
36725                                                                                 qTy),
36726                                                                             TP[Var("mc",
36727                                                                                    CTy"MachineCode"),
36728                                                                                LS
36729                                                                                 "LoadMultiple"]),
36730                                                                          qVar"s"),
36731                                                                       qVar"s")])),
36732                                                        TP[Apply
36733                                                             (Call
36734                                                                ("Skip",
36735                                                                 ATy(qTy,
36736                                                                     CTy"instruction"),
36737                                                                 LU),
36738                                                              qVar"s"),
36739                                                           qVar"s"]))))))),
36740                               (Bop(And,Mop(Not,bVar"b'25"),
36741                                    Bop(And,bVar"b'24",
36742                                        Bop(And,Mop(Not,bVar"b'23"),
36743                                            Bop(And,Mop(Not,bVar"b'22"),
36744                                                bVar"b'20")))),
36745                                Let(Var("Rn",F4),
36746                                    Mop(Cast F4,
36747                                        LL[bVar"b'19",bVar"b'18",
36748                                           bVar"b'17",bVar"b'16"]),
36749                                    Let(Var("M",F1),
36750                                        Mop(Cast F1,LL[bVar"b'14"]),
36751                                        Let(Var("P",F1),
36752                                            Mop(Cast F1,LL[bVar"b'15"]),
36753                                            Let(TP[Var("v",F4),qVar"s"],
36754                                                Apply
36755                                                  (Call
36756                                                     ("ThumbCondition",
36757                                                      ATy(qTy,PTy(F4,qTy)),
36758                                                      LU),qVar"state"),
36759                                                Let(TP[bVar"v",qVar"s"],
36760                                                    Apply
36761                                                      (Call
36762                                                         ("Do",
36763                                                          ATy(qTy,
36764                                                              PTy(bTy,qTy)),
36765                                                          TP[Var("v",F4),
36766                                                             Apply
36767                                                               (Call
36768                                                                  ("HaveThumb2",
36769                                                                   ATy(qTy,
36770                                                                       bTy),
36771                                                                   LU),
36772                                                                qVar"s")]),
36773                                                       qVar"s"),
36774                                                    ITE(bVar"v",
36775                                                        Let(Var("registers",
36776                                                                F16),
36777                                                            CC[Var("P",F1),
36778                                                               Var("M",F1),
36779                                                               LW(0,1),
36780                                                               Mop(Cast
36781                                                                     (FTy 13),
36782                                                                   LL[bVar"b'12",
36783                                                                      bVar"b'11",
36784                                                                      bVar"b'10",
36785                                                                      bVar"b'9",
36786                                                                      bVar"b'8",
36787                                                                      bVar"b'7",
36788                                                                      bVar"b'6",
36789                                                                      bVar"b'5",
36790                                                                      bVar"b'4",
36791                                                                      bVar"b'3",
36792                                                                      bVar"b'2",
36793                                                                      bVar"b'1",
36794                                                                      bVar"b'0"])],
36795                                                            Let(bVar"wback",
36796                                                                EQ(Mop(Cast
36797                                                                         F1,
36798                                                                       LL[bVar"b'21"]),
36799                                                                   LW(1,1)),
36800                                                                TP[Call
36801                                                                     ("Load",
36802                                                                      CTy"instruction",
36803                                                                      Call
36804                                                                        ("LoadMultiple",
36805                                                                         CTy"Load",
36806                                                                         TP[LF,
36807                                                                            LT,
36808                                                                            bVar"wback",
36809                                                                            Var("Rn",
36810                                                                                F4),
36811                                                                            Var("registers",
36812                                                                                F16)])),
36813                                                                   ITE(Bop(Or,
36814                                                                           EQ(Var("Rn",
36815                                                                                  F4),
36816                                                                              LW(15,
36817                                                                                 4)),
36818                                                                           Bop(Or,
36819                                                                               Bop(Lt,
36820                                                                                   Call
36821                                                                                     ("BitCount",
36822                                                                                      nTy,
36823                                                                                      Var("registers",
36824                                                                                          F16)),
36825                                                                                   LN
36826                                                                                    2),
36827                                                                               Bop(Or,
36828                                                                                   Bop(And,
36829                                                                                       EQ(Var("P",
36830                                                                                              F1),
36831                                                                                          LW(1,
36832                                                                                             1)),
36833                                                                                       EQ(Var("M",
36834                                                                                              F1),
36835                                                                                          LW(1,
36836                                                                                             1))),
36837                                                                                   Bop(Or,
36838                                                                                       Bop(And,
36839                                                                                           Bop(Bit,
36840                                                                                               Var("registers",
36841                                                                                                   F16),
36842                                                                                               LN
36843                                                                                                15),
36844                                                                                           Bop(And,
36845                                                                                               Apply
36846                                                                                                 (Call
36847                                                                                                    ("InITBlock",
36848                                                                                                     ATy(qTy,
36849                                                                                                         bTy),
36850                                                                                                     LU),
36851                                                                                                  qVar"s"),
36852                                                                                               Mop(Not,
36853                                                                                                   Apply
36854                                                                                                     (Call
36855                                                                                                        ("LastInITBlock",
36856                                                                                                         ATy(qTy,
36857                                                                                                             bTy),
36858                                                                                                         LU),
36859                                                                                                      qVar"s")))),
36860                                                                                       Bop(Or,
36861                                                                                           Bop(And,
36862                                                                                               bVar"wback",
36863                                                                                               Bop(Bit,
36864                                                                                                   Var("registers",
36865                                                                                                       F16),
36866                                                                                                   Mop(Cast
36867                                                                                                         nTy,
36868                                                                                                       Var("Rn",
36869                                                                                                           F4)))),
36870                                                                                           Mop(Not,
36871                                                                                               EQ(Mop(Cast
36872                                                                                                        F1,
36873                                                                                                      LL[bVar"b'13"]),
36874                                                                                                  LW(0,
36875                                                                                                     1)))))))),
36876                                                                       Apply
36877                                                                         (Call
36878                                                                            ("DECODE_UNPREDICTABLE",
36879                                                                             ATy(qTy,
36880                                                                                 qTy),
36881                                                                             TP[Var("mc",
36882                                                                                    CTy"MachineCode"),
36883                                                                                LS
36884                                                                                 "LoadMultiple"]),
36885                                                                          qVar"s"),
36886                                                                       qVar"s")])),
36887                                                        TP[Apply
36888                                                             (Call
36889                                                                ("Skip",
36890                                                                 ATy(qTy,
36891                                                                     CTy"instruction"),
36892                                                                 LU),
36893                                                              qVar"s"),
36894                                                           qVar"s"]))))))),
36895                               (Bop(And,Mop(Not,bVar"b'25"),
36896                                    Bop(And,Mop(Not,bVar"b'22"),
36897                                        Mop(Not,bVar"b'20"))),
36898                                Let(Var("op",FTy 2),
36899                                    Mop(Cast(FTy 2),
36900                                        LL[bVar"b'24",bVar"b'23"]),
36901                                    Let(TP[Var("v",F4),qVar"s"],
36902                                        Apply
36903                                          (Call
36904                                             ("ThumbCondition",
36905                                              ATy(qTy,PTy(F4,qTy)),LU),
36906                                           qVar"state"),
36907                                        Let(TP[bVar"v",qVar"s"],
36908                                            Apply
36909                                              (Call
36910                                                 ("Do",
36911                                                  ATy(qTy,PTy(bTy,qTy)),
36912                                                  TP[Var("v",F4),
36913                                                     Bop(And,
36914                                                         Bop(In,
36915                                                             Var("op",
36916                                                                 FTy 2),
36917                                                             SL[LW(0,2),
36918                                                                LW(3,2)]),
36919                                                         Apply
36920                                                           (Call
36921                                                              ("HaveThumb2",
36922                                                               ATy(qTy,bTy),
36923                                                               LU),qVar"s"))]),
36924                                               qVar"s"),
36925                                            ITE(bVar"v",
36926                                                TP[Call
36927                                                     ("System",
36928                                                      CTy"instruction",
36929                                                      Call
36930                                                        ("StoreReturnState",
36931                                                         CTy"System",
36932                                                         TP[EQ(Var("op",
36933                                                                   FTy 2),
36934                                                               LW(3,2)),
36935                                                            LF,
36936                                                            EQ(Mop(Cast F1,
36937                                                                   LL[bVar"b'21"]),
36938                                                               LW(1,1)),
36939                                                            Mop(Cast
36940                                                                  (FTy 5),
36941                                                                LL[bVar"b'4",
36942                                                                   bVar"b'3",
36943                                                                   bVar"b'2",
36944                                                                   bVar"b'1",
36945                                                                   bVar"b'0"])])),
36946                                                   ITE(Bop(Or,
36947                                                           EQ(Apply
36948                                                                (Call
36949                                                                   ("CurrentInstrSet",
36950                                                                    ATy(qTy,
36951                                                                        CTy"InstrSet"),
36952                                                                    LU),
36953                                                                 qVar"s"),
36954                                                              LC("InstrSet_ThumbEE",
36955                                                                 CTy"InstrSet")),
36956                                                           Mop(Not,
36957                                                               Bop(And,
36958                                                                   EQ(Mop(Cast
36959                                                                            F4,
36960                                                                          LL[bVar"b'19",
36961                                                                             bVar"b'18",
36962                                                                             bVar"b'17",
36963                                                                             bVar"b'16"]),
36964                                                                      LW(13,
36965                                                                         4)),
36966                                                                   EQ(Mop(Cast
36967                                                                            (FTy 11),
36968                                                                          LL[bVar"b'15",
36969                                                                             bVar"b'14",
36970                                                                             bVar"b'13",
36971                                                                             bVar"b'12",
36972                                                                             bVar"b'11",
36973                                                                             bVar"b'10",
36974                                                                             bVar"b'9",
36975                                                                             bVar"b'8",
36976                                                                             bVar"b'7",
36977                                                                             bVar"b'6",
36978                                                                             bVar"b'5"]),
36979                                                                      LW(1536,
36980                                                                         11))))),
36981                                                       Apply
36982                                                         (Call
36983                                                            ("DECODE_UNPREDICTABLE",
36984                                                             ATy(qTy,qTy),
36985                                                             TP[Var("mc",
36986                                                                    CTy"MachineCode"),
36987                                                                LS
36988                                                                 "StoreReturnState"]),
36989                                                          qVar"s"),qVar"s")],
36990                                                TP[Apply
36991                                                     (Call
36992                                                        ("Skip",
36993                                                         ATy(qTy,
36994                                                             CTy"instruction"),
36995                                                         LU),qVar"s"),
36996                                                   qVar"s"]))))),
36997                               (Bop(And,Mop(Not,bVar"b'25"),
36998                                    Bop(And,Mop(Not,bVar"b'22"),bVar"b'20")),
36999                                Let(Var("Rn",F4),
37000                                    Mop(Cast F4,
37001                                        LL[bVar"b'19",bVar"b'18",
37002                                           bVar"b'17",bVar"b'16"]),
37003                                    Let(Var("op",FTy 2),
37004                                        Mop(Cast(FTy 2),
37005                                            LL[bVar"b'24",bVar"b'23"]),
37006                                        Let(TP[Var("v",F4),qVar"s"],
37007                                            Apply
37008                                              (Call
37009                                                 ("ThumbCondition",
37010                                                  ATy(qTy,PTy(F4,qTy)),LU),
37011                                               qVar"state"),
37012                                            Let(TP[bVar"v",qVar"s"],
37013                                                Apply
37014                                                  (Call
37015                                                     ("Do",
37016                                                      ATy(qTy,PTy(bTy,qTy)),
37017                                                      TP[Var("v",F4),
37018                                                         Bop(And,
37019                                                             Bop(In,
37020                                                                 Var("op",
37021                                                                     FTy 2),
37022                                                                 SL[LW(0,2),
37023                                                                    LW(3,2)]),
37024                                                             Apply
37025                                                               (Call
37026                                                                  ("HaveThumb2",
37027                                                                   ATy(qTy,
37028                                                                       bTy),
37029                                                                   LU),
37030                                                                qVar"s"))]),
37031                                                   qVar"s"),
37032                                                ITE(bVar"v",
37033                                                    TP[Call
37034                                                         ("System",
37035                                                          CTy"instruction",
37036                                                          Call
37037                                                            ("ReturnFromException",
37038                                                             CTy"System",
37039                                                             TP[EQ(Var("op",
37040                                                                       FTy 2),
37041                                                                   LW(3,2)),
37042                                                                LF,
37043                                                                EQ(Mop(Cast
37044                                                                         F1,
37045                                                                       LL[bVar"b'21"]),
37046                                                                   LW(1,1)),
37047                                                                Var("Rn",
37048                                                                    F4)])),
37049                                                       ITE(Bop(Or,
37050                                                               EQ(Apply
37051                                                                    (Call
37052                                                                       ("CurrentInstrSet",
37053                                                                        ATy(qTy,
37054                                                                            CTy"InstrSet"),
37055                                                                        LU),
37056                                                                     qVar"s"),
37057                                                                  LC("InstrSet_ThumbEE",
37058                                                                     CTy"InstrSet")),
37059                                                               Bop(Or,
37060                                                                   EQ(Var("Rn",
37061                                                                          F4),
37062                                                                      LW(15,
37063                                                                         4)),
37064                                                                   Bop(Or,
37065                                                                       Bop(And,
37066                                                                           Apply
37067                                                                             (Call
37068                                                                                ("InITBlock",
37069                                                                                 ATy(qTy,
37070                                                                                     bTy),
37071                                                                                 LU),
37072                                                                              qVar"s"),
37073                                                                           Mop(Not,
37074                                                                               Apply
37075                                                                                 (Call
37076                                                                                    ("LastInITBlock",
37077                                                                                     ATy(qTy,
37078                                                                                         bTy),
37079                                                                                     LU),
37080                                                                                  qVar"s"))),
37081                                                                       Mop(Not,
37082                                                                           EQ(Mop(Cast
37083                                                                                    F16,
37084                                                                                  LL[bVar"b'15",
37085                                                                                     bVar"b'14",
37086                                                                                     bVar"b'13",
37087                                                                                     bVar"b'12",
37088                                                                                     bVar"b'11",
37089                                                                                     bVar"b'10",
37090                                                                                     bVar"b'9",
37091                                                                                     bVar"b'8",
37092                                                                                     bVar"b'7",
37093                                                                                     bVar"b'6",
37094                                                                                     bVar"b'5",
37095                                                                                     bVar"b'4",
37096                                                                                     bVar"b'3",
37097                                                                                     bVar"b'2",
37098                                                                                     bVar"b'1",
37099                                                                                     bVar"b'0"]),
37100                                                                              LW(49152,
37101                                                                                 16)))))),
37102                                                           Apply
37103                                                             (Call
37104                                                                ("DECODE_UNPREDICTABLE",
37105                                                                 ATy(qTy,
37106                                                                     qTy),
37107                                                                 TP[Var("mc",
37108                                                                        CTy"MachineCode"),
37109                                                                    LS
37110                                                                     "ReturnFromException"]),
37111                                                              qVar"s"),
37112                                                           qVar"s")],
37113                                                    TP[Apply
37114                                                         (Call
37115                                                            ("Skip",
37116                                                             ATy(qTy,
37117                                                                 CTy"instruction"),
37118                                                             LU),qVar"s"),
37119                                                       qVar"s"])))))),
37120                               (Bop(And,Mop(Not,bVar"b'25"),
37121                                    Bop(And,Mop(Not,bVar"b'24"),
37122                                        Bop(And,Mop(Not,bVar"b'23"),
37123                                            Bop(And,bVar"b'22",
37124                                                Bop(And,
37125                                                    Mop(Not,bVar"b'21"),
37126                                                    Mop(Not,bVar"b'20")))))),
37127                                Let(Var("Rn",F4),
37128                                    Mop(Cast F4,
37129                                        LL[bVar"b'19",bVar"b'18",
37130                                           bVar"b'17",bVar"b'16"]),
37131                                    Let(Var("Rd",F4),
37132                                        Mop(Cast F4,
37133                                            LL[bVar"b'11",bVar"b'10",
37134                                               bVar"b'9",bVar"b'8"]),
37135                                        Let(Var("Rt",F4),
37136                                            Mop(Cast F4,
37137                                                LL[bVar"b'15",bVar"b'14",
37138                                                   bVar"b'13",bVar"b'12"]),
37139                                            Let(TP[Var("v",F4),qVar"s"],
37140                                                Apply
37141                                                  (Call
37142                                                     ("ThumbCondition",
37143                                                      ATy(qTy,PTy(F4,qTy)),
37144                                                      LU),qVar"state"),
37145                                                Let(TP[bVar"v",qVar"s"],
37146                                                    Apply
37147                                                      (Call
37148                                                         ("Do",
37149                                                          ATy(qTy,
37150                                                              PTy(bTy,qTy)),
37151                                                          TP[Var("v",F4),
37152                                                             Apply
37153                                                               (Call
37154                                                                  ("HaveThumb2",
37155                                                                   ATy(qTy,
37156                                                                       bTy),
37157                                                                   LU),
37158                                                                qVar"s")]),
37159                                                       qVar"s"),
37160                                                    ITE(bVar"v",
37161                                                        TP[Call
37162                                                             ("Store",
37163                                                              CTy"instruction",
37164                                                              Call
37165                                                                ("StoreExclusive",
37166                                                                 CTy"Store",
37167                                                                 TP[Var("Rd",
37168                                                                        F4),
37169                                                                    Var("Rt",
37170                                                                        F4),
37171                                                                    Var("Rn",
37172                                                                        F4),
37173                                                                    Mop(Cast
37174                                                                          F32,
37175                                                                        CC[Mop(Cast
37176                                                                                 F8,
37177                                                                               LL[bVar"b'7",
37178                                                                                  bVar"b'6",
37179                                                                                  bVar"b'5",
37180                                                                                  bVar"b'4",
37181                                                                                  bVar"b'3",
37182                                                                                  bVar"b'2",
37183                                                                                  bVar"b'1",
37184                                                                                  bVar"b'0"]),
37185                                                                           LW(0,
37186                                                                              2)])])),
37187                                                           ITE(Bop(Or,
37188                                                                   Bop(In,
37189                                                                       Var("Rd",
37190                                                                           F4),
37191                                                                       SL[LW(13,
37192                                                                             4),
37193                                                                          LW(15,
37194                                                                             4)]),
37195                                                                   Bop(Or,
37196                                                                       Bop(In,
37197                                                                           Var("Rt",
37198                                                                               F4),
37199                                                                           SL[LW(13,
37200                                                                                 4),
37201                                                                              LW(15,
37202                                                                                 4)]),
37203                                                                       Bop(Or,
37204                                                                           EQ(Var("Rn",
37205                                                                                  F4),
37206                                                                              LW(15,
37207                                                                                 4)),
37208                                                                           Bop(Or,
37209                                                                               EQ(Var("Rd",
37210                                                                                      F4),
37211                                                                                  Var("Rn",
37212                                                                                      F4)),
37213                                                                               EQ(Var("Rd",
37214                                                                                      F4),
37215                                                                                  Var("Rt",
37216                                                                                      F4)))))),
37217                                                               Apply
37218                                                                 (Call
37219                                                                    ("DECODE_UNPREDICTABLE",
37220                                                                     ATy(qTy,
37221                                                                         qTy),
37222                                                                     TP[Var("mc",
37223                                                                            CTy"MachineCode"),
37224                                                                        LS
37225                                                                         "StoreExclusive"]),
37226                                                                  qVar"s"),
37227                                                               qVar"s")],
37228                                                        TP[Apply
37229                                                             (Call
37230                                                                ("Skip",
37231                                                                 ATy(qTy,
37232                                                                     CTy"instruction"),
37233                                                                 LU),
37234                                                              qVar"s"),
37235                                                           qVar"s"]))))))),
37236                               (Bop(And,Mop(Not,bVar"b'25"),
37237                                    Bop(And,Mop(Not,bVar"b'24"),
37238                                        Bop(And,Mop(Not,bVar"b'23"),
37239                                            Bop(And,bVar"b'22",
37240                                                Bop(And,
37241                                                    Mop(Not,bVar"b'21"),
37242                                                    bVar"b'20"))))),
37243                                Let(Var("Rn",F4),
37244                                    Mop(Cast F4,
37245                                        LL[bVar"b'19",bVar"b'18",
37246                                           bVar"b'17",bVar"b'16"]),
37247                                    Let(Var("Rt",F4),
37248                                        Mop(Cast F4,
37249                                            LL[bVar"b'15",bVar"b'14",
37250                                               bVar"b'13",bVar"b'12"]),
37251                                        Let(TP[Var("v",F4),qVar"s"],
37252                                            Apply
37253                                              (Call
37254                                                 ("ThumbCondition",
37255                                                  ATy(qTy,PTy(F4,qTy)),LU),
37256                                               qVar"state"),
37257                                            Let(TP[bVar"v",qVar"s"],
37258                                                Apply
37259                                                  (Call
37260                                                     ("Do",
37261                                                      ATy(qTy,PTy(bTy,qTy)),
37262                                                      TP[Var("v",F4),
37263                                                         Apply
37264                                                           (Call
37265                                                              ("HaveThumb2",
37266                                                               ATy(qTy,bTy),
37267                                                               LU),qVar"s")]),
37268                                                   qVar"s"),
37269                                                ITE(bVar"v",
37270                                                    TP[Call
37271                                                         ("Load",
37272                                                          CTy"instruction",
37273                                                          Call
37274                                                            ("LoadExclusive",
37275                                                             CTy"Load",
37276                                                             TP[Var("Rt",
37277                                                                    F4),
37278                                                                Var("Rn",
37279                                                                    F4),
37280                                                                Mop(Cast
37281                                                                      F32,
37282                                                                    CC[Mop(Cast
37283                                                                             F8,
37284                                                                           LL[bVar"b'7",
37285                                                                              bVar"b'6",
37286                                                                              bVar"b'5",
37287                                                                              bVar"b'4",
37288                                                                              bVar"b'3",
37289                                                                              bVar"b'2",
37290                                                                              bVar"b'1",
37291                                                                              bVar"b'0"]),
37292                                                                       LW(0,
37293                                                                          2)])])),
37294                                                       ITE(Bop(Or,
37295                                                               Bop(In,
37296                                                                   Var("Rt",
37297                                                                       F4),
37298                                                                   SL[LW(13,
37299                                                                         4),
37300                                                                      LW(15,
37301                                                                         4)]),
37302                                                               EQ(Var("Rn",
37303                                                                      F4),
37304                                                                  LW(15,4))),
37305                                                           Apply
37306                                                             (Call
37307                                                                ("DECODE_UNPREDICTABLE",
37308                                                                 ATy(qTy,
37309                                                                     qTy),
37310                                                                 TP[Var("mc",
37311                                                                        CTy"MachineCode"),
37312                                                                    LS
37313                                                                     "StoreExclusive"]),
37314                                                              qVar"s"),
37315                                                           qVar"s")],
37316                                                    TP[Apply
37317                                                         (Call
37318                                                            ("Skip",
37319                                                             ATy(qTy,
37320                                                                 CTy"instruction"),
37321                                                             LU),qVar"s"),
37322                                                       qVar"s"])))))),
37323                               (Bop(And,Mop(Not,bVar"b'25"),
37324                                    Bop(And,Mop(Not,bVar"b'24"),
37325                                        Bop(And,bVar"b'23",
37326                                            Bop(And,bVar"b'22",
37327                                                Bop(And,
37328                                                    Mop(Not,bVar"b'21"),
37329                                                    Bop(And,
37330                                                        Mop(Not,bVar"b'20"),
37331                                                        Bop(And,
37332                                                            Mop(Not,
37333                                                                bVar"b'7"),
37334                                                            Bop(And,
37335                                                                bVar"b'6",
37336                                                                Mop(Not,
37337                                                                    bVar"b'5"))))))))),
37338                                Let(Var("Rn",F4),
37339                                    Mop(Cast F4,
37340                                        LL[bVar"b'19",bVar"b'18",
37341                                           bVar"b'17",bVar"b'16"]),
37342                                    Let(Var("Rd",F4),
37343                                        Mop(Cast F4,
37344                                            LL[bVar"b'3",bVar"b'2",
37345                                               bVar"b'1",bVar"b'0"]),
37346                                        Let(Var("Rt",F4),
37347                                            Mop(Cast F4,
37348                                                LL[bVar"b'15",bVar"b'14",
37349                                                   bVar"b'13",bVar"b'12"]),
37350                                            Let(TP[Var("v",F4),qVar"s"],
37351                                                Apply
37352                                                  (Call
37353                                                     ("ThumbCondition",
37354                                                      ATy(qTy,PTy(F4,qTy)),
37355                                                      LU),qVar"state"),
37356                                                Let(TP[bVar"v",qVar"s"],
37357                                                    Apply
37358                                                      (Call
37359                                                         ("Do",
37360                                                          ATy(qTy,
37361                                                              PTy(bTy,qTy)),
37362                                                          TP[Var("v",F4),
37363                                                             Bop(Ge,
37364                                                                 Apply
37365                                                                   (Call
37366                                                                      ("ArchVersion",
37367                                                                       ATy(qTy,
37368                                                                           nTy),
37369                                                                       LU),
37370                                                                    qVar"s"),
37371                                                                 LN 7)]),
37372                                                       qVar"s"),
37373                                                    ITE(bVar"v",
37374                                                        TP[ITE(EQ(Mop(Cast
37375                                                                        F1,
37376                                                                      LL[bVar"b'4"]),
37377                                                                  LW(1,1)),
37378                                                               Call
37379                                                                 ("Store",
37380                                                                  CTy"instruction",
37381                                                                  Call
37382                                                                    ("StoreExclusiveHalf",
37383                                                                     CTy"Store",
37384                                                                     TP[Var("Rd",
37385                                                                            F4),
37386                                                                        Var("Rt",
37387                                                                            F4),
37388                                                                        Var("Rn",
37389                                                                            F4)])),
37390                                                               Call
37391                                                                 ("Store",
37392                                                                  CTy"instruction",
37393                                                                  Call
37394                                                                    ("StoreExclusiveByte",
37395                                                                     CTy"Store",
37396                                                                     TP[Var("Rd",
37397                                                                            F4),
37398                                                                        Var("Rt",
37399                                                                            F4),
37400                                                                        Var("Rn",
37401                                                                            F4)]))),
37402                                                           ITE(Bop(Or,
37403                                                                   Bop(In,
37404                                                                       Var("Rd",
37405                                                                           F4),
37406                                                                       SL[LW(13,
37407                                                                             4),
37408                                                                          LW(15,
37409                                                                             4)]),
37410                                                                   Bop(Or,
37411                                                                       Bop(In,
37412                                                                           Var("Rt",
37413                                                                               F4),
37414                                                                           SL[LW(13,
37415                                                                                 4),
37416                                                                              LW(15,
37417                                                                                 4)]),
37418                                                                       Bop(Or,
37419                                                                           EQ(Var("Rn",
37420                                                                                  F4),
37421                                                                              LW(15,
37422                                                                                 4)),
37423                                                                           Bop(Or,
37424                                                                               EQ(Var("Rd",
37425                                                                                      F4),
37426                                                                                  Var("Rn",
37427                                                                                      F4)),
37428                                                                               Bop(Or,
37429                                                                                   EQ(Var("Rd",
37430                                                                                          F4),
37431                                                                                      Var("Rt",
37432                                                                                          F4)),
37433                                                                                   Mop(Not,
37434                                                                                       EQ(Mop(Cast
37435                                                                                                F4,
37436                                                                                              LL[bVar"b'11",
37437                                                                                                 bVar"b'10",
37438                                                                                                 bVar"b'9",
37439                                                                                                 bVar"b'8"]),
37440                                                                                          LW(15,
37441                                                                                             4)))))))),
37442                                                               Apply
37443                                                                 (Call
37444                                                                    ("DECODE_UNPREDICTABLE",
37445                                                                     ATy(qTy,
37446                                                                         qTy),
37447                                                                     TP[Var("mc",
37448                                                                            CTy"MachineCode"),
37449                                                                        LS
37450                                                                         "StoreExclusive: Byte or Halfword"]),
37451                                                                  qVar"s"),
37452                                                               qVar"s")],
37453                                                        TP[Apply
37454                                                             (Call
37455                                                                ("Skip",
37456                                                                 ATy(qTy,
37457                                                                     CTy"instruction"),
37458                                                                 LU),
37459                                                              qVar"s"),
37460                                                           qVar"s"]))))))),
37461                               (Bop(And,Mop(Not,bVar"b'25"),
37462                                    Bop(And,Mop(Not,bVar"b'24"),
37463                                        Bop(And,bVar"b'23",
37464                                            Bop(And,bVar"b'22",
37465                                                Bop(And,
37466                                                    Mop(Not,bVar"b'21"),
37467                                                    Bop(And,
37468                                                        Mop(Not,bVar"b'20"),
37469                                                        Bop(And,
37470                                                            Mop(Not,
37471                                                                bVar"b'7"),
37472                                                            Bop(And,
37473                                                                bVar"b'6",
37474                                                                Bop(And,
37475                                                                    bVar"b'5",
37476                                                                    bVar"b'4"))))))))),
37477                                Let(Var("Rn",F4),
37478                                    Mop(Cast F4,
37479                                        LL[bVar"b'19",bVar"b'18",
37480                                           bVar"b'17",bVar"b'16"]),
37481                                    Let(Var("Rd",F4),
37482                                        Mop(Cast F4,
37483                                            LL[bVar"b'3",bVar"b'2",
37484                                               bVar"b'1",bVar"b'0"]),
37485                                        Let(Var("Rt2",F4),
37486                                            Mop(Cast F4,
37487                                                LL[bVar"b'11",bVar"b'10",
37488                                                   bVar"b'9",bVar"b'8"]),
37489                                            Let(Var("Rt",F4),
37490                                                Mop(Cast F4,
37491                                                    LL[bVar"b'15",
37492                                                       bVar"b'14",
37493                                                       bVar"b'13",
37494                                                       bVar"b'12"]),
37495                                                Let(TP[Var("v",F4),qVar"s"],
37496                                                    Apply
37497                                                      (Call
37498                                                         ("ThumbCondition",
37499                                                          ATy(qTy,
37500                                                              PTy(F4,qTy)),
37501                                                          LU),qVar"state"),
37502                                                    Let(TP[bVar"v",qVar"s"],
37503                                                        Apply
37504                                                          (Call
37505                                                             ("Do",
37506                                                              ATy(qTy,
37507                                                                  PTy(bTy,
37508                                                                      qTy)),
37509                                                              TP[Var("v",
37510                                                                     F4),
37511                                                                 Bop(Ge,
37512                                                                     Apply
37513                                                                       (Call
37514                                                                          ("ArchVersion",
37515                                                                           ATy(qTy,
37516                                                                               nTy),
37517                                                                           LU),
37518                                                                        qVar"s"),
37519                                                                     LN 7)]),
37520                                                           qVar"s"),
37521                                                        ITE(bVar"v",
37522                                                            TP[Call
37523                                                                 ("Store",
37524                                                                  CTy"instruction",
37525                                                                  Call
37526                                                                    ("StoreExclusiveDoubleword",
37527                                                                     CTy"Store",
37528                                                                     TP[Var("Rd",
37529                                                                            F4),
37530                                                                        Var("Rt",
37531                                                                            F4),
37532                                                                        Var("Rt2",
37533                                                                            F4),
37534                                                                        Var("Rn",
37535                                                                            F4)])),
37536                                                               ITE(Bop(Or,
37537                                                                       Bop(In,
37538                                                                           Var("Rd",
37539                                                                               F4),
37540                                                                           SL[LW(13,
37541                                                                                 4),
37542                                                                              LW(15,
37543                                                                                 4)]),
37544                                                                       Bop(Or,
37545                                                                           Bop(In,
37546                                                                               Var("Rt",
37547                                                                                   F4),
37548                                                                               SL[LW(13,
37549                                                                                     4),
37550                                                                                  LW(15,
37551                                                                                     4)]),
37552                                                                           Bop(Or,
37553                                                                               Bop(In,
37554                                                                                   Var("Rt2",
37555                                                                                       F4),
37556                                                                                   SL[LW(13,
37557                                                                                         4),
37558                                                                                      LW(15,
37559                                                                                         4)]),
37560                                                                               Bop(Or,
37561                                                                                   EQ(Var("Rn",
37562                                                                                          F4),
37563                                                                                      LW(15,
37564                                                                                         4)),
37565                                                                                   Bop(Or,
37566                                                                                       EQ(Var("Rd",
37567                                                                                              F4),
37568                                                                                          Var("Rn",
37569                                                                                              F4)),
37570                                                                                       EQ(Var("Rd",
37571                                                                                              F4),
37572                                                                                          Var("Rt",
37573                                                                                              F4))))))),
37574                                                                   Apply
37575                                                                     (Call
37576                                                                        ("DECODE_UNPREDICTABLE",
37577                                                                         ATy(qTy,
37578                                                                             qTy),
37579                                                                         TP[Var("mc",
37580                                                                                CTy"MachineCode"),
37581                                                                            LS
37582                                                                             "StoreExclusivDoubleword"]),
37583                                                                      qVar"s"),
37584                                                                   qVar"s")],
37585                                                            TP[Apply
37586                                                                 (Call
37587                                                                    ("Skip",
37588                                                                     ATy(qTy,
37589                                                                         CTy"instruction"),
37590                                                                     LU),
37591                                                                  qVar"s"),
37592                                                               qVar"s"])))))))),
37593                               (Bop(And,Mop(Not,bVar"b'25"),
37594                                    Bop(And,Mop(Not,bVar"b'24"),
37595                                        Bop(And,bVar"b'23",
37596                                            Bop(And,bVar"b'22",
37597                                                Bop(And,
37598                                                    Mop(Not,bVar"b'21"),
37599                                                    Bop(And,bVar"b'20",
37600                                                        Bop(And,
37601                                                            Mop(Not,
37602                                                                bVar"b'7"),
37603                                                            Bop(And,
37604                                                                Mop(Not,
37605                                                                    bVar"b'6"),
37606                                                                Mop(Not,
37607                                                                    bVar"b'5"))))))))),
37608                                Let(Var("Rn",F4),
37609                                    Mop(Cast F4,
37610                                        LL[bVar"b'19",bVar"b'18",
37611                                           bVar"b'17",bVar"b'16"]),
37612                                    Let(Var("Rm",F4),
37613                                        Mop(Cast F4,
37614                                            LL[bVar"b'3",bVar"b'2",
37615                                               bVar"b'1",bVar"b'0"]),
37616                                        Let(TP[Var("v",F4),qVar"s"],
37617                                            Apply
37618                                              (Call
37619                                                 ("ThumbCondition",
37620                                                  ATy(qTy,PTy(F4,qTy)),LU),
37621                                               qVar"state"),
37622                                            Let(TP[bVar"v",qVar"s"],
37623                                                Apply
37624                                                  (Call
37625                                                     ("Do",
37626                                                      ATy(qTy,PTy(bTy,qTy)),
37627                                                      TP[Var("v",F4),
37628                                                         Apply
37629                                                           (Call
37630                                                              ("HaveThumb2",
37631                                                               ATy(qTy,bTy),
37632                                                               LU),qVar"s")]),
37633                                                   qVar"s"),
37634                                                ITE(bVar"v",
37635                                                    TP[Call
37636                                                         ("Branch",
37637                                                          CTy"instruction",
37638                                                          Call
37639                                                            ("TableBranchByte",
37640                                                             CTy"Branch",
37641                                                             TP[EQ(Mop(Cast
37642                                                                         F1,
37643                                                                       LL[bVar"b'4"]),
37644                                                                   LW(1,1)),
37645                                                                Var("Rm",
37646                                                                    F4),
37647                                                                Var("Rn",
37648                                                                    F4)])),
37649                                                       ITE(Bop(Or,
37650                                                               EQ(Var("Rn",
37651                                                                      F4),
37652                                                                  LW(13,4)),
37653                                                               Bop(Or,
37654                                                                   Bop(In,
37655                                                                       Var("Rm",
37656                                                                           F4),
37657                                                                       SL[LW(13,
37658                                                                             4),
37659                                                                          LW(15,
37660                                                                             4)]),
37661                                                                   Bop(Or,
37662                                                                       Bop(And,
37663                                                                           Apply
37664                                                                             (Call
37665                                                                                ("InITBlock",
37666                                                                                 ATy(qTy,
37667                                                                                     bTy),
37668                                                                                 LU),
37669                                                                              qVar"s"),
37670                                                                           Mop(Not,
37671                                                                               Apply
37672                                                                                 (Call
37673                                                                                    ("LastInITBlock",
37674                                                                                     ATy(qTy,
37675                                                                                         bTy),
37676                                                                                     LU),
37677                                                                                  qVar"s"))),
37678                                                                       Mop(Not,
37679                                                                           Bop(And,
37680                                                                               EQ(Mop(Cast
37681                                                                                        F4,
37682                                                                                      LL[bVar"b'15",
37683                                                                                         bVar"b'14",
37684                                                                                         bVar"b'13",
37685                                                                                         bVar"b'12"]),
37686                                                                                  LW(15,
37687                                                                                     4)),
37688                                                                               EQ(Mop(Cast
37689                                                                                        F4,
37690                                                                                      LL[bVar"b'11",
37691                                                                                         bVar"b'10",
37692                                                                                         bVar"b'9",
37693                                                                                         bVar"b'8"]),
37694                                                                                  LW(0,
37695                                                                                     4))))))),
37696                                                           Apply
37697                                                             (Call
37698                                                                ("DECODE_UNPREDICTABLE",
37699                                                                 ATy(qTy,
37700                                                                     qTy),
37701                                                                 TP[Var("mc",
37702                                                                        CTy"MachineCode"),
37703                                                                    LS
37704                                                                     "TableBranchByte"]),
37705                                                              qVar"s"),
37706                                                           qVar"s")],
37707                                                    TP[Apply
37708                                                         (Call
37709                                                            ("Skip",
37710                                                             ATy(qTy,
37711                                                                 CTy"instruction"),
37712                                                             LU),qVar"s"),
37713                                                       qVar"s"])))))),
37714                               (Bop(And,Mop(Not,bVar"b'25"),
37715                                    Bop(And,Mop(Not,bVar"b'24"),
37716                                        Bop(And,bVar"b'23",
37717                                            Bop(And,bVar"b'22",
37718                                                Bop(And,
37719                                                    Mop(Not,bVar"b'21"),
37720                                                    Bop(And,bVar"b'20",
37721                                                        Bop(And,
37722                                                            Mop(Not,
37723                                                                bVar"b'7"),
37724                                                            Bop(And,
37725                                                                bVar"b'6",
37726                                                                Mop(Not,
37727                                                                    bVar"b'5"))))))))),
37728                                Let(Var("Rn",F4),
37729                                    Mop(Cast F4,
37730                                        LL[bVar"b'19",bVar"b'18",
37731                                           bVar"b'17",bVar"b'16"]),
37732                                    Let(Var("Rt",F4),
37733                                        Mop(Cast F4,
37734                                            LL[bVar"b'15",bVar"b'14",
37735                                               bVar"b'13",bVar"b'12"]),
37736                                        Let(TP[Var("v",F4),qVar"s"],
37737                                            Apply
37738                                              (Call
37739                                                 ("ThumbCondition",
37740                                                  ATy(qTy,PTy(F4,qTy)),LU),
37741                                               qVar"state"),
37742                                            Let(TP[bVar"v",qVar"s"],
37743                                                Apply
37744                                                  (Call
37745                                                     ("Do",
37746                                                      ATy(qTy,PTy(bTy,qTy)),
37747                                                      TP[Var("v",F4),
37748                                                         Bop(Ge,
37749                                                             Apply
37750                                                               (Call
37751                                                                  ("ArchVersion",
37752                                                                   ATy(qTy,
37753                                                                       nTy),
37754                                                                   LU),
37755                                                                qVar"s"),
37756                                                             LN 7)]),
37757                                                   qVar"s"),
37758                                                ITE(bVar"v",
37759                                                    TP[ITE(EQ(Mop(Cast F1,
37760                                                                  LL[bVar"b'4"]),
37761                                                              LW(1,1)),
37762                                                           Call
37763                                                             ("Load",
37764                                                              CTy"instruction",
37765                                                              Call
37766                                                                ("LoadExclusiveHalf",
37767                                                                 CTy"Load",
37768                                                                 TP[Var("Rt",
37769                                                                        F4),
37770                                                                    Var("Rn",
37771                                                                        F4)])),
37772                                                           Call
37773                                                             ("Load",
37774                                                              CTy"instruction",
37775                                                              Call
37776                                                                ("LoadExclusiveByte",
37777                                                                 CTy"Load",
37778                                                                 TP[Var("Rt",
37779                                                                        F4),
37780                                                                    Var("Rn",
37781                                                                        F4)]))),
37782                                                       ITE(Bop(Or,
37783                                                               Bop(In,
37784                                                                   Var("Rt",
37785                                                                       F4),
37786                                                                   SL[LW(13,
37787                                                                         4),
37788                                                                      LW(15,
37789                                                                         4)]),
37790                                                               Bop(Or,
37791                                                                   EQ(Var("Rn",
37792                                                                          F4),
37793                                                                      LW(15,
37794                                                                         4)),
37795                                                                   Mop(Not,
37796                                                                       EQ(Mop(Cast
37797                                                                                F4,
37798                                                                              LL[bVar"b'11",
37799                                                                                 bVar"b'10",
37800                                                                                 bVar"b'9",
37801                                                                                 bVar"b'8"]),
37802                                                                          LW(15,
37803                                                                             4))))),
37804                                                           Apply
37805                                                             (Call
37806                                                                ("DECODE_UNPREDICTABLE",
37807                                                                 ATy(qTy,
37808                                                                     qTy),
37809                                                                 TP[Var("mc",
37810                                                                        CTy"MachineCode"),
37811                                                                    LS
37812                                                                     "LoadExclusive: Byte or Halfword"]),
37813                                                              qVar"s"),
37814                                                           qVar"s")],
37815                                                    TP[Apply
37816                                                         (Call
37817                                                            ("Skip",
37818                                                             ATy(qTy,
37819                                                                 CTy"instruction"),
37820                                                             LU),qVar"s"),
37821                                                       qVar"s"])))))),
37822                               (Bop(And,Mop(Not,bVar"b'25"),
37823                                    Bop(And,Mop(Not,bVar"b'24"),
37824                                        Bop(And,bVar"b'23",
37825                                            Bop(And,bVar"b'22",
37826                                                Bop(And,
37827                                                    Mop(Not,bVar"b'21"),
37828                                                    Bop(And,bVar"b'20",
37829                                                        Bop(And,
37830                                                            Mop(Not,
37831                                                                bVar"b'7"),
37832                                                            Bop(And,
37833                                                                bVar"b'6",
37834                                                                Bop(And,
37835                                                                    bVar"b'5",
37836                                                                    bVar"b'4"))))))))),
37837                                Let(Var("Rn",F4),
37838                                    Mop(Cast F4,
37839                                        LL[bVar"b'19",bVar"b'18",
37840                                           bVar"b'17",bVar"b'16"]),
37841                                    Let(Var("Rt2",F4),
37842                                        Mop(Cast F4,
37843                                            LL[bVar"b'11",bVar"b'10",
37844                                               bVar"b'9",bVar"b'8"]),
37845                                        Let(Var("Rt",F4),
37846                                            Mop(Cast F4,
37847                                                LL[bVar"b'15",bVar"b'14",
37848                                                   bVar"b'13",bVar"b'12"]),
37849                                            Let(TP[Var("v",F4),qVar"s"],
37850                                                Apply
37851                                                  (Call
37852                                                     ("ThumbCondition",
37853                                                      ATy(qTy,PTy(F4,qTy)),
37854                                                      LU),qVar"state"),
37855                                                Let(TP[bVar"v",qVar"s"],
37856                                                    Apply
37857                                                      (Call
37858                                                         ("Do",
37859                                                          ATy(qTy,
37860                                                              PTy(bTy,qTy)),
37861                                                          TP[Var("v",F4),
37862                                                             Bop(Ge,
37863                                                                 Apply
37864                                                                   (Call
37865                                                                      ("ArchVersion",
37866                                                                       ATy(qTy,
37867                                                                           nTy),
37868                                                                       LU),
37869                                                                    qVar"s"),
37870                                                                 LN 7)]),
37871                                                       qVar"s"),
37872                                                    ITE(bVar"v",
37873                                                        TP[Call
37874                                                             ("Load",
37875                                                              CTy"instruction",
37876                                                              Call
37877                                                                ("LoadExclusiveDoubleword",
37878                                                                 CTy"Load",
37879                                                                 TP[Var("Rt",
37880                                                                        F4),
37881                                                                    Var("Rt2",
37882                                                                        F4),
37883                                                                    Var("Rn",
37884                                                                        F4)])),
37885                                                           ITE(Bop(Or,
37886                                                                   Bop(In,
37887                                                                       Var("Rt",
37888                                                                           F4),
37889                                                                       SL[LW(13,
37890                                                                             4),
37891                                                                          LW(15,
37892                                                                             4)]),
37893                                                                   Bop(Or,
37894                                                                       Bop(In,
37895                                                                           Var("Rt2",
37896                                                                               F4),
37897                                                                           SL[LW(13,
37898                                                                                 4),
37899                                                                              LW(15,
37900                                                                                 4)]),
37901                                                                       Bop(Or,
37902                                                                           EQ(Var("Rt",
37903                                                                                  F4),
37904                                                                              Var("Rt2",
37905                                                                                  F4)),
37906                                                                           Bop(Or,
37907                                                                               EQ(Var("Rn",
37908                                                                                      F4),
37909                                                                                  LW(15,
37910                                                                                     4)),
37911                                                                               Mop(Not,
37912                                                                                   EQ(Mop(Cast
37913                                                                                            F4,
37914                                                                                          LL[bVar"b'3",
37915                                                                                             bVar"b'2",
37916                                                                                             bVar"b'1",
37917                                                                                             bVar"b'0"]),
37918                                                                                      LW(15,
37919                                                                                         4))))))),
37920                                                               Apply
37921                                                                 (Call
37922                                                                    ("DECODE_UNPREDICTABLE",
37923                                                                     ATy(qTy,
37924                                                                         qTy),
37925                                                                     TP[Var("mc",
37926                                                                            CTy"MachineCode"),
37927                                                                        LS
37928                                                                         "LoadExclusiveDoubleword"]),
37929                                                                  qVar"s"),
37930                                                               qVar"s")],
37931                                                        TP[Apply
37932                                                             (Call
37933                                                                ("Skip",
37934                                                                 ATy(qTy,
37935                                                                     CTy"instruction"),
37936                                                                 LU),
37937                                                              qVar"s"),
37938                                                           qVar"s"]))))))),
37939                               (Bop(And,Mop(Not,bVar"b'25"),
37940                                    Bop(And,bVar"b'22",Mop(Not,bVar"b'20"))),
37941                                Let(Var("Rn",F4),
37942                                    Mop(Cast F4,
37943                                        LL[bVar"b'19",bVar"b'18",
37944                                           bVar"b'17",bVar"b'16"]),
37945                                    Let(Var("W",F1),
37946                                        Mop(Cast F1,LL[bVar"b'21"]),
37947                                        Let(Var("P",F1),
37948                                            Mop(Cast F1,LL[bVar"b'24"]),
37949                                            Let(Var("Rt2",F4),
37950                                                Mop(Cast F4,
37951                                                    LL[bVar"b'11",
37952                                                       bVar"b'10",
37953                                                       bVar"b'9",bVar"b'8"]),
37954                                                Let(Var("Rt",F4),
37955                                                    Mop(Cast F4,
37956                                                        LL[bVar"b'15",
37957                                                           bVar"b'14",
37958                                                           bVar"b'13",
37959                                                           bVar"b'12"]),
37960                                                    Let(TP[Var("v",F4),
37961                                                           qVar"s"],
37962                                                        Apply
37963                                                          (Call
37964                                                             ("ThumbCondition",
37965                                                              ATy(qTy,
37966                                                                  PTy(F4,
37967                                                                      qTy)),
37968                                                              LU),
37969                                                           qVar"state"),
37970                                                        Let(TP[bVar"v",
37971                                                               qVar"s"],
37972                                                            Apply
37973                                                              (Call
37974                                                                 ("Do",
37975                                                                  ATy(qTy,
37976                                                                      PTy(bTy,
37977                                                                          qTy)),
37978                                                                  TP[Var("v",
37979                                                                         F4),
37980                                                                     Bop(And,
37981                                                                         Bop(Or,
37982                                                                             EQ(Var("P",
37983                                                                                    F1),
37984                                                                                LW(1,
37985                                                                                   1)),
37986                                                                             EQ(Var("W",
37987                                                                                    F1),
37988                                                                                LW(1,
37989                                                                                   1))),
37990                                                                         Apply
37991                                                                           (Call
37992                                                                              ("HaveThumb2",
37993                                                                               ATy(qTy,
37994                                                                                   bTy),
37995                                                                               LU),
37996                                                                            qVar"s"))]),
37997                                                               qVar"s"),
37998                                                            ITE(bVar"v",
37999                                                                Let(bVar"wback",
38000                                                                    EQ(Var("W",
38001                                                                           F1),
38002                                                                       LW(1,
38003                                                                          1)),
38004                                                                    TP[Call
38005                                                                         ("Store",
38006                                                                          CTy"instruction",
38007                                                                          Call
38008                                                                            ("StoreDual",
38009                                                                             CTy"Store",
38010                                                                             TP[EQ(Mop(Cast
38011                                                                                         F1,
38012                                                                                       LL[bVar"b'23"]),
38013                                                                                   LW(1,
38014                                                                                      1)),
38015                                                                                EQ(Var("P",
38016                                                                                       F1),
38017                                                                                   LW(1,
38018                                                                                      1)),
38019                                                                                bVar"wback",
38020                                                                                Var("Rt",
38021                                                                                    F4),
38022                                                                                Var("Rt2",
38023                                                                                    F4),
38024                                                                                Var("Rn",
38025                                                                                    F4),
38026                                                                                Call
38027                                                                                  ("immediate_form2",
38028                                                                                   CTy"offset2",
38029                                                                                   Mop(Cast
38030                                                                                         F32,
38031                                                                                       CC[Mop(Cast
38032                                                                                                F8,
38033                                                                                              LL[bVar"b'7",
38034                                                                                                 bVar"b'6",
38035                                                                                                 bVar"b'5",
38036                                                                                                 bVar"b'4",
38037                                                                                                 bVar"b'3",
38038                                                                                                 bVar"b'2",
38039                                                                                                 bVar"b'1",
38040                                                                                                 bVar"b'0"]),
38041                                                                                          LW(0,
38042                                                                                             2)]))])),
38043                                                                       ITE(Bop(Or,
38044                                                                               Bop(And,
38045                                                                                   bVar"wback",
38046                                                                                   Bop(Or,
38047                                                                                       EQ(Var("Rn",
38048                                                                                              F4),
38049                                                                                          Var("Rt",
38050                                                                                              F4)),
38051                                                                                       EQ(Var("Rn",
38052                                                                                              F4),
38053                                                                                          Var("Rt2",
38054                                                                                              F4)))),
38055                                                                               Bop(Or,
38056                                                                                   EQ(Var("Rn",
38057                                                                                          F4),
38058                                                                                      LW(15,
38059                                                                                         4)),
38060                                                                                   Bop(Or,
38061                                                                                       Bop(In,
38062                                                                                           Var("Rt",
38063                                                                                               F4),
38064                                                                                           SL[LW(13,
38065                                                                                                 4),
38066                                                                                              LW(15,
38067                                                                                                 4)]),
38068                                                                                       Bop(In,
38069                                                                                           Var("Rt2",
38070                                                                                               F4),
38071                                                                                           SL[LW(13,
38072                                                                                                 4),
38073                                                                                              LW(15,
38074                                                                                                 4)])))),
38075                                                                           Apply
38076                                                                             (Call
38077                                                                                ("DECODE_UNPREDICTABLE",
38078                                                                                 ATy(qTy,
38079                                                                                     qTy),
38080                                                                                 TP[Var("mc",
38081                                                                                        CTy"MachineCode"),
38082                                                                                    LS
38083                                                                                     "StoreDual"]),
38084                                                                              qVar"s"),
38085                                                                           qVar"s")]),
38086                                                                TP[Apply
38087                                                                     (Call
38088                                                                        ("Skip",
38089                                                                         ATy(qTy,
38090                                                                             CTy"instruction"),
38091                                                                         LU),
38092                                                                      qVar"s"),
38093                                                                   qVar"s"]))))))))),
38094                               (Bop(And,Mop(Not,bVar"b'25"),
38095                                    Bop(And,bVar"b'22",
38096                                        Bop(And,bVar"b'20",
38097                                            Bop(And,bVar"b'19",
38098                                                Bop(And,bVar"b'18",
38099                                                    Bop(And,bVar"b'17",
38100                                                        bVar"b'16")))))),
38101                                Let(Var("W",F1),
38102                                    Mop(Cast F1,LL[bVar"b'21"]),
38103                                    Let(Var("Rt2",F4),
38104                                        Mop(Cast F4,
38105                                            LL[bVar"b'11",bVar"b'10",
38106                                               bVar"b'9",bVar"b'8"]),
38107                                        Let(Var("Rt",F4),
38108                                            Mop(Cast F4,
38109                                                LL[bVar"b'15",bVar"b'14",
38110                                                   bVar"b'13",bVar"b'12"]),
38111                                            Let(TP[Var("v",F4),qVar"s"],
38112                                                Apply
38113                                                  (Call
38114                                                     ("ThumbCondition",
38115                                                      ATy(qTy,PTy(F4,qTy)),
38116                                                      LU),qVar"state"),
38117                                                Let(TP[bVar"v",qVar"s"],
38118                                                    Apply
38119                                                      (Call
38120                                                         ("Do",
38121                                                          ATy(qTy,
38122                                                              PTy(bTy,qTy)),
38123                                                          TP[Var("v",F4),
38124                                                             Bop(And,
38125                                                                 Bop(Or,
38126                                                                     EQ(Mop(Cast
38127                                                                              F1,
38128                                                                            LL[bVar"b'24"]),
38129                                                                        LW(1,
38130                                                                           1)),
38131                                                                     EQ(Var("W",
38132                                                                            F1),
38133                                                                        LW(1,
38134                                                                           1))),
38135                                                                 Apply
38136                                                                   (Call
38137                                                                      ("HaveThumb2",
38138                                                                       ATy(qTy,
38139                                                                           bTy),
38140                                                                       LU),
38141                                                                    qVar"s"))]),
38142                                                       qVar"s"),
38143                                                    ITE(bVar"v",
38144                                                        TP[Call
38145                                                             ("Load",
38146                                                              CTy"instruction",
38147                                                              Call
38148                                                                ("LoadDualLiteral",
38149                                                                 CTy"Load",
38150                                                                 TP[EQ(Mop(Cast
38151                                                                             F1,
38152                                                                           LL[bVar"b'23"]),
38153                                                                       LW(1,
38154                                                                          1)),
38155                                                                    Var("Rt",
38156                                                                        F4),
38157                                                                    Var("Rt2",
38158                                                                        F4),
38159                                                                    Mop(Cast
38160                                                                          F32,
38161                                                                        CC[Mop(Cast
38162                                                                                 F8,
38163                                                                               LL[bVar"b'7",
38164                                                                                  bVar"b'6",
38165                                                                                  bVar"b'5",
38166                                                                                  bVar"b'4",
38167                                                                                  bVar"b'3",
38168                                                                                  bVar"b'2",
38169                                                                                  bVar"b'1",
38170                                                                                  bVar"b'0"]),
38171                                                                           LW(0,
38172                                                                              2)])])),
38173                                                           ITE(Bop(Or,
38174                                                                   Bop(In,
38175                                                                       Var("Rt",
38176                                                                           F4),
38177                                                                       SL[LW(13,
38178                                                                             4),
38179                                                                          LW(15,
38180                                                                             4)]),
38181                                                                   Bop(Or,
38182                                                                       Bop(In,
38183                                                                           Var("Rt2",
38184                                                                               F4),
38185                                                                           SL[LW(13,
38186                                                                                 4),
38187                                                                              LW(15,
38188                                                                                 4)]),
38189                                                                       Bop(Or,
38190                                                                           EQ(Var("Rt",
38191                                                                                  F4),
38192                                                                              Var("Rt2",
38193                                                                                  F4)),
38194                                                                           EQ(Var("W",
38195                                                                                  F1),
38196                                                                              LW(1,
38197                                                                                 1))))),
38198                                                               Apply
38199                                                                 (Call
38200                                                                    ("DECODE_UNPREDICTABLE",
38201                                                                     ATy(qTy,
38202                                                                         qTy),
38203                                                                     TP[Var("mc",
38204                                                                            CTy"MachineCode"),
38205                                                                        LS
38206                                                                         "LoadDual: literal"]),
38207                                                                  qVar"s"),
38208                                                               qVar"s")],
38209                                                        TP[Apply
38210                                                             (Call
38211                                                                ("Skip",
38212                                                                 ATy(qTy,
38213                                                                     CTy"instruction"),
38214                                                                 LU),
38215                                                              qVar"s"),
38216                                                           qVar"s"]))))))),
38217                               (Bop(And,Mop(Not,bVar"b'25"),
38218                                    Bop(And,bVar"b'22",bVar"b'20")),
38219                                Let(Var("Rn",F4),
38220                                    Mop(Cast F4,
38221                                        LL[bVar"b'19",bVar"b'18",
38222                                           bVar"b'17",bVar"b'16"]),
38223                                    Let(Var("W",F1),
38224                                        Mop(Cast F1,LL[bVar"b'21"]),
38225                                        Let(Var("P",F1),
38226                                            Mop(Cast F1,LL[bVar"b'24"]),
38227                                            Let(Var("Rt2",F4),
38228                                                Mop(Cast F4,
38229                                                    LL[bVar"b'11",
38230                                                       bVar"b'10",
38231                                                       bVar"b'9",bVar"b'8"]),
38232                                                Let(Var("Rt",F4),
38233                                                    Mop(Cast F4,
38234                                                        LL[bVar"b'15",
38235                                                           bVar"b'14",
38236                                                           bVar"b'13",
38237                                                           bVar"b'12"]),
38238                                                    Let(TP[Var("v",F4),
38239                                                           qVar"s"],
38240                                                        Apply
38241                                                          (Call
38242                                                             ("ThumbCondition",
38243                                                              ATy(qTy,
38244                                                                  PTy(F4,
38245                                                                      qTy)),
38246                                                              LU),
38247                                                           qVar"state"),
38248                                                        Let(TP[bVar"v",
38249                                                               qVar"s"],
38250                                                            Apply
38251                                                              (Call
38252                                                                 ("Do",
38253                                                                  ATy(qTy,
38254                                                                      PTy(bTy,
38255                                                                          qTy)),
38256                                                                  TP[Var("v",
38257                                                                         F4),
38258                                                                     Bop(And,
38259                                                                         Bop(Or,
38260                                                                             EQ(Var("P",
38261                                                                                    F1),
38262                                                                                LW(1,
38263                                                                                   1)),
38264                                                                             EQ(Var("W",
38265                                                                                    F1),
38266                                                                                LW(1,
38267                                                                                   1))),
38268                                                                         Apply
38269                                                                           (Call
38270                                                                              ("HaveThumb2",
38271                                                                               ATy(qTy,
38272                                                                                   bTy),
38273                                                                               LU),
38274                                                                            qVar"s"))]),
38275                                                               qVar"s"),
38276                                                            ITE(bVar"v",
38277                                                                Let(bVar"wback",
38278                                                                    EQ(Var("W",
38279                                                                           F1),
38280                                                                       LW(1,
38281                                                                          1)),
38282                                                                    TP[Call
38283                                                                         ("Load",
38284                                                                          CTy"instruction",
38285                                                                          Call
38286                                                                            ("LoadDual",
38287                                                                             CTy"Load",
38288                                                                             TP[EQ(Mop(Cast
38289                                                                                         F1,
38290                                                                                       LL[bVar"b'23"]),
38291                                                                                   LW(1,
38292                                                                                      1)),
38293                                                                                EQ(Var("P",
38294                                                                                       F1),
38295                                                                                   LW(1,
38296                                                                                      1)),
38297                                                                                bVar"wback",
38298                                                                                Var("Rt",
38299                                                                                    F4),
38300                                                                                Var("Rt2",
38301                                                                                    F4),
38302                                                                                Var("Rn",
38303                                                                                    F4),
38304                                                                                Call
38305                                                                                  ("immediate_form2",
38306                                                                                   CTy"offset2",
38307                                                                                   Mop(Cast
38308                                                                                         F32,
38309                                                                                       CC[Mop(Cast
38310                                                                                                F8,
38311                                                                                              LL[bVar"b'7",
38312                                                                                                 bVar"b'6",
38313                                                                                                 bVar"b'5",
38314                                                                                                 bVar"b'4",
38315                                                                                                 bVar"b'3",
38316                                                                                                 bVar"b'2",
38317                                                                                                 bVar"b'1",
38318                                                                                                 bVar"b'0"]),
38319                                                                                          LW(0,
38320                                                                                             2)]))])),
38321                                                                       ITE(Bop(Or,
38322                                                                               Bop(And,
38323                                                                                   bVar"wback",
38324                                                                                   Bop(Or,
38325                                                                                       EQ(Var("Rn",
38326                                                                                              F4),
38327                                                                                          Var("Rt",
38328                                                                                              F4)),
38329                                                                                       EQ(Var("Rn",
38330                                                                                              F4),
38331                                                                                          Var("Rt2",
38332                                                                                              F4)))),
38333                                                                               Bop(Or,
38334                                                                                   Bop(In,
38335                                                                                       Var("Rt",
38336                                                                                           F4),
38337                                                                                       SL[LW(13,
38338                                                                                             4),
38339                                                                                          LW(15,
38340                                                                                             4)]),
38341                                                                                   Bop(Or,
38342                                                                                       Bop(In,
38343                                                                                           Var("Rt2",
38344                                                                                               F4),
38345                                                                                           SL[LW(13,
38346                                                                                                 4),
38347                                                                                              LW(15,
38348                                                                                                 4)]),
38349                                                                                       EQ(Var("Rt",
38350                                                                                              F4),
38351                                                                                          Var("Rt2",
38352                                                                                              F4))))),
38353                                                                           Apply
38354                                                                             (Call
38355                                                                                ("DECODE_UNPREDICTABLE",
38356                                                                                 ATy(qTy,
38357                                                                                     qTy),
38358                                                                                 TP[Var("mc",
38359                                                                                        CTy"MachineCode"),
38360                                                                                    LS
38361                                                                                     "LoadDual"]),
38362                                                                              qVar"s"),
38363                                                                           qVar"s")]),
38364                                                                TP[Apply
38365                                                                     (Call
38366                                                                        ("Skip",
38367                                                                         ATy(qTy,
38368                                                                             CTy"instruction"),
38369                                                                         LU),
38370                                                                      qVar"s"),
38371                                                                   qVar"s"]))))))))),
38372                               (bVar"b'25",
38373                                Let(Var("Rn",F4),
38374                                    Mop(Cast F4,
38375                                        LL[bVar"b'19",bVar"b'18",
38376                                           bVar"b'17",bVar"b'16"]),
38377                                    Let(Var("S",F1),
38378                                        Mop(Cast F1,LL[bVar"b'20"]),
38379                                        Let(Var("Rm",F4),
38380                                            Mop(Cast F4,
38381                                                LL[bVar"b'3",bVar"b'2",
38382                                                   bVar"b'1",bVar"b'0"]),
38383                                            Let(Var("typ",FTy 2),
38384                                                Mop(Cast(FTy 2),
38385                                                    LL[bVar"b'5",bVar"b'4"]),
38386                                                Let(Var("imm2",FTy 2),
38387                                                    Mop(Cast(FTy 2),
38388                                                        LL[bVar"b'7",
38389                                                           bVar"b'6"]),
38390                                                    Let(Var("Rd",F4),
38391                                                        Mop(Cast F4,
38392                                                            LL[bVar"b'11",
38393                                                               bVar"b'10",
38394                                                               bVar"b'9",
38395                                                               bVar"b'8"]),
38396                                                        Let(Var("imm3",
38397                                                                FTy 3),
38398                                                            Mop(Cast
38399                                                                  (FTy 3),
38400                                                                LL[bVar"b'14",
38401                                                                   bVar"b'13",
38402                                                                   bVar"b'12"]),
38403                                                            Let(bVar"GOOD_MATCH",
38404                                                                EQ(Mop(Cast
38405                                                                         F1,
38406                                                                       LL[bVar"b'15"]),
38407                                                                   LW(0,1)),
38408                                                                Let(TP[Var("v",
38409                                                                           F4),
38410                                                                       qVar"s"],
38411                                                                    Apply
38412                                                                      (Call
38413                                                                         ("ThumbCondition",
38414                                                                          ATy(qTy,
38415                                                                              PTy(F4,
38416                                                                                  qTy)),
38417                                                                          LU),
38418                                                                       qVar"state"),
38419                                                                    Let(TP[bVar"v",
38420                                                                           qVar"s"],
38421                                                                        Apply
38422                                                                          (Call
38423                                                                             ("Do",
38424                                                                              ATy(qTy,
38425                                                                                  PTy(bTy,
38426                                                                                      qTy)),
38427                                                                              TP[Var("v",
38428                                                                                     F4),
38429                                                                                 Apply
38430                                                                                   (Call
38431                                                                                      ("HaveThumb2",
38432                                                                                       ATy(qTy,
38433                                                                                           bTy),
38434                                                                                       LU),
38435                                                                                    qVar"s")]),
38436                                                                           qVar"s"),
38437                                                                        ITE(bVar"v",
38438                                                                            Let(TP[Var("shift_t",
38439                                                                                       CTy"SRType"),
38440                                                                                   nVar"shift_n"],
38441                                                                                Call
38442                                                                                  ("DecodeImmShift",
38443                                                                                   PTy(CTy"SRType",
38444                                                                                       nTy),
38445                                                                                   TP[Var("typ",
38446                                                                                          FTy 2),
38447                                                                                      CC[Var("imm3",
38448                                                                                             FTy 3),
38449                                                                                         Var("imm2",
38450                                                                                             FTy 2)]]),
38451                                                                                Let(bVar"setflags",
38452                                                                                    EQ(Var("S",
38453                                                                                           F1),
38454                                                                                       LW(1,
38455                                                                                          1)),
38456                                                                                    CS(TP[Mop(Cast
38457                                                                                                F4,
38458                                                                                              LL[bVar"b'24",
38459                                                                                                 bVar"b'23",
38460                                                                                                 bVar"b'22",
38461                                                                                                 bVar"b'21"]),
38462                                                                                          Var("Rn",
38463                                                                                              F4),
38464                                                                                          Var("Rd",
38465                                                                                              F4),
38466                                                                                          Var("S",
38467                                                                                              F1)],
38468                                                                                       [(TP[LW(0,
38469                                                                                               4),
38470                                                                                            AVar
38471                                                                                              F4,
38472                                                                                            LW(15,
38473                                                                                               4),
38474                                                                                            LW(1,
38475                                                                                               1)],
38476                                                                                         TP[Call
38477                                                                                              ("Data",
38478                                                                                               CTy"instruction",
38479                                                                                               Call
38480                                                                                                 ("TestCompareRegister",
38481                                                                                                  CTy"Data",
38482                                                                                                  TP[LW(0,
38483                                                                                                        2),
38484                                                                                                     Var("Rn",
38485                                                                                                         F4),
38486                                                                                                     Var("Rm",
38487                                                                                                         F4),
38488                                                                                                     Var("shift_t",
38489                                                                                                         CTy"SRType"),
38490                                                                                                     nVar"shift_n"])),
38491                                                                                            ITE(Bop(Or,
38492                                                                                                    Bop(In,
38493                                                                                                        Var("Rn",
38494                                                                                                            F4),
38495                                                                                                        SL[LW(13,
38496                                                                                                              4),
38497                                                                                                           LW(15,
38498                                                                                                              4)]),
38499                                                                                                    Bop(Or,
38500                                                                                                        Bop(In,
38501                                                                                                            Var("Rm",
38502                                                                                                                F4),
38503                                                                                                            SL[LW(13,
38504                                                                                                                  4),
38505                                                                                                               LW(15,
38506                                                                                                                  4)]),
38507                                                                                                        Mop(Not,
38508                                                                                                            bVar"GOOD_MATCH"))),
38509                                                                                                Apply
38510                                                                                                  (Call
38511                                                                                                     ("DECODE_UNPREDICTABLE",
38512                                                                                                      ATy(qTy,
38513                                                                                                          qTy),
38514                                                                                                      TP[Var("mc",
38515                                                                                                             CTy"MachineCode"),
38516                                                                                                         LS
38517                                                                                                          "TST (register)"]),
38518                                                                                                   qVar"s"),
38519                                                                                                qVar"s")]),
38520                                                                                        (TP[LW(0,
38521                                                                                               4),
38522                                                                                            AVar
38523                                                                                              (PTy(F4,
38524                                                                                                   PTy(F4,
38525                                                                                                       F1)))],
38526                                                                                         TP[Call
38527                                                                                              ("Data",
38528                                                                                               CTy"instruction",
38529                                                                                               Call
38530                                                                                                 ("Register",
38531                                                                                                  CTy"Data",
38532                                                                                                  TP[LW(0,
38533                                                                                                        4),
38534                                                                                                     bVar"setflags",
38535                                                                                                     Var("Rd",
38536                                                                                                         F4),
38537                                                                                                     Var("Rn",
38538                                                                                                         F4),
38539                                                                                                     Var("Rm",
38540                                                                                                         F4),
38541                                                                                                     Var("shift_t",
38542                                                                                                         CTy"SRType"),
38543                                                                                                     nVar"shift_n"])),
38544                                                                                            ITE(Bop(Or,
38545                                                                                                    EQ(Var("Rd",
38546                                                                                                           F4),
38547                                                                                                       LW(13,
38548                                                                                                          4)),
38549                                                                                                    Bop(Or,
38550                                                                                                        Bop(And,
38551                                                                                                            EQ(Var("Rd",
38552                                                                                                                   F4),
38553                                                                                                               LW(15,
38554                                                                                                                  4)),
38555                                                                                                            Mop(Not,
38556                                                                                                                bVar"setflags")),
38557                                                                                                        Bop(Or,
38558                                                                                                            Bop(In,
38559                                                                                                                Var("Rn",
38560                                                                                                                    F4),
38561                                                                                                                SL[LW(13,
38562                                                                                                                      4),
38563                                                                                                                   LW(15,
38564                                                                                                                      4)]),
38565                                                                                                            Bop(Or,
38566                                                                                                                Bop(In,
38567                                                                                                                    Var("Rm",
38568                                                                                                                        F4),
38569                                                                                                                    SL[LW(13,
38570                                                                                                                          4),
38571                                                                                                                       LW(15,
38572                                                                                                                          4)]),
38573                                                                                                                Mop(Not,
38574                                                                                                                    bVar"GOOD_MATCH"))))),
38575                                                                                                Apply
38576                                                                                                  (Call
38577                                                                                                     ("DECODE_UNPREDICTABLE",
38578                                                                                                      ATy(qTy,
38579                                                                                                          qTy),
38580                                                                                                      TP[Var("mc",
38581                                                                                                             CTy"MachineCode"),
38582                                                                                                         LS
38583                                                                                                          "AND (register)"]),
38584                                                                                                   qVar"s"),
38585                                                                                                qVar"s")]),
38586                                                                                        (TP[LW(1,
38587                                                                                               4),
38588                                                                                            AVar
38589                                                                                              (PTy(F4,
38590                                                                                                   PTy(F4,
38591                                                                                                       F1)))],
38592                                                                                         TP[Call
38593                                                                                              ("Data",
38594                                                                                               CTy"instruction",
38595                                                                                               Call
38596                                                                                                 ("Register",
38597                                                                                                  CTy"Data",
38598                                                                                                  TP[LW(14,
38599                                                                                                        4),
38600                                                                                                     bVar"setflags",
38601                                                                                                     Var("Rd",
38602                                                                                                         F4),
38603                                                                                                     Var("Rn",
38604                                                                                                         F4),
38605                                                                                                     Var("Rm",
38606                                                                                                         F4),
38607                                                                                                     Var("shift_t",
38608                                                                                                         CTy"SRType"),
38609                                                                                                     nVar"shift_n"])),
38610                                                                                            ITE(Bop(Or,
38611                                                                                                    Bop(In,
38612                                                                                                        Var("Rd",
38613                                                                                                            F4),
38614                                                                                                        SL[LW(13,
38615                                                                                                              4),
38616                                                                                                           LW(15,
38617                                                                                                              4)]),
38618                                                                                                    Bop(Or,
38619                                                                                                        Bop(In,
38620                                                                                                            Var("Rn",
38621                                                                                                                F4),
38622                                                                                                            SL[LW(13,
38623                                                                                                                  4),
38624                                                                                                               LW(15,
38625                                                                                                                  4)]),
38626                                                                                                        Bop(Or,
38627                                                                                                            Bop(In,
38628                                                                                                                Var("Rm",
38629                                                                                                                    F4),
38630                                                                                                                SL[LW(13,
38631                                                                                                                      4),
38632                                                                                                                   LW(15,
38633                                                                                                                      4)]),
38634                                                                                                            Mop(Not,
38635                                                                                                                bVar"GOOD_MATCH")))),
38636                                                                                                Apply
38637                                                                                                  (Call
38638                                                                                                     ("DECODE_UNPREDICTABLE",
38639                                                                                                      ATy(qTy,
38640                                                                                                          qTy),
38641                                                                                                      TP[Var("mc",
38642                                                                                                             CTy"MachineCode"),
38643                                                                                                         LS
38644                                                                                                          "BIC (register)"]),
38645                                                                                                   qVar"s"),
38646                                                                                                qVar"s")]),
38647                                                                                        (TP[LW(2,
38648                                                                                               4),
38649                                                                                            LW(15,
38650                                                                                               4),
38651                                                                                            AVar
38652                                                                                              (PTy(F4,
38653                                                                                                   F1))],
38654                                                                                         TP[Call
38655                                                                                              ("Data",
38656                                                                                               CTy"instruction",
38657                                                                                               Call
38658                                                                                                 ("ShiftImmediate",
38659                                                                                                  CTy"Data",
38660                                                                                                  TP[LF,
38661                                                                                                     bVar"setflags",
38662                                                                                                     Var("Rd",
38663                                                                                                         F4),
38664                                                                                                     Var("Rm",
38665                                                                                                         F4),
38666                                                                                                     Var("shift_t",
38667                                                                                                         CTy"SRType"),
38668                                                                                                     nVar"shift_n"])),
38669                                                                                            ITB([(Bop(And,
38670                                                                                                      EQ(Var("typ",
38671                                                                                                             FTy 2),
38672                                                                                                         LW(0,
38673                                                                                                            2)),
38674                                                                                                      Bop(And,
38675                                                                                                          EQ(Var("imm3",
38676                                                                                                                 FTy 3),
38677                                                                                                             LW(0,
38678                                                                                                                3)),
38679                                                                                                          EQ(Var("imm2",
38680                                                                                                                 FTy 2),
38681                                                                                                             LW(0,
38682                                                                                                                2)))),
38683                                                                                                  ITE(Bop(Or,
38684                                                                                                          Bop(And,
38685                                                                                                              bVar"setflags",
38686                                                                                                              Bop(Or,
38687                                                                                                                  Bop(In,
38688                                                                                                                      Var("Rd",
38689                                                                                                                          F4),
38690                                                                                                                      SL[LW(13,
38691                                                                                                                            4),
38692                                                                                                                         LW(15,
38693                                                                                                                            4)]),
38694                                                                                                                  Bop(In,
38695                                                                                                                      Var("Rm",
38696                                                                                                                          F4),
38697                                                                                                                      SL[LW(13,
38698                                                                                                                            4),
38699                                                                                                                         LW(15,
38700                                                                                                                            4)]))),
38701                                                                                                          Bop(Or,
38702                                                                                                              Bop(And,
38703                                                                                                                  Mop(Not,
38704                                                                                                                      bVar"setflags"),
38705                                                                                                                  Bop(Or,
38706                                                                                                                      EQ(Var("Rd",
38707                                                                                                                             F4),
38708                                                                                                                         LW(15,
38709                                                                                                                            4)),
38710                                                                                                                      Bop(Or,
38711                                                                                                                          EQ(Var("Rm",
38712                                                                                                                                 F4),
38713                                                                                                                             LW(15,
38714                                                                                                                                4)),
38715                                                                                                                          Bop(And,
38716                                                                                                                              EQ(Var("Rd",
38717                                                                                                                                     F4),
38718                                                                                                                                 LW(13,
38719                                                                                                                                    4)),
38720                                                                                                                              EQ(Var("Rm",
38721                                                                                                                                     F4),
38722                                                                                                                                 LW(13,
38723                                                                                                                                    4)))))),
38724                                                                                                              Mop(Not,
38725                                                                                                                  bVar"GOOD_MATCH"))),
38726                                                                                                      Apply
38727                                                                                                        (Call
38728                                                                                                           ("DECODE_UNPREDICTABLE",
38729                                                                                                            ATy(qTy,
38730                                                                                                                qTy),
38731                                                                                                            TP[Var("mc",
38732                                                                                                                   CTy"MachineCode"),
38733                                                                                                               LS
38734                                                                                                                "MOV (register)"]),
38735                                                                                                         qVar"s"),
38736                                                                                                      qVar"s")),
38737                                                                                                 (Bop(Or,
38738                                                                                                      Bop(In,
38739                                                                                                          Var("Rd",
38740                                                                                                              F4),
38741                                                                                                          SL[LW(13,
38742                                                                                                                4),
38743                                                                                                             LW(15,
38744                                                                                                                4)]),
38745                                                                                                      Bop(Or,
38746                                                                                                          Bop(In,
38747                                                                                                              Var("Rm",
38748                                                                                                                  F4),
38749                                                                                                              SL[LW(13,
38750                                                                                                                    4),
38751                                                                                                                 LW(15,
38752                                                                                                                    4)]),
38753                                                                                                          Mop(Not,
38754                                                                                                              bVar"GOOD_MATCH"))),
38755                                                                                                  Apply
38756                                                                                                    (Call
38757                                                                                                       ("DECODE_UNPREDICTABLE",
38758                                                                                                        ATy(qTy,
38759                                                                                                            qTy),
38760                                                                                                        TP[Var("mc",
38761                                                                                                               CTy"MachineCode"),
38762                                                                                                           LS
38763                                                                                                            "SHIFT (register)"]),
38764                                                                                                     qVar"s"))],
38765                                                                                                qVar"s")]),
38766                                                                                        (TP[LW(2,
38767                                                                                               4),
38768                                                                                            AVar
38769                                                                                              (PTy(F4,
38770                                                                                                   PTy(F4,
38771                                                                                                       F1)))],
38772                                                                                         TP[Call
38773                                                                                              ("Data",
38774                                                                                               CTy"instruction",
38775                                                                                               Call
38776                                                                                                 ("Register",
38777                                                                                                  CTy"Data",
38778                                                                                                  TP[LW(12,
38779                                                                                                        4),
38780                                                                                                     bVar"setflags",
38781                                                                                                     Var("Rd",
38782                                                                                                         F4),
38783                                                                                                     Var("Rn",
38784                                                                                                         F4),
38785                                                                                                     Var("Rm",
38786                                                                                                         F4),
38787                                                                                                     Var("shift_t",
38788                                                                                                         CTy"SRType"),
38789                                                                                                     nVar"shift_n"])),
38790                                                                                            ITE(Bop(Or,
38791                                                                                                    Bop(In,
38792                                                                                                        Var("Rd",
38793                                                                                                            F4),
38794                                                                                                        SL[LW(13,
38795                                                                                                              4),
38796                                                                                                           LW(15,
38797                                                                                                              4)]),
38798                                                                                                    Bop(Or,
38799                                                                                                        EQ(Var("Rn",
38800                                                                                                               F4),
38801                                                                                                           LW(13,
38802                                                                                                              4)),
38803                                                                                                        Bop(Or,
38804                                                                                                            Bop(In,
38805                                                                                                                Var("Rm",
38806                                                                                                                    F4),
38807                                                                                                                SL[LW(13,
38808                                                                                                                      4),
38809                                                                                                                   LW(15,
38810                                                                                                                      4)]),
38811                                                                                                            Mop(Not,
38812                                                                                                                bVar"GOOD_MATCH")))),
38813                                                                                                Apply
38814                                                                                                  (Call
38815                                                                                                     ("DECODE_UNPREDICTABLE",
38816                                                                                                      ATy(qTy,
38817                                                                                                          qTy),
38818                                                                                                      TP[Var("mc",
38819                                                                                                             CTy"MachineCode"),
38820                                                                                                         LS
38821                                                                                                          "ORR (register)"]),
38822                                                                                                   qVar"s"),
38823                                                                                                qVar"s")]),
38824                                                                                        (TP[LW(3,
38825                                                                                               4),
38826                                                                                            LW(15,
38827                                                                                               4),
38828                                                                                            AVar
38829                                                                                              (PTy(F4,
38830                                                                                                   F1))],
38831                                                                                         TP[Call
38832                                                                                              ("Data",
38833                                                                                               CTy"instruction",
38834                                                                                               Call
38835                                                                                                 ("ShiftImmediate",
38836                                                                                                  CTy"Data",
38837                                                                                                  TP[LT,
38838                                                                                                     bVar"setflags",
38839                                                                                                     Var("Rd",
38840                                                                                                         F4),
38841                                                                                                     Var("Rm",
38842                                                                                                         F4),
38843                                                                                                     Var("shift_t",
38844                                                                                                         CTy"SRType"),
38845                                                                                                     nVar"shift_n"])),
38846                                                                                            ITE(Bop(Or,
38847                                                                                                    Bop(In,
38848                                                                                                        Var("Rd",
38849                                                                                                            F4),
38850                                                                                                        SL[LW(13,
38851                                                                                                              4),
38852                                                                                                           LW(15,
38853                                                                                                              4)]),
38854                                                                                                    Bop(Or,
38855                                                                                                        Bop(In,
38856                                                                                                            Var("Rm",
38857                                                                                                                F4),
38858                                                                                                            SL[LW(13,
38859                                                                                                                  4),
38860                                                                                                               LW(15,
38861                                                                                                                  4)]),
38862                                                                                                        Mop(Not,
38863                                                                                                            bVar"GOOD_MATCH"))),
38864                                                                                                Apply
38865                                                                                                  (Call
38866                                                                                                     ("DECODE_UNPREDICTABLE",
38867                                                                                                      ATy(qTy,
38868                                                                                                          qTy),
38869                                                                                                      TP[Var("mc",
38870                                                                                                             CTy"MachineCode"),
38871                                                                                                         LS
38872                                                                                                          "MVN (register)"]),
38873                                                                                                   qVar"s"),
38874                                                                                                qVar"s")]),
38875                                                                                        (TP[LW(3,
38876                                                                                               4),
38877                                                                                            AVar
38878                                                                                              (PTy(F4,
38879                                                                                                   PTy(F4,
38880                                                                                                       F1)))],
38881                                                                                         TP[Call
38882                                                                                              ("Data",
38883                                                                                               CTy"instruction",
38884                                                                                               Call
38885                                                                                                 ("Register",
38886                                                                                                  CTy"Data",
38887                                                                                                  TP[LW(15,
38888                                                                                                        4),
38889                                                                                                     bVar"setflags",
38890                                                                                                     Var("Rd",
38891                                                                                                         F4),
38892                                                                                                     Var("Rn",
38893                                                                                                         F4),
38894                                                                                                     Var("Rm",
38895                                                                                                         F4),
38896                                                                                                     Var("shift_t",
38897                                                                                                         CTy"SRType"),
38898                                                                                                     nVar"shift_n"])),
38899                                                                                            ITE(Bop(Or,
38900                                                                                                    Bop(In,
38901                                                                                                        Var("Rd",
38902                                                                                                            F4),
38903                                                                                                        SL[LW(13,
38904                                                                                                              4),
38905                                                                                                           LW(15,
38906                                                                                                              4)]),
38907                                                                                                    Bop(Or,
38908                                                                                                        EQ(Var("Rn",
38909                                                                                                               F4),
38910                                                                                                           LW(13,
38911                                                                                                              4)),
38912                                                                                                        Bop(Or,
38913                                                                                                            Bop(In,
38914                                                                                                                Var("Rm",
38915                                                                                                                    F4),
38916                                                                                                                SL[LW(13,
38917                                                                                                                      4),
38918                                                                                                                   LW(15,
38919                                                                                                                      4)]),
38920                                                                                                            Mop(Not,
38921                                                                                                                bVar"GOOD_MATCH")))),
38922                                                                                                Apply
38923                                                                                                  (Call
38924                                                                                                     ("DECODE_UNPREDICTABLE",
38925                                                                                                      ATy(qTy,
38926                                                                                                          qTy),
38927                                                                                                      TP[Var("mc",
38928                                                                                                             CTy"MachineCode"),
38929                                                                                                         LS
38930                                                                                                          "ORN (register)"]),
38931                                                                                                   qVar"s"),
38932                                                                                                qVar"s")]),
38933                                                                                        (TP[LW(4,
38934                                                                                               4),
38935                                                                                            AVar
38936                                                                                              F4,
38937                                                                                            LW(15,
38938                                                                                               4),
38939                                                                                            LW(1,
38940                                                                                               1)],
38941                                                                                         TP[Call
38942                                                                                              ("Data",
38943                                                                                               CTy"instruction",
38944                                                                                               Call
38945                                                                                                 ("TestCompareRegister",
38946                                                                                                  CTy"Data",
38947                                                                                                  TP[LW(1,
38948                                                                                                        2),
38949                                                                                                     Var("Rn",
38950                                                                                                         F4),
38951                                                                                                     Var("Rm",
38952                                                                                                         F4),
38953                                                                                                     Var("shift_t",
38954                                                                                                         CTy"SRType"),
38955                                                                                                     nVar"shift_n"])),
38956                                                                                            ITE(Bop(Or,
38957                                                                                                    Bop(In,
38958                                                                                                        Var("Rn",
38959                                                                                                            F4),
38960                                                                                                        SL[LW(13,
38961                                                                                                              4),
38962                                                                                                           LW(15,
38963                                                                                                              4)]),
38964                                                                                                    Bop(Or,
38965                                                                                                        Bop(In,
38966                                                                                                            Var("Rm",
38967                                                                                                                F4),
38968                                                                                                            SL[LW(13,
38969                                                                                                                  4),
38970                                                                                                               LW(15,
38971                                                                                                                  4)]),
38972                                                                                                        Mop(Not,
38973                                                                                                            bVar"GOOD_MATCH"))),
38974                                                                                                Apply
38975                                                                                                  (Call
38976                                                                                                     ("DECODE_UNPREDICTABLE",
38977                                                                                                      ATy(qTy,
38978                                                                                                          qTy),
38979                                                                                                      TP[Var("mc",
38980                                                                                                             CTy"MachineCode"),
38981                                                                                                         LS
38982                                                                                                          "TEQ (register)"]),
38983                                                                                                   qVar"s"),
38984                                                                                                qVar"s")]),
38985                                                                                        (TP[LW(4,
38986                                                                                               4),
38987                                                                                            AVar
38988                                                                                              (PTy(F4,
38989                                                                                                   PTy(F4,
38990                                                                                                       F1)))],
38991                                                                                         TP[Call
38992                                                                                              ("Data",
38993                                                                                               CTy"instruction",
38994                                                                                               Call
38995                                                                                                 ("Register",
38996                                                                                                  CTy"Data",
38997                                                                                                  TP[LW(1,
38998                                                                                                        4),
38999                                                                                                     bVar"setflags",
39000                                                                                                     Var("Rd",
39001                                                                                                         F4),
39002                                                                                                     Var("Rn",
39003                                                                                                         F4),
39004                                                                                                     Var("Rm",
39005                                                                                                         F4),
39006                                                                                                     Var("shift_t",
39007                                                                                                         CTy"SRType"),
39008                                                                                                     nVar"shift_n"])),
39009                                                                                            ITE(Bop(Or,
39010                                                                                                    EQ(Var("Rd",
39011                                                                                                           F4),
39012                                                                                                       LW(13,
39013                                                                                                          4)),
39014                                                                                                    Bop(Or,
39015                                                                                                        Bop(And,
39016                                                                                                            EQ(Var("Rd",
39017                                                                                                                   F4),
39018                                                                                                               LW(15,
39019                                                                                                                  4)),
39020                                                                                                            Mop(Not,
39021                                                                                                                bVar"setflags")),
39022                                                                                                        Bop(Or,
39023                                                                                                            Bop(In,
39024                                                                                                                Var("Rn",
39025                                                                                                                    F4),
39026                                                                                                                SL[LW(13,
39027                                                                                                                      4),
39028                                                                                                                   LW(15,
39029                                                                                                                      4)]),
39030                                                                                                            Bop(Or,
39031                                                                                                                Bop(In,
39032                                                                                                                    Var("Rm",
39033                                                                                                                        F4),
39034                                                                                                                    SL[LW(13,
39035                                                                                                                          4),
39036                                                                                                                       LW(15,
39037                                                                                                                          4)]),
39038                                                                                                                Mop(Not,
39039                                                                                                                    bVar"GOOD_MATCH"))))),
39040                                                                                                Apply
39041                                                                                                  (Call
39042                                                                                                     ("DECODE_UNPREDICTABLE",
39043                                                                                                      ATy(qTy,
39044                                                                                                          qTy),
39045                                                                                                      TP[Var("mc",
39046                                                                                                             CTy"MachineCode"),
39047                                                                                                         LS
39048                                                                                                          "EOR (register)"]),
39049                                                                                                   qVar"s"),
39050                                                                                                qVar"s")]),
39051                                                                                        (TP[LW(6,
39052                                                                                               4),
39053                                                                                            AVar
39054                                                                                              F4,
39055                                                                                            AVar
39056                                                                                              F4,
39057                                                                                            LW(0,
39058                                                                                               1)],
39059                                                                                         ITE(Bop(Bit,
39060                                                                                                 Var("typ",
39061                                                                                                     FTy 2),
39062                                                                                                 LN
39063                                                                                                  0),
39064                                                                                             TP[Call
39065                                                                                                  ("Undefined",
39066                                                                                                   CTy"instruction",
39067                                                                                                   LW(0,
39068                                                                                                      32)),
39069                                                                                                qVar"s"],
39070                                                                                             TP[Call
39071                                                                                                  ("Media",
39072                                                                                                   CTy"instruction",
39073                                                                                                   Call
39074                                                                                                     ("PackHalfword",
39075                                                                                                      CTy"Media",
39076                                                                                                      TP[Var("shift_t",
39077                                                                                                             CTy"SRType"),
39078                                                                                                         nVar"shift_n",
39079                                                                                                         Bop(Bit,
39080                                                                                                             Var("typ",
39081                                                                                                                 FTy 2),
39082                                                                                                             LN
39083                                                                                                              1),
39084                                                                                                         Var("Rd",
39085                                                                                                             F4),
39086                                                                                                         Var("Rn",
39087                                                                                                             F4),
39088                                                                                                         Var("Rm",
39089                                                                                                             F4)])),
39090                                                                                                ITE(Bop(Or,
39091                                                                                                        Bop(In,
39092                                                                                                            Var("Rd",
39093                                                                                                                F4),
39094                                                                                                            SL[LW(13,
39095                                                                                                                  4),
39096                                                                                                               LW(15,
39097                                                                                                                  4)]),
39098                                                                                                        Bop(Or,
39099                                                                                                            Bop(In,
39100                                                                                                                Var("Rn",
39101                                                                                                                    F4),
39102                                                                                                                SL[LW(13,
39103                                                                                                                      4),
39104                                                                                                                   LW(15,
39105                                                                                                                      4)]),
39106                                                                                                            Bop(Or,
39107                                                                                                                Bop(In,
39108                                                                                                                    Var("Rm",
39109                                                                                                                        F4),
39110                                                                                                                    SL[LW(13,
39111                                                                                                                          4),
39112                                                                                                                       LW(15,
39113                                                                                                                          4)]),
39114                                                                                                                Mop(Not,
39115                                                                                                                    bVar"GOOD_MATCH")))),
39116                                                                                                    Apply
39117                                                                                                      (Call
39118                                                                                                         ("DECODE_UNPREDICTABLE",
39119                                                                                                          ATy(qTy,
39120                                                                                                              qTy),
39121                                                                                                          TP[Var("mc",
39122                                                                                                                 CTy"MachineCode"),
39123                                                                                                             LS
39124                                                                                                              "PackHalfword"]),
39125                                                                                                       qVar"s"),
39126                                                                                                    qVar"s")])),
39127                                                                                        (TP[LW(8,
39128                                                                                               4),
39129                                                                                            AVar
39130                                                                                              F4,
39131                                                                                            LW(15,
39132                                                                                               4),
39133                                                                                            LW(1,
39134                                                                                               1)],
39135                                                                                         TP[Call
39136                                                                                              ("Data",
39137                                                                                               CTy"instruction",
39138                                                                                               Call
39139                                                                                                 ("TestCompareRegister",
39140                                                                                                  CTy"Data",
39141                                                                                                  TP[LW(3,
39142                                                                                                        2),
39143                                                                                                     Var("Rn",
39144                                                                                                         F4),
39145                                                                                                     Var("Rm",
39146                                                                                                         F4),
39147                                                                                                     Var("shift_t",
39148                                                                                                         CTy"SRType"),
39149                                                                                                     nVar"shift_n"])),
39150                                                                                            ITE(Bop(Or,
39151                                                                                                    EQ(Var("Rn",
39152                                                                                                           F4),
39153                                                                                                       LW(15,
39154                                                                                                          4)),
39155                                                                                                    Bop(Or,
39156                                                                                                        Bop(In,
39157                                                                                                            Var("Rm",
39158                                                                                                                F4),
39159                                                                                                            SL[LW(13,
39160                                                                                                                  4),
39161                                                                                                               LW(15,
39162                                                                                                                  4)]),
39163                                                                                                        Mop(Not,
39164                                                                                                            bVar"GOOD_MATCH"))),
39165                                                                                                Apply
39166                                                                                                  (Call
39167                                                                                                     ("DECODE_UNPREDICTABLE",
39168                                                                                                      ATy(qTy,
39169                                                                                                          qTy),
39170                                                                                                      TP[Var("mc",
39171                                                                                                             CTy"MachineCode"),
39172                                                                                                         LS
39173                                                                                                          "CMN (register)"]),
39174                                                                                                   qVar"s"),
39175                                                                                                qVar"s")]),
39176                                                                                        (TP[LW(8,
39177                                                                                               4),
39178                                                                                            AVar
39179                                                                                              (PTy(F4,
39180                                                                                                   PTy(F4,
39181                                                                                                       F1)))],
39182                                                                                         TP[Let(TP[Var("shift_t",
39183                                                                                                       CTy"SRType"),
39184                                                                                                   nVar"shift_n"],
39185                                                                                                Call
39186                                                                                                  ("DecodeImmShift",
39187                                                                                                   PTy(CTy"SRType",
39188                                                                                                       nTy),
39189                                                                                                   TP[Var("typ",
39190                                                                                                          FTy 2),
39191                                                                                                      CC[Var("imm3",
39192                                                                                                             FTy 3),
39193                                                                                                         Var("imm2",
39194                                                                                                             FTy 2)]]),
39195                                                                                                Call
39196                                                                                                  ("Data",
39197                                                                                                   CTy"instruction",
39198                                                                                                   Call
39199                                                                                                     ("Register",
39200                                                                                                      CTy"Data",
39201                                                                                                      TP[LW(4,
39202                                                                                                            4),
39203                                                                                                         bVar"setflags",
39204                                                                                                         Var("Rd",
39205                                                                                                             F4),
39206                                                                                                         Var("Rn",
39207                                                                                                             F4),
39208                                                                                                         Var("Rm",
39209                                                                                                             F4),
39210                                                                                                         Var("shift_t",
39211                                                                                                             CTy"SRType"),
39212                                                                                                         nVar"shift_n"]))),
39213                                                                                            ITE(Bop(Or,
39214                                                                                                    EQ(Var("Rd",
39215                                                                                                           F4),
39216                                                                                                       LW(13,
39217                                                                                                          4)),
39218                                                                                                    Bop(Or,
39219                                                                                                        Bop(And,
39220                                                                                                            EQ(Var("Rd",
39221                                                                                                                   F4),
39222                                                                                                               LW(15,
39223                                                                                                                  4)),
39224                                                                                                            Mop(Not,
39225                                                                                                                bVar"setflags")),
39226                                                                                                        Bop(Or,
39227                                                                                                            EQ(Var("Rn",
39228                                                                                                                   F4),
39229                                                                                                               LW(15,
39230                                                                                                                  4)),
39231                                                                                                            Bop(Or,
39232                                                                                                                Bop(In,
39233                                                                                                                    Var("Rm",
39234                                                                                                                        F4),
39235                                                                                                                    SL[LW(13,
39236                                                                                                                          4),
39237                                                                                                                       LW(15,
39238                                                                                                                          4)]),
39239                                                                                                                Mop(Not,
39240                                                                                                                    bVar"GOOD_MATCH"))))),
39241                                                                                                Apply
39242                                                                                                  (Call
39243                                                                                                     ("DECODE_UNPREDICTABLE",
39244                                                                                                      ATy(qTy,
39245                                                                                                          qTy),
39246                                                                                                      TP[Var("mc",
39247                                                                                                             CTy"MachineCode"),
39248                                                                                                         LS
39249                                                                                                          "ADD (register)"]),
39250                                                                                                   qVar"s"),
39251                                                                                                qVar"s")]),
39252                                                                                        (TP[LW(10,
39253                                                                                               4),
39254                                                                                            AVar
39255                                                                                              (PTy(F4,
39256                                                                                                   PTy(F4,
39257                                                                                                       F1)))],
39258                                                                                         TP[Call
39259                                                                                              ("Data",
39260                                                                                               CTy"instruction",
39261                                                                                               Call
39262                                                                                                 ("Register",
39263                                                                                                  CTy"Data",
39264                                                                                                  TP[LW(5,
39265                                                                                                        4),
39266                                                                                                     bVar"setflags",
39267                                                                                                     Var("Rd",
39268                                                                                                         F4),
39269                                                                                                     Var("Rn",
39270                                                                                                         F4),
39271                                                                                                     Var("Rm",
39272                                                                                                         F4),
39273                                                                                                     Var("shift_t",
39274                                                                                                         CTy"SRType"),
39275                                                                                                     nVar"shift_n"])),
39276                                                                                            ITE(Bop(Or,
39277                                                                                                    Bop(In,
39278                                                                                                        Var("Rd",
39279                                                                                                            F4),
39280                                                                                                        SL[LW(13,
39281                                                                                                              4),
39282                                                                                                           LW(15,
39283                                                                                                              4)]),
39284                                                                                                    Bop(Or,
39285                                                                                                        Bop(In,
39286                                                                                                            Var("Rn",
39287                                                                                                                F4),
39288                                                                                                            SL[LW(13,
39289                                                                                                                  4),
39290                                                                                                               LW(15,
39291                                                                                                                  4)]),
39292                                                                                                        Bop(Or,
39293                                                                                                            Bop(In,
39294                                                                                                                Var("Rm",
39295                                                                                                                    F4),
39296                                                                                                                SL[LW(13,
39297                                                                                                                      4),
39298                                                                                                                   LW(15,
39299                                                                                                                      4)]),
39300                                                                                                            Mop(Not,
39301                                                                                                                bVar"GOOD_MATCH")))),
39302                                                                                                Apply
39303                                                                                                  (Call
39304                                                                                                     ("DECODE_UNPREDICTABLE",
39305                                                                                                      ATy(qTy,
39306                                                                                                          qTy),
39307                                                                                                      TP[Var("mc",
39308                                                                                                             CTy"MachineCode"),
39309                                                                                                         LS
39310                                                                                                          "ADC (register)"]),
39311                                                                                                   qVar"s"),
39312                                                                                                qVar"s")]),
39313                                                                                        (TP[LW(11,
39314                                                                                               4),
39315                                                                                            AVar
39316                                                                                              (PTy(F4,
39317                                                                                                   PTy(F4,
39318                                                                                                       F1)))],
39319                                                                                         TP[Call
39320                                                                                              ("Data",
39321                                                                                               CTy"instruction",
39322                                                                                               Call
39323                                                                                                 ("Register",
39324                                                                                                  CTy"Data",
39325                                                                                                  TP[LW(6,
39326                                                                                                        4),
39327                                                                                                     bVar"setflags",
39328                                                                                                     Var("Rd",
39329                                                                                                         F4),
39330                                                                                                     Var("Rn",
39331                                                                                                         F4),
39332                                                                                                     Var("Rm",
39333                                                                                                         F4),
39334                                                                                                     Var("shift_t",
39335                                                                                                         CTy"SRType"),
39336                                                                                                     nVar"shift_n"])),
39337                                                                                            ITE(Bop(Or,
39338                                                                                                    Bop(In,
39339                                                                                                        Var("Rd",
39340                                                                                                            F4),
39341                                                                                                        SL[LW(13,
39342                                                                                                              4),
39343                                                                                                           LW(15,
39344                                                                                                              4)]),
39345                                                                                                    Bop(Or,
39346                                                                                                        Bop(In,
39347                                                                                                            Var("Rn",
39348                                                                                                                F4),
39349                                                                                                            SL[LW(13,
39350                                                                                                                  4),
39351                                                                                                               LW(15,
39352                                                                                                                  4)]),
39353                                                                                                        Bop(Or,
39354                                                                                                            Bop(In,
39355                                                                                                                Var("Rm",
39356                                                                                                                    F4),
39357                                                                                                                SL[LW(13,
39358                                                                                                                      4),
39359                                                                                                                   LW(15,
39360                                                                                                                      4)]),
39361                                                                                                            Mop(Not,
39362                                                                                                                bVar"GOOD_MATCH")))),
39363                                                                                                Apply
39364                                                                                                  (Call
39365                                                                                                     ("DECODE_UNPREDICTABLE",
39366                                                                                                      ATy(qTy,
39367                                                                                                          qTy),
39368                                                                                                      TP[Var("mc",
39369                                                                                                             CTy"MachineCode"),
39370                                                                                                         LS
39371                                                                                                          "SBC (register)"]),
39372                                                                                                   qVar"s"),
39373                                                                                                qVar"s")]),
39374                                                                                        (TP[LW(13,
39375                                                                                               4),
39376                                                                                            AVar
39377                                                                                              F4,
39378                                                                                            LW(15,
39379                                                                                               4),
39380                                                                                            LW(1,
39381                                                                                               1)],
39382                                                                                         TP[Call
39383                                                                                              ("Data",
39384                                                                                               CTy"instruction",
39385                                                                                               Call
39386                                                                                                 ("TestCompareRegister",
39387                                                                                                  CTy"Data",
39388                                                                                                  TP[LW(2,
39389                                                                                                        2),
39390                                                                                                     Var("Rn",
39391                                                                                                         F4),
39392                                                                                                     Var("Rm",
39393                                                                                                         F4),
39394                                                                                                     Var("shift_t",
39395                                                                                                         CTy"SRType"),
39396                                                                                                     nVar"shift_n"])),
39397                                                                                            ITE(Bop(Or,
39398                                                                                                    EQ(Var("Rn",
39399                                                                                                           F4),
39400                                                                                                       LW(15,
39401                                                                                                          4)),
39402                                                                                                    Bop(Or,
39403                                                                                                        Bop(In,
39404                                                                                                            Var("Rm",
39405                                                                                                                F4),
39406                                                                                                            SL[LW(13,
39407                                                                                                                  4),
39408                                                                                                               LW(15,
39409                                                                                                                  4)]),
39410                                                                                                        Mop(Not,
39411                                                                                                            bVar"GOOD_MATCH"))),
39412                                                                                                Apply
39413                                                                                                  (Call
39414                                                                                                     ("DECODE_UNPREDICTABLE",
39415                                                                                                      ATy(qTy,
39416                                                                                                          qTy),
39417                                                                                                      TP[Var("mc",
39418                                                                                                             CTy"MachineCode"),
39419                                                                                                         LS
39420                                                                                                          "CMP (register)"]),
39421                                                                                                   qVar"s"),
39422                                                                                                qVar"s")]),
39423                                                                                        (TP[LW(13,
39424                                                                                               4),
39425                                                                                            AVar
39426                                                                                              (PTy(F4,
39427                                                                                                   PTy(F4,
39428                                                                                                       F1)))],
39429                                                                                         TP[Call
39430                                                                                              ("Data",
39431                                                                                               CTy"instruction",
39432                                                                                               Call
39433                                                                                                 ("Register",
39434                                                                                                  CTy"Data",
39435                                                                                                  TP[LW(2,
39436                                                                                                        4),
39437                                                                                                     bVar"setflags",
39438                                                                                                     Var("Rd",
39439                                                                                                         F4),
39440                                                                                                     Var("Rn",
39441                                                                                                         F4),
39442                                                                                                     Var("Rm",
39443                                                                                                         F4),
39444                                                                                                     Var("shift_t",
39445                                                                                                         CTy"SRType"),
39446                                                                                                     nVar"shift_n"])),
39447                                                                                            ITE(Bop(Or,
39448                                                                                                    EQ(Var("Rd",
39449                                                                                                           F4),
39450                                                                                                       LW(13,
39451                                                                                                          4)),
39452                                                                                                    Bop(Or,
39453                                                                                                        Bop(And,
39454                                                                                                            EQ(Var("Rd",
39455                                                                                                                   F4),
39456                                                                                                               LW(15,
39457                                                                                                                  4)),
39458                                                                                                            Mop(Not,
39459                                                                                                                bVar"setflags")),
39460                                                                                                        Bop(Or,
39461                                                                                                            EQ(Var("Rn",
39462                                                                                                                   F4),
39463                                                                                                               LW(15,
39464                                                                                                                  4)),
39465                                                                                                            Bop(Or,
39466                                                                                                                Bop(In,
39467                                                                                                                    Var("Rm",
39468                                                                                                                        F4),
39469                                                                                                                    SL[LW(13,
39470                                                                                                                          4),
39471                                                                                                                       LW(15,
39472                                                                                                                          4)]),
39473                                                                                                                Mop(Not,
39474                                                                                                                    bVar"GOOD_MATCH"))))),
39475                                                                                                Apply
39476                                                                                                  (Call
39477                                                                                                     ("DECODE_UNPREDICTABLE",
39478                                                                                                      ATy(qTy,
39479                                                                                                          qTy),
39480                                                                                                      TP[Var("mc",
39481                                                                                                             CTy"MachineCode"),
39482                                                                                                         LS
39483                                                                                                          "SUB (register)"]),
39484                                                                                                   qVar"s"),
39485                                                                                                qVar"s")]),
39486                                                                                        (TP[LW(14,
39487                                                                                               4),
39488                                                                                            AVar
39489                                                                                              (PTy(F4,
39490                                                                                                   PTy(F4,
39491                                                                                                       F1)))],
39492                                                                                         TP[Call
39493                                                                                              ("Data",
39494                                                                                               CTy"instruction",
39495                                                                                               Call
39496                                                                                                 ("Register",
39497                                                                                                  CTy"Data",
39498                                                                                                  TP[LW(3,
39499                                                                                                        4),
39500                                                                                                     bVar"setflags",
39501                                                                                                     Var("Rd",
39502                                                                                                         F4),
39503                                                                                                     Var("Rn",
39504                                                                                                         F4),
39505                                                                                                     Var("Rm",
39506                                                                                                         F4),
39507                                                                                                     Var("shift_t",
39508                                                                                                         CTy"SRType"),
39509                                                                                                     nVar"shift_n"])),
39510                                                                                            ITE(Bop(Or,
39511                                                                                                    Bop(In,
39512                                                                                                        Var("Rd",
39513                                                                                                            F4),
39514                                                                                                        SL[LW(13,
39515                                                                                                              4),
39516                                                                                                           LW(15,
39517                                                                                                              4)]),
39518                                                                                                    Bop(Or,
39519                                                                                                        Bop(In,
39520                                                                                                            Var("Rn",
39521                                                                                                                F4),
39522                                                                                                            SL[LW(13,
39523                                                                                                                  4),
39524                                                                                                               LW(15,
39525                                                                                                                  4)]),
39526                                                                                                        Bop(Or,
39527                                                                                                            Bop(In,
39528                                                                                                                Var("Rm",
39529                                                                                                                    F4),
39530                                                                                                                SL[LW(13,
39531                                                                                                                      4),
39532                                                                                                                   LW(15,
39533                                                                                                                      4)]),
39534                                                                                                            Mop(Not,
39535                                                                                                                bVar"GOOD_MATCH")))),
39536                                                                                                Apply
39537                                                                                                  (Call
39538                                                                                                     ("DECODE_UNPREDICTABLE",
39539                                                                                                      ATy(qTy,
39540                                                                                                          qTy),
39541                                                                                                      TP[Var("mc",
39542                                                                                                             CTy"MachineCode"),
39543                                                                                                         LS
39544                                                                                                          "RSB (register)"]),
39545                                                                                                   qVar"s"),
39546                                                                                                qVar"s")]),
39547                                                                                        (AVar
39548                                                                                           (PTy(F4,
39549                                                                                                PTy(F4,
39550                                                                                                    PTy(F4,
39551                                                                                                        F1)))),
39552                                                                                         TP[Call
39553                                                                                              ("Undefined",
39554                                                                                               CTy"instruction",
39555                                                                                               LW(0,
39556                                                                                                  32)),
39557                                                                                            qVar"s"])]))),
39558                                                                            TP[Apply
39559                                                                                 (Call
39560                                                                                    ("Skip",
39561                                                                                     ATy(qTy,
39562                                                                                         CTy"instruction"),
39563                                                                                     LU),
39564                                                                                  qVar"s"),
39565                                                                               qVar"s"]))))))))))))],
39566                              Apply
39567                                (Call
39568                                   ("UndefinedThumb",
39569                                    ATy(qTy,PTy(CTy"instruction",qTy)),LU),
39570                                 qVar"state")))],
39571                        Apply
39572                          (Call
39573                             ("UndefinedThumb",
39574                              ATy(qTy,PTy(CTy"instruction",qTy)),LU),
39575                           qVar"state"))),
39576                   (bVar"b'15",
39577                    ITE(Bop(And,bVar"b'31",
39578                            Bop(And,bVar"b'30",
39579                                Bop(And,bVar"b'29",bVar"b'28"))),
39580                        ITB([(Bop(And,Mop(Not,bVar"b'26"),
39581                                  Bop(And,bVar"b'25",
39582                                      Bop(And,bVar"b'24",
39583                                          Bop(And,bVar"b'23",
39584                                              Bop(And,Mop(Not,bVar"b'22"),
39585                                                  Bop(And,
39586                                                      Mop(Not,bVar"b'21"),
39587                                                      Bop(And,
39588                                                          Mop(Not,
39589                                                              bVar"b'14"),
39590                                                          Bop(And,
39591                                                              Mop(Not,
39592                                                                  bVar"b'12"),
39593                                                              bVar"b'5")))))))),
39594                              Let(Var("Rn",F4),
39595                                  Mop(Cast F4,
39596                                      LL[bVar"b'19",bVar"b'18",bVar"b'17",
39597                                         bVar"b'16"]),
39598                                  Let(TP[Var("v",F4),qVar"s"],
39599                                      Apply
39600                                        (Call
39601                                           ("ThumbCondition",
39602                                            ATy(qTy,PTy(F4,qTy)),LU),
39603                                         qVar"state"),
39604                                      Let(TP[bVar"v",qVar"s"],
39605                                          Apply
39606                                            (Call
39607                                               ("Do",
39608                                                ATy(qTy,PTy(bTy,qTy)),
39609                                                TP[Var("v",F4),
39610                                                   Apply
39611                                                     (Call
39612                                                        ("HaveVirtExt",
39613                                                         ATy(qTy,bTy),LU),
39614                                                      qVar"s")]),qVar"s"),
39615                                          ITE(bVar"v",
39616                                              TP[Call
39617                                                   ("System",
39618                                                    CTy"instruction",
39619                                                    Call
39620                                                      ("MoveToBankedOrSpecialRegister",
39621                                                       CTy"System",
39622                                                       TP[EQ(Mop(Cast F1,
39623                                                                 LL[bVar"b'20"]),
39624                                                             LW(1,1)),
39625                                                          CC[Mop(Cast F1,
39626                                                                 LL[bVar"b'4"]),
39627                                                             Mop(Cast F4,
39628                                                                 LL[bVar"b'11",
39629                                                                    bVar"b'10",
39630                                                                    bVar"b'9",
39631                                                                    bVar"b'8"])],
39632                                                          Var("Rn",F4)])),
39633                                                 ITE(Bop(Or,
39634                                                         Bop(In,
39635                                                             Var("Rn",F4),
39636                                                             SL[LW(13,4),
39637                                                                LW(15,4)]),
39638                                                         Mop(Not,
39639                                                             Bop(And,
39640                                                                 EQ(Mop(Cast
39641                                                                          F1,
39642                                                                        LL[bVar"b'13"]),
39643                                                                    LW(0,1)),
39644                                                                 Bop(And,
39645                                                                     EQ(Mop(Cast
39646                                                                              (FTy 2),
39647                                                                            LL[bVar"b'7",
39648                                                                               bVar"b'6"]),
39649                                                                        LW(0,
39650                                                                           2)),
39651                                                                     EQ(Mop(Cast
39652                                                                              F4,
39653                                                                            LL[bVar"b'3",
39654                                                                               bVar"b'2",
39655                                                                               bVar"b'1",
39656                                                                               bVar"b'0"]),
39657                                                                        LW(0,
39658                                                                           4)))))),
39659                                                     Apply
39660                                                       (Call
39661                                                          ("DECODE_UNPREDICTABLE",
39662                                                           ATy(qTy,qTy),
39663                                                           TP[Var("mc",
39664                                                                  CTy"MachineCode"),
39665                                                              LS
39666                                                               "MoveToBankedOrSpecialRegister"]),
39667                                                        qVar"s"),qVar"s")],
39668                                              TP[Apply
39669                                                   (Call
39670                                                      ("Skip",
39671                                                       ATy(qTy,
39672                                                           CTy"instruction"),
39673                                                       LU),qVar"s"),
39674                                                 qVar"s"]))))),
39675                             (Bop(And,Mop(Not,bVar"b'26"),
39676                                  Bop(And,bVar"b'25",
39677                                      Bop(And,bVar"b'24",
39678                                          Bop(And,bVar"b'23",
39679                                              Bop(And,Mop(Not,bVar"b'22"),
39680                                                  Bop(And,
39681                                                      Mop(Not,bVar"b'21"),
39682                                                      Bop(And,
39683                                                          Mop(Not,
39684                                                              bVar"b'14"),
39685                                                          Bop(And,
39686                                                              Mop(Not,
39687                                                                  bVar"b'12"),
39688                                                              Mop(Not,
39689                                                                  bVar"b'5"))))))))),
39690                              Let(Var("Rn",F4),
39691                                  Mop(Cast F4,
39692                                      LL[bVar"b'19",bVar"b'18",bVar"b'17",
39693                                         bVar"b'16"]),
39694                                  Let(Var("mask",F4),
39695                                      Mop(Cast F4,
39696                                          LL[bVar"b'11",bVar"b'10",
39697                                             bVar"b'9",bVar"b'8"]),
39698                                      Let(TP[Var("v",F4),qVar"s"],
39699                                          Apply
39700                                            (Call
39701                                               ("ThumbCondition",
39702                                                ATy(qTy,PTy(F4,qTy)),LU),
39703                                             qVar"state"),
39704                                          Let(TP[bVar"v",qVar"s"],
39705                                              Apply
39706                                                (Call
39707                                                   ("Do",
39708                                                    ATy(qTy,PTy(bTy,qTy)),
39709                                                    TP[Var("v",F4),
39710                                                       Apply
39711                                                         (Call
39712                                                            ("HaveThumb2",
39713                                                             ATy(qTy,bTy),
39714                                                             LU),qVar"s")]),
39715                                                 qVar"s"),
39716                                              ITE(bVar"v",
39717                                                  TP[Call
39718                                                       ("System",
39719                                                        CTy"instruction",
39720                                                        Call
39721                                                          ("MoveToSpecialFromRegister",
39722                                                           CTy"System",
39723                                                           TP[EQ(Mop(Cast
39724                                                                       F1,
39725                                                                     LL[bVar"b'20"]),
39726                                                                 LW(1,1)),
39727                                                              Var("Rn",F4),
39728                                                              Var("mask",
39729                                                                  F4)])),
39730                                                     ITE(Bop(Or,
39731                                                             EQ(Var("mask",
39732                                                                    F4),
39733                                                                LW(0,4)),
39734                                                             Bop(Or,
39735                                                                 Bop(In,
39736                                                                     Var("Rn",
39737                                                                         F4),
39738                                                                     SL[LW(13,
39739                                                                           4),
39740                                                                        LW(15,
39741                                                                           4)]),
39742                                                                 Mop(Not,
39743                                                                     Bop(And,
39744                                                                         EQ(Mop(Cast
39745                                                                                  F1,
39746                                                                                LL[bVar"b'13"]),
39747                                                                            LW(0,
39748                                                                               1)),
39749                                                                         Bop(And,
39750                                                                             EQ(Mop(Cast
39751                                                                                      (FTy 2),
39752                                                                                    LL[bVar"b'7",
39753                                                                                       bVar"b'6"]),
39754                                                                                LW(0,
39755                                                                                   2)),
39756                                                                             EQ(Mop(Cast
39757                                                                                      (FTy 5),
39758                                                                                    LL[bVar"b'4",
39759                                                                                       bVar"b'3",
39760                                                                                       bVar"b'2",
39761                                                                                       bVar"b'1",
39762                                                                                       bVar"b'0"]),
39763                                                                                LW(0,
39764                                                                                   5))))))),
39765                                                         Apply
39766                                                           (Call
39767                                                              ("DECODE_UNPREDICTABLE",
39768                                                               ATy(qTy,qTy),
39769                                                               TP[Var("mc",
39770                                                                      CTy"MachineCode"),
39771                                                                  LS
39772                                                                   "MoveToSpecialFromRegister"]),
39773                                                            qVar"s"),
39774                                                         qVar"s")],
39775                                                  TP[Apply
39776                                                       (Call
39777                                                          ("Skip",
39778                                                           ATy(qTy,
39779                                                               CTy"instruction"),
39780                                                           LU),qVar"s"),
39781                                                     qVar"s"])))))),
39782                             (Bop(And,Mop(Not,bVar"b'26"),
39783                                  Bop(And,bVar"b'25",
39784                                      Bop(And,bVar"b'24",
39785                                          Bop(And,bVar"b'23",
39786                                              Bop(And,Mop(Not,bVar"b'22"),
39787                                                  Bop(And,bVar"b'21",
39788                                                      Bop(And,
39789                                                          Mop(Not,
39790                                                              bVar"b'20"),
39791                                                          Bop(And,
39792                                                              Mop(Not,
39793                                                                  bVar"b'14"),
39794                                                              Bop(And,
39795                                                                  Mop(Not,
39796                                                                      bVar"b'12"),
39797                                                                  Bop(And,
39798                                                                      Mop(Not,
39799                                                                          bVar"b'10"),
39800                                                                      Bop(And,
39801                                                                          Mop(Not,
39802                                                                              bVar"b'9"),
39803                                                                          Mop(Not,
39804                                                                              bVar"b'8")))))))))))),
39805                              Let(TP[Var("v",F4),qVar"s"],
39806                                  Apply
39807                                    (Call
39808                                       ("ThumbCondition",
39809                                        ATy(qTy,PTy(F4,qTy)),LU),
39810                                     ITE(Mop(Not,
39811                                             Bop(And,
39812                                                 EQ(Mop(Cast F4,
39813                                                        LL[bVar"b'19",
39814                                                           bVar"b'18",
39815                                                           bVar"b'17",
39816                                                           bVar"b'16"]),
39817                                                    LW(15,4)),
39818                                                 Bop(And,
39819                                                     EQ(Mop(Cast F1,
39820                                                            LL[bVar"b'13"]),
39821                                                        LW(0,1)),
39822                                                     EQ(Mop(Cast F1,
39823                                                            LL[bVar"b'11"]),
39824                                                        LW(0,1))))),
39825                                         Apply
39826                                           (Call
39827                                              ("DECODE_UNPREDICTABLE",
39828                                               ATy(qTy,qTy),
39829                                               TP[Var("mc",
39830                                                      CTy"MachineCode"),
39831                                                  LS"Hint"]),qVar"state"),
39832                                         qVar"state")),
39833                                  Apply
39834                                    (Call
39835                                       ("DecodeHint",
39836                                        ATy(qTy,PTy(CTy"instruction",qTy)),
39837                                        TP[Var("v",F4),
39838                                           Mop(Cast F8,
39839                                               LL[bVar"b'7",bVar"b'6",
39840                                                  bVar"b'5",bVar"b'4",
39841                                                  bVar"b'3",bVar"b'2",
39842                                                  bVar"b'1",bVar"b'0"])]),
39843                                     qVar"s"))),
39844                             (Bop(And,Mop(Not,bVar"b'26"),
39845                                  Bop(And,bVar"b'25",
39846                                      Bop(And,bVar"b'24",
39847                                          Bop(And,bVar"b'23",
39848                                              Bop(And,Mop(Not,bVar"b'22"),
39849                                                  Bop(And,bVar"b'21",
39850                                                      Bop(And,
39851                                                          Mop(Not,
39852                                                              bVar"b'20"),
39853                                                          Bop(And,
39854                                                              Mop(Not,
39855                                                                  bVar"b'14"),
39856                                                              Mop(Not,
39857                                                                  bVar"b'12"))))))))),
39858                              Let(Var("mode",FTy 5),
39859                                  Mop(Cast(FTy 5),
39860                                      LL[bVar"b'4",bVar"b'3",bVar"b'2",
39861                                         bVar"b'1",bVar"b'0"]),
39862                                  Let(Var("F",F1),
39863                                      Mop(Cast F1,LL[bVar"b'5"]),
39864                                      Let(Var("I",F1),
39865                                          Mop(Cast F1,LL[bVar"b'6"]),
39866                                          Let(Var("A",F1),
39867                                              Mop(Cast F1,LL[bVar"b'7"]),
39868                                              Let(Var("M",F1),
39869                                                  Mop(Cast F1,
39870                                                      LL[bVar"b'8"]),
39871                                                  Let(Var("imod",FTy 2),
39872                                                      Mop(Cast(FTy 2),
39873                                                          LL[bVar"b'10",
39874                                                             bVar"b'9"]),
39875                                                      Let(TP[Var("v",F4),
39876                                                             qVar"s"],
39877                                                          Apply
39878                                                            (Call
39879                                                               ("ThumbCondition",
39880                                                                ATy(qTy,
39881                                                                    PTy(F4,
39882                                                                        qTy)),
39883                                                                LU),
39884                                                             qVar"state"),
39885                                                          Let(TP[bVar"v",
39886                                                                 qVar"s"],
39887                                                              Apply
39888                                                                (Call
39889                                                                   ("Do",
39890                                                                    ATy(qTy,
39891                                                                        PTy(bTy,
39892                                                                            qTy)),
39893                                                                    TP[Var("v",
39894                                                                           F4),
39895                                                                       Apply
39896                                                                         (Call
39897                                                                            ("HaveThumb2",
39898                                                                             ATy(qTy,
39899                                                                                 bTy),
39900                                                                             LU),
39901                                                                          qVar"s")]),
39902                                                                 qVar"s"),
39903                                                              ITE(bVar"v",
39904                                                                  TP[Call
39905                                                                       ("System",
39906                                                                        CTy"instruction",
39907                                                                        Call
39908                                                                          ("ChangeProcessorState",
39909                                                                           CTy"System",
39910                                                                           TP[EQ(Var("imod",
39911                                                                                     FTy 2),
39912                                                                                 LW(2,
39913                                                                                    2)),
39914                                                                              EQ(Var("imod",
39915                                                                                     FTy 2),
39916                                                                                 LW(3,
39917                                                                                    2)),
39918                                                                              EQ(Var("A",
39919                                                                                     F1),
39920                                                                                 LW(1,
39921                                                                                    1)),
39922                                                                              EQ(Var("I",
39923                                                                                     F1),
39924                                                                                 LW(1,
39925                                                                                    1)),
39926                                                                              EQ(Var("F",
39927                                                                                     F1),
39928                                                                                 LW(1,
39929                                                                                    1)),
39930                                                                              ITE(EQ(Var("M",
39931                                                                                         F1),
39932                                                                                     LW(1,
39933                                                                                        1)),
39934                                                                                  Mop(Some,
39935                                                                                      Var("mode",
39936                                                                                          FTy 5)),
39937                                                                                  LO(FTy 5))])),
39938                                                                     ITE(Bop(Or,
39939                                                                             Bop(And,
39940                                                                                 Mop(Not,
39941                                                                                     EQ(Var("mode",
39942                                                                                            FTy 5),
39943                                                                                        LW(0,
39944                                                                                           5))),
39945                                                                                 EQ(Var("M",
39946                                                                                        F1),
39947                                                                                    LW(0,
39948                                                                                       1))),
39949                                                                             Bop(Or,
39950                                                                                 EQ(Bop(Bit,
39951                                                                                        Var("imod",
39952                                                                                            FTy 2),
39953                                                                                        LN
39954                                                                                         1),
39955                                                                                    EQ(CC[Var("A",
39956                                                                                              F1),
39957                                                                                          Var("I",
39958                                                                                              F1),
39959                                                                                          Var("F",
39960                                                                                              F1)],
39961                                                                                       LW(0,
39962                                                                                          3))),
39963                                                                                 Bop(Or,
39964                                                                                     EQ(Var("imod",
39965                                                                                            FTy 2),
39966                                                                                        LW(1,
39967                                                                                           2)),
39968                                                                                     Bop(Or,
39969                                                                                         Apply
39970                                                                                           (Call
39971                                                                                              ("InITBlock",
39972                                                                                               ATy(qTy,
39973                                                                                                   bTy),
39974                                                                                               LU),
39975                                                                                            qVar"s"),
39976                                                                                         Mop(Not,
39977                                                                                             Bop(And,
39978                                                                                                 EQ(Mop(Cast
39979                                                                                                          F4,
39980                                                                                                        LL[bVar"b'19",
39981                                                                                                           bVar"b'18",
39982                                                                                                           bVar"b'17",
39983                                                                                                           bVar"b'16"]),
39984                                                                                                    LW(15,
39985                                                                                                       4)),
39986                                                                                                 Bop(And,
39987                                                                                                     EQ(Mop(Cast
39988                                                                                                              F1,
39989                                                                                                            LL[bVar"b'13"]),
39990                                                                                                        LW(0,
39991                                                                                                           1)),
39992                                                                                                     EQ(Mop(Cast
39993                                                                                                              F1,
39994                                                                                                            LL[bVar"b'11"]),
39995                                                                                                        LW(0,
39996                                                                                                           1))))))))),
39997                                                                         Apply
39998                                                                           (Call
39999                                                                              ("DECODE_UNPREDICTABLE",
40000                                                                               ATy(qTy,
40001                                                                                   qTy),
40002                                                                               TP[Var("mc",
40003                                                                                      CTy"MachineCode"),
40004                                                                                  LS
40005                                                                                   "ChangeProcessorState"]),
40006                                                                            qVar"s"),
40007                                                                         qVar"s")],
40008                                                                  TP[Apply
40009                                                                       (Call
40010                                                                          ("Skip",
40011                                                                           ATy(qTy,
40012                                                                               CTy"instruction"),
40013                                                                           LU),
40014                                                                        qVar"s"),
40015                                                                     qVar"s"])))))))))),
40016                             (Bop(And,Mop(Not,bVar"b'26"),
40017                                  Bop(And,bVar"b'25",
40018                                      Bop(And,bVar"b'24",
40019                                          Bop(And,bVar"b'23",
40020                                              Bop(And,Mop(Not,bVar"b'22"),
40021                                                  Bop(And,bVar"b'21",
40022                                                      Bop(And,bVar"b'20",
40023                                                          Bop(And,
40024                                                              Mop(Not,
40025                                                                  bVar"b'14"),
40026                                                              Bop(And,
40027                                                                  Mop(Not,
40028                                                                      bVar"b'12"),
40029                                                                  Bop(And,
40030                                                                      Mop(Not,
40031                                                                          bVar"b'7"),
40032                                                                      Bop(And,
40033                                                                          Mop(Not,
40034                                                                              bVar"b'6"),
40035                                                                          Mop(Not,
40036                                                                              bVar"b'5")))))))))))),
40037                              Let(Var("J",F1),Mop(Cast F1,LL[bVar"b'4"]),
40038                                  Let(TP[Var("v",F4),qVar"s"],
40039                                      Apply
40040                                        (Call
40041                                           ("ThumbCondition",
40042                                            ATy(qTy,PTy(F4,qTy)),LU),
40043                                         qVar"state"),
40044                                      Let(TP[bVar"v",qVar"s"],
40045                                          Let(TP[bVar"v",qVar"s"],
40046                                              Apply
40047                                                (Call
40048                                                   ("Do",
40049                                                    ATy(qTy,PTy(bTy,qTy)),
40050                                                    TP[Var("v",F4),
40051                                                       Apply
40052                                                         (Call
40053                                                            ("HaveThumbEE",
40054                                                             ATy(qTy,bTy),
40055                                                             LU),qVar"s")]),
40056                                                 qVar"s"),
40057                                              TP[Bop(And,bVar"v",
40058                                                     Mop(Not,
40059                                                         Bop(And,
40060                                                             EQ(Apply
40061                                                                  (Call
40062                                                                     ("CurrentInstrSet",
40063                                                                      ATy(qTy,
40064                                                                          CTy"InstrSet"),
40065                                                                      LU),
40066                                                                   qVar"s"),
40067                                                                LC("InstrSet_Thumb",
40068                                                                   CTy"InstrSet")),
40069                                                             EQ(Var("J",F1),
40070                                                                LW(0,1))))),
40071                                                 qVar"s"]),
40072                                          ITE(bVar"v",
40073                                              TP[Call
40074                                                   ("System",
40075                                                    CTy"instruction",
40076                                                    Call
40077                                                      ("EnterxLeavex",
40078                                                       CTy"System",
40079                                                       EQ(Var("J",F1),
40080                                                          LW(1,1)))),
40081                                                 ITE(Bop(Or,
40082                                                         Apply
40083                                                           (Call
40084                                                              ("InITBlock",
40085                                                               ATy(qTy,bTy),
40086                                                               LU),qVar"s"),
40087                                                         Mop(Not,
40088                                                             Bop(And,
40089                                                                 EQ(Mop(Cast
40090                                                                          F4,
40091                                                                        LL[bVar"b'19",
40092                                                                           bVar"b'18",
40093                                                                           bVar"b'17",
40094                                                                           bVar"b'16"]),
40095                                                                    LW(15,
40096                                                                       4)),
40097                                                                 Bop(And,
40098                                                                     EQ(Mop(Cast
40099                                                                              F1,
40100                                                                            LL[bVar"b'13"]),
40101                                                                        LW(0,
40102                                                                           1)),
40103                                                                     Bop(And,
40104                                                                         EQ(Mop(Cast
40105                                                                                  F4,
40106                                                                                LL[bVar"b'11",
40107                                                                                   bVar"b'10",
40108                                                                                   bVar"b'9",
40109                                                                                   bVar"b'8"]),
40110                                                                            LW(15,
40111                                                                               4)),
40112                                                                         EQ(Mop(Cast
40113                                                                                  F4,
40114                                                                                LL[bVar"b'3",
40115                                                                                   bVar"b'2",
40116                                                                                   bVar"b'1",
40117                                                                                   bVar"b'0"]),
40118                                                                            LW(15,
40119                                                                               4))))))),
40120                                                     Apply
40121                                                       (Call
40122                                                          ("DECODE_UNPREDICTABLE",
40123                                                           ATy(qTy,qTy),
40124                                                           TP[Var("mc",
40125                                                                  CTy"MachineCode"),
40126                                                              LS
40127                                                               "EnterxLeavex"]),
40128                                                        qVar"s"),qVar"s")],
40129                                              TP[Apply
40130                                                   (Call
40131                                                      ("Skip",
40132                                                       ATy(qTy,
40133                                                           CTy"instruction"),
40134                                                       LU),qVar"s"),
40135                                                 qVar"s"]))))),
40136                             (Bop(And,Mop(Not,bVar"b'26"),
40137                                  Bop(And,bVar"b'25",
40138                                      Bop(And,bVar"b'24",
40139                                          Bop(And,bVar"b'23",
40140                                              Bop(And,Mop(Not,bVar"b'22"),
40141                                                  Bop(And,bVar"b'21",
40142                                                      Bop(And,bVar"b'20",
40143                                                          Bop(And,
40144                                                              Mop(Not,
40145                                                                  bVar"b'14"),
40146                                                              Mop(Not,
40147                                                                  bVar"b'12"))))))))),
40148                              Let(Var("option",F4),
40149                                  Mop(Cast F4,
40150                                      LL[bVar"b'3",bVar"b'2",bVar"b'1",
40151                                         bVar"b'0"]),
40152                                  Let(bVar"GOOD_MATCH",
40153                                      Bop(And,
40154                                          EQ(Mop(Cast F4,
40155                                                 LL[bVar"b'19",bVar"b'18",
40156                                                    bVar"b'17",bVar"b'16"]),
40157                                             LW(15,4)),
40158                                          Bop(And,
40159                                              EQ(Mop(Cast F1,
40160                                                     LL[bVar"b'13"]),
40161                                                 LW(0,1)),
40162                                              EQ(Mop(Cast F4,
40163                                                     LL[bVar"b'11",
40164                                                        bVar"b'10",
40165                                                        bVar"b'9",
40166                                                        bVar"b'8"]),
40167                                                 LW(15,4)))),
40168                                      Let(TP[Var("v",F4),qVar"s"],
40169                                          Apply
40170                                            (Call
40171                                               ("ThumbCondition",
40172                                                ATy(qTy,PTy(F4,qTy)),LU),
40173                                             qVar"state"),
40174                                          Let(TP[bVar"v",qVar"s"],
40175                                              Apply
40176                                                (Call
40177                                                   ("Do",
40178                                                    ATy(qTy,PTy(bTy,qTy)),
40179                                                    TP[Var("v",F4),
40180                                                       Apply
40181                                                         (Call
40182                                                            ("HaveThumb2",
40183                                                             ATy(qTy,bTy),
40184                                                             LU),qVar"s")]),
40185                                                 qVar"s"),
40186                                              ITE(bVar"v",
40187                                                  CS(Mop(Cast F4,
40188                                                         LL[bVar"b'7",
40189                                                            bVar"b'6",
40190                                                            bVar"b'5",
40191                                                            bVar"b'4"]),
40192                                                     [(LW(2,4),
40193                                                       TP[Const
40194                                                            ("ClearExclusive",
40195                                                             CTy"instruction"),
40196                                                          ITE(Mop(Not,
40197                                                                  bVar"GOOD_MATCH"),
40198                                                              Apply
40199                                                                (Call
40200                                                                   ("DECODE_UNPREDICTABLE",
40201                                                                    ATy(qTy,
40202                                                                        qTy),
40203                                                                    TP[Var("mc",
40204                                                                           CTy"MachineCode"),
40205                                                                       LS
40206                                                                        "CLREX"]),
40207                                                                 qVar"s"),
40208                                                              qVar"s")]),
40209                                                      (LW(4,4),
40210                                                       TP[Call
40211                                                            ("Hint",
40212                                                             CTy"instruction",
40213                                                             Call
40214                                                               ("DataSynchronizationBarrier",
40215                                                                CTy"Hint",
40216                                                                Var("option",
40217                                                                    F4))),
40218                                                          ITE(Mop(Not,
40219                                                                  bVar"GOOD_MATCH"),
40220                                                              Apply
40221                                                                (Call
40222                                                                   ("DECODE_UNPREDICTABLE",
40223                                                                    ATy(qTy,
40224                                                                        qTy),
40225                                                                    TP[Var("mc",
40226                                                                           CTy"MachineCode"),
40227                                                                       LS
40228                                                                        "DSB"]),
40229                                                                 qVar"s"),
40230                                                              qVar"s")]),
40231                                                      (LW(5,4),
40232                                                       TP[Call
40233                                                            ("Hint",
40234                                                             CTy"instruction",
40235                                                             Call
40236                                                               ("DataMemoryBarrier",
40237                                                                CTy"Hint",
40238                                                                Var("option",
40239                                                                    F4))),
40240                                                          ITE(Mop(Not,
40241                                                                  bVar"GOOD_MATCH"),
40242                                                              Apply
40243                                                                (Call
40244                                                                   ("DECODE_UNPREDICTABLE",
40245                                                                    ATy(qTy,
40246                                                                        qTy),
40247                                                                    TP[Var("mc",
40248                                                                           CTy"MachineCode"),
40249                                                                       LS
40250                                                                        "DMB"]),
40251                                                                 qVar"s"),
40252                                                              qVar"s")]),
40253                                                      (LW(6,4),
40254                                                       TP[Call
40255                                                            ("Hint",
40256                                                             CTy"instruction",
40257                                                             Call
40258                                                               ("InstructionSynchronizationBarrier",
40259                                                                CTy"Hint",
40260                                                                Var("option",
40261                                                                    F4))),
40262                                                          ITE(Mop(Not,
40263                                                                  bVar"GOOD_MATCH"),
40264                                                              Apply
40265                                                                (Call
40266                                                                   ("DECODE_UNPREDICTABLE",
40267                                                                    ATy(qTy,
40268                                                                        qTy),
40269                                                                    TP[Var("mc",
40270                                                                           CTy"MachineCode"),
40271                                                                       LS
40272                                                                        "ISB"]),
40273                                                                 qVar"s"),
40274                                                              qVar"s")]),
40275                                                      (AVar F4,
40276                                                       ITE(Bop(Ge,
40277                                                               Apply
40278                                                                 (Call
40279                                                                    ("ArchVersion",
40280                                                                     ATy(qTy,
40281                                                                         nTy),
40282                                                                     LU),
40283                                                                  qVar"s"),
40284                                                               LN 7),
40285                                                           TP[Call
40286                                                                ("Undefined",
40287                                                                 CTy"instruction",
40288                                                                 LW(0,32)),
40289                                                              qVar"s"],
40290                                                           TP[LX(CTy"instruction"),
40291                                                              Apply
40292                                                                (Call
40293                                                                   ("DECODE_UNPREDICTABLE",
40294                                                                    ATy(qTy,
40295                                                                        qTy),
40296                                                                    TP[Var("mc",
40297                                                                           CTy"MachineCode"),
40298                                                                       LS
40299                                                                        "Miscellaneous control"]),
40300                                                                 qVar"s")]))]),
40301                                                  TP[Apply
40302                                                       (Call
40303                                                          ("Skip",
40304                                                           ATy(qTy,
40305                                                               CTy"instruction"),
40306                                                           LU),qVar"s"),
40307                                                     qVar"s"])))))),
40308                             (Bop(And,Mop(Not,bVar"b'26"),
40309                                  Bop(And,bVar"b'25",
40310                                      Bop(And,bVar"b'24",
40311                                          Bop(And,bVar"b'23",
40312                                              Bop(And,bVar"b'22",
40313                                                  Bop(And,
40314                                                      Mop(Not,bVar"b'21"),
40315                                                      Bop(And,bVar"b'20",
40316                                                          Bop(And,
40317                                                              Mop(Not,
40318                                                                  bVar"b'14"),
40319                                                              Mop(Not,
40320                                                                  bVar"b'12"))))))))),
40321                              Let(Var("imm8",F8),
40322                                  Mop(Cast F8,
40323                                      LL[bVar"b'7",bVar"b'6",bVar"b'5",
40324                                         bVar"b'4",bVar"b'3",bVar"b'2",
40325                                         bVar"b'1",bVar"b'0"]),
40326                                  Let(bVar"GOOD_MATCH",
40327                                      Bop(And,
40328                                          EQ(Mop(Cast F4,
40329                                                 LL[bVar"b'19",bVar"b'18",
40330                                                    bVar"b'17",bVar"b'16"]),
40331                                             LW(15,4)),
40332                                          Bop(And,
40333                                              EQ(Mop(Cast F1,
40334                                                     LL[bVar"b'13"]),
40335                                                 LW(0,1)),
40336                                              EQ(Mop(Cast F4,
40337                                                     LL[bVar"b'11",
40338                                                        bVar"b'10",
40339                                                        bVar"b'9",
40340                                                        bVar"b'8"]),
40341                                                 LW(15,4)))),
40342                                      Let(TP[Var("v",F4),qVar"s"],
40343                                          Apply
40344                                            (Call
40345                                               ("ThumbCondition",
40346                                                ATy(qTy,PTy(F4,qTy)),LU),
40347                                             qVar"state"),
40348                                          Let(TP[bVar"v",qVar"s"],
40349                                              Apply
40350                                                (Call
40351                                                   ("Do",
40352                                                    ATy(qTy,PTy(bTy,qTy)),
40353                                                    TP[Var("v",F4),
40354                                                       Apply
40355                                                         (Call
40356                                                            ("HaveThumb2",
40357                                                             ATy(qTy,bTy),
40358                                                             LU),qVar"s")]),
40359                                                 qVar"s"),
40360                                              ITE(bVar"v",
40361                                                  ITE(Bop(And,
40362                                                          Apply
40363                                                            (Call
40364                                                               ("HaveVirtExt",
40365                                                                ATy(qTy,
40366                                                                    bTy),
40367                                                                LU),
40368                                                             qVar"s"),
40369                                                          Bop(And,
40370                                                              EQ(Var("imm8",
40371                                                                     F8),
40372                                                                 LW(0,8)),
40373                                                              bVar"GOOD_MATCH")),
40374                                                      TP[Call
40375                                                           ("System",
40376                                                            CTy"instruction",
40377                                                            Const
40378                                                              ("ExceptionReturn",
40379                                                               CTy"System")),
40380                                                         qVar"s"],
40381                                                      Let(TP[bVar"v",
40382                                                             qVar"s"],
40383                                                          Apply
40384                                                            (Call
40385                                                               ("CurrentModeIsHyp",
40386                                                                ATy(qTy,
40387                                                                    PTy(bTy,
40388                                                                        qTy)),
40389                                                                LU),
40390                                                             ITE(Bop(Or,
40391                                                                     EQ(Apply
40392                                                                          (Call
40393                                                                             ("CurrentInstrSet",
40394                                                                              ATy(qTy,
40395                                                                                  CTy"InstrSet"),
40396                                                                              LU),
40397                                                                           qVar"s"),
40398                                                                        LC("InstrSet_ThumbEE",
40399                                                                           CTy"InstrSet")),
40400                                                                     Bop(Or,
40401                                                                         Bop(And,
40402                                                                             Apply
40403                                                                               (Call
40404                                                                                  ("InITBlock",
40405                                                                                   ATy(qTy,
40406                                                                                       bTy),
40407                                                                                   LU),
40408                                                                                qVar"s"),
40409                                                                             Mop(Not,
40410                                                                                 Apply
40411                                                                                   (Call
40412                                                                                      ("LastInITBlock",
40413                                                                                       ATy(qTy,
40414                                                                                           bTy),
40415                                                                                       LU),
40416                                                                                    qVar"s"))),
40417                                                                         Mop(Not,
40418                                                                             bVar"GOOD_MATCH"))),
40419                                                                 Apply
40420                                                                   (Call
40421                                                                      ("DECODE_UNPREDICTABLE",
40422                                                                       ATy(qTy,
40423                                                                           qTy),
40424                                                                       TP[Var("mc",
40425                                                                              CTy"MachineCode"),
40426                                                                          LS
40427                                                                           "SUBS<c> PC, LR, #0"]),
40428                                                                    qVar"s"),
40429                                                                 qVar"s")),
40430                                                          TP[ITE(bVar"v",
40431                                                                 Call
40432                                                                   ("Undefined",
40433                                                                    CTy"instruction",
40434                                                                    LW(0,
40435                                                                       32)),
40436                                                                 Call
40437                                                                   ("Data",
40438                                                                    CTy"instruction",
40439                                                                    Call
40440                                                                      ("ArithLogicImmediate",
40441                                                                       CTy"Data",
40442                                                                       TP[LW(2,
40443                                                                             4),
40444                                                                          LT,
40445                                                                          LW(15,
40446                                                                             4),
40447                                                                          LW(14,
40448                                                                             4),
40449                                                                          Mop(Cast
40450                                                                                (FTy 12),
40451                                                                              Var("imm8",
40452                                                                                  F8))]))),
40453                                                             qVar"s"])),
40454                                                  TP[Apply
40455                                                       (Call
40456                                                          ("Skip",
40457                                                           ATy(qTy,
40458                                                               CTy"instruction"),
40459                                                           LU),qVar"s"),
40460                                                     qVar"s"])))))),
40461                             (Bop(And,Mop(Not,bVar"b'26"),
40462                                  Bop(And,bVar"b'25",
40463                                      Bop(And,bVar"b'24",
40464                                          Bop(And,bVar"b'23",
40465                                              Bop(And,bVar"b'22",
40466                                                  Bop(And,bVar"b'21",
40467                                                      Bop(And,
40468                                                          Mop(Not,
40469                                                              bVar"b'14"),
40470                                                          Bop(And,
40471                                                              Mop(Not,
40472                                                                  bVar"b'12"),
40473                                                              bVar"b'5")))))))),
40474                              Let(Var("Rd",F4),
40475                                  Mop(Cast F4,
40476                                      LL[bVar"b'11",bVar"b'10",bVar"b'9",
40477                                         bVar"b'8"]),
40478                                  Let(TP[Var("v",F4),qVar"s"],
40479                                      Apply
40480                                        (Call
40481                                           ("ThumbCondition",
40482                                            ATy(qTy,PTy(F4,qTy)),LU),
40483                                         qVar"state"),
40484                                      Let(TP[bVar"v",qVar"s"],
40485                                          Apply
40486                                            (Call
40487                                               ("Do",
40488                                                ATy(qTy,PTy(bTy,qTy)),
40489                                                TP[Var("v",F4),
40490                                                   Apply
40491                                                     (Call
40492                                                        ("HaveVirtExt",
40493                                                         ATy(qTy,bTy),LU),
40494                                                      qVar"s")]),qVar"s"),
40495                                          ITE(bVar"v",
40496                                              TP[Call
40497                                                   ("System",
40498                                                    CTy"instruction",
40499                                                    Call
40500                                                      ("MoveToRegisterFromBankedOrSpecial",
40501                                                       CTy"System",
40502                                                       TP[EQ(Mop(Cast F1,
40503                                                                 LL[bVar"b'20"]),
40504                                                             LW(1,1)),
40505                                                          CC[Mop(Cast F1,
40506                                                                 LL[bVar"b'4"]),
40507                                                             Mop(Cast F4,
40508                                                                 LL[bVar"b'19",
40509                                                                    bVar"b'18",
40510                                                                    bVar"b'17",
40511                                                                    bVar"b'16"])],
40512                                                          Var("Rd",F4)])),
40513                                                 ITE(Bop(Or,
40514                                                         Bop(In,
40515                                                             Var("Rd",F4),
40516                                                             SL[LW(13,4),
40517                                                                LW(15,4)]),
40518                                                         Mop(Not,
40519                                                             Bop(And,
40520                                                                 EQ(Mop(Cast
40521                                                                          F1,
40522                                                                        LL[bVar"b'13"]),
40523                                                                    LW(0,1)),
40524                                                                 Bop(And,
40525                                                                     EQ(Mop(Cast
40526                                                                              (FTy 2),
40527                                                                            LL[bVar"b'7",
40528                                                                               bVar"b'6"]),
40529                                                                        LW(0,
40530                                                                           2)),
40531                                                                     EQ(Mop(Cast
40532                                                                              F4,
40533                                                                            LL[bVar"b'3",
40534                                                                               bVar"b'2",
40535                                                                               bVar"b'1",
40536                                                                               bVar"b'0"]),
40537                                                                        LW(0,
40538                                                                           4)))))),
40539                                                     Apply
40540                                                       (Call
40541                                                          ("DECODE_UNPREDICTABLE",
40542                                                           ATy(qTy,qTy),
40543                                                           TP[Var("mc",
40544                                                                  CTy"MachineCode"),
40545                                                              LS
40546                                                               "MoveToRegisterFromBankedOrSpecial"]),
40547                                                        qVar"s"),qVar"s")],
40548                                              TP[Apply
40549                                                   (Call
40550                                                      ("Skip",
40551                                                       ATy(qTy,
40552                                                           CTy"instruction"),
40553                                                       LU),qVar"s"),
40554                                                 qVar"s"]))))),
40555                             (Bop(And,Mop(Not,bVar"b'26"),
40556                                  Bop(And,bVar"b'25",
40557                                      Bop(And,bVar"b'24",
40558                                          Bop(And,bVar"b'23",
40559                                              Bop(And,bVar"b'22",
40560                                                  Bop(And,bVar"b'21",
40561                                                      Bop(And,
40562                                                          Mop(Not,
40563                                                              bVar"b'14"),
40564                                                          Bop(And,
40565                                                              Mop(Not,
40566                                                                  bVar"b'12"),
40567                                                              Mop(Not,
40568                                                                  bVar"b'5"))))))))),
40569                              Let(Var("Rd",F4),
40570                                  Mop(Cast F4,
40571                                      LL[bVar"b'11",bVar"b'10",bVar"b'9",
40572                                         bVar"b'8"]),
40573                                  Let(TP[Var("v",F4),qVar"s"],
40574                                      Apply
40575                                        (Call
40576                                           ("ThumbCondition",
40577                                            ATy(qTy,PTy(F4,qTy)),LU),
40578                                         qVar"state"),
40579                                      Let(TP[bVar"v",qVar"s"],
40580                                          Apply
40581                                            (Call
40582                                               ("Do",
40583                                                ATy(qTy,PTy(bTy,qTy)),
40584                                                TP[Var("v",F4),
40585                                                   Apply
40586                                                     (Call
40587                                                        ("HaveThumb2",
40588                                                         ATy(qTy,bTy),LU),
40589                                                      qVar"s")]),qVar"s"),
40590                                          ITE(bVar"v",
40591                                              TP[Call
40592                                                   ("System",
40593                                                    CTy"instruction",
40594                                                    Call
40595                                                      ("MoveToRegisterFromSpecial",
40596                                                       CTy"System",
40597                                                       TP[EQ(Mop(Cast F1,
40598                                                                 LL[bVar"b'20"]),
40599                                                             LW(1,1)),
40600                                                          Var("Rd",F4)])),
40601                                                 ITE(Bop(Or,
40602                                                         Bop(In,
40603                                                             Var("Rd",F4),
40604                                                             SL[LW(13,4),
40605                                                                LW(15,4)]),
40606                                                         Mop(Not,
40607                                                             Bop(And,
40608                                                                 EQ(Mop(Cast
40609                                                                          F4,
40610                                                                        LL[bVar"b'19",
40611                                                                           bVar"b'18",
40612                                                                           bVar"b'17",
40613                                                                           bVar"b'16"]),
40614                                                                    LW(15,
40615                                                                       4)),
40616                                                                 Bop(And,
40617                                                                     EQ(Mop(Cast
40618                                                                              F1,
40619                                                                            LL[bVar"b'13"]),
40620                                                                        LW(0,
40621                                                                           1)),
40622                                                                     Bop(And,
40623                                                                         EQ(Mop(Cast
40624                                                                                  (FTy 2),
40625                                                                                LL[bVar"b'7",
40626                                                                                   bVar"b'6"]),
40627                                                                            LW(0,
40628                                                                               2)),
40629                                                                         EQ(Mop(Cast
40630                                                                                  (FTy 5),
40631                                                                                LL[bVar"b'4",
40632                                                                                   bVar"b'3",
40633                                                                                   bVar"b'2",
40634                                                                                   bVar"b'1",
40635                                                                                   bVar"b'0"]),
40636                                                                            LW(0,
40637                                                                               5))))))),
40638                                                     Apply
40639                                                       (Call
40640                                                          ("DECODE_UNPREDICTABLE",
40641                                                           ATy(qTy,qTy),
40642                                                           TP[Var("mc",
40643                                                                  CTy"MachineCode"),
40644                                                              LS
40645                                                               "MoveToRegisterFromSpecial"]),
40646                                                        qVar"s"),qVar"s")],
40647                                              TP[Apply
40648                                                   (Call
40649                                                      ("Skip",
40650                                                       ATy(qTy,
40651                                                           CTy"instruction"),
40652                                                       LU),qVar"s"),
40653                                                 qVar"s"]))))),
40654                             (Bop(And,bVar"b'26",
40655                                  Bop(And,bVar"b'25",
40656                                      Bop(And,bVar"b'24",
40657                                          Bop(And,bVar"b'23",
40658                                              Bop(And,bVar"b'22",
40659                                                  Bop(And,bVar"b'21",
40660                                                      Bop(And,
40661                                                          Mop(Not,
40662                                                              bVar"b'20"),
40663                                                          Bop(And,
40664                                                              Mop(Not,
40665                                                                  bVar"b'14"),
40666                                                              Bop(And,
40667                                                                  Mop(Not,
40668                                                                      bVar"b'13"),
40669                                                                  Mop(Not,
40670                                                                      bVar"b'12")))))))))),
40671                              Let(TP[Var("v",F4),qVar"s"],
40672                                  Apply
40673                                    (Call
40674                                       ("ThumbCondition",
40675                                        ATy(qTy,PTy(F4,qTy)),LU),
40676                                     qVar"state"),
40677                                  Let(TP[bVar"v",qVar"s"],
40678                                      Apply
40679                                        (Call
40680                                           ("Do",ATy(qTy,PTy(bTy,qTy)),
40681                                            TP[Var("v",F4),
40682                                               Apply
40683                                                 (Call
40684                                                    ("HaveVirtExt",
40685                                                     ATy(qTy,bTy),LU),
40686                                                  qVar"s")]),qVar"s"),
40687                                      ITE(bVar"v",
40688                                          TP[Call
40689                                               ("System",CTy"instruction",
40690                                                Call
40691                                                  ("HypervisorCall",
40692                                                   CTy"System",
40693                                                   CC[Mop(Cast F4,
40694                                                          LL[bVar"b'19",
40695                                                             bVar"b'18",
40696                                                             bVar"b'17",
40697                                                             bVar"b'16"]),
40698                                                      Mop(Cast(FTy 12),
40699                                                          LL[bVar"b'11",
40700                                                             bVar"b'10",
40701                                                             bVar"b'9",
40702                                                             bVar"b'8",
40703                                                             bVar"b'7",
40704                                                             bVar"b'6",
40705                                                             bVar"b'5",
40706                                                             bVar"b'4",
40707                                                             bVar"b'3",
40708                                                             bVar"b'2",
40709                                                             bVar"b'1",
40710                                                             bVar"b'0"])])),
40711                                             ITE(Apply
40712                                                   (Call
40713                                                      ("InITBlock",
40714                                                       ATy(qTy,bTy),LU),
40715                                                    qVar"s"),
40716                                                 Apply
40717                                                   (Call
40718                                                      ("DECODE_UNPREDICTABLE",
40719                                                       ATy(qTy,qTy),
40720                                                       TP[Var("mc",
40721                                                              CTy"MachineCode"),
40722                                                          LS
40723                                                           "HypervisorCall"]),
40724                                                    qVar"s"),qVar"s")],
40725                                          TP[Apply
40726                                               (Call
40727                                                  ("Skip",
40728                                                   ATy(qTy,
40729                                                       CTy"instruction"),
40730                                                   LU),qVar"s"),qVar"s"])))),
40731                             (Bop(And,bVar"b'26",
40732                                  Bop(And,bVar"b'25",
40733                                      Bop(And,bVar"b'24",
40734                                          Bop(And,bVar"b'23",
40735                                              Bop(And,bVar"b'22",
40736                                                  Bop(And,bVar"b'21",
40737                                                      Bop(And,bVar"b'20",
40738                                                          Bop(And,
40739                                                              Mop(Not,
40740                                                                  bVar"b'14"),
40741                                                              Bop(And,
40742                                                                  Mop(Not,
40743                                                                      bVar"b'13"),
40744                                                                  Mop(Not,
40745                                                                      bVar"b'12")))))))))),
40746                              Let(TP[Var("v",F4),qVar"s"],
40747                                  Apply
40748                                    (Call
40749                                       ("ThumbCondition",
40750                                        ATy(qTy,PTy(F4,qTy)),LU),
40751                                     qVar"state"),
40752                                  Let(TP[bVar"v",qVar"s"],
40753                                      Apply
40754                                        (Call
40755                                           ("Do",ATy(qTy,PTy(bTy,qTy)),
40756                                            TP[Var("v",F4),
40757                                               Bop(And,
40758                                                   Apply
40759                                                     (Call
40760                                                        ("HaveSecurityExt",
40761                                                         ATy(qTy,bTy),LU),
40762                                                      qVar"s"),
40763                                                   Mop(Not,
40764                                                       EQ(Dest
40765                                                            ("Architecture",
40766                                                             CTy"Architecture",
40767                                                             qVar"s"),
40768                                                          LC("ARMv6K",
40769                                                             CTy"Architecture"))))]),
40770                                         qVar"s"),
40771                                      ITE(bVar"v",
40772                                          TP[Call
40773                                               ("System",CTy"instruction",
40774                                                Call
40775                                                  ("SecureMonitorCall",
40776                                                   CTy"System",
40777                                                   Mop(Cast F4,
40778                                                       LL[bVar"b'19",
40779                                                          bVar"b'18",
40780                                                          bVar"b'17",
40781                                                          bVar"b'16"]))),
40782                                             ITE(Bop(Or,
40783                                                     Bop(And,
40784                                                         Apply
40785                                                           (Call
40786                                                              ("InITBlock",
40787                                                               ATy(qTy,bTy),
40788                                                               LU),qVar"s"),
40789                                                         Mop(Not,
40790                                                             Apply
40791                                                               (Call
40792                                                                  ("LastInITBlock",
40793                                                                   ATy(qTy,
40794                                                                       bTy),
40795                                                                   LU),
40796                                                                qVar"s"))),
40797                                                     Mop(Not,
40798                                                         EQ(Mop(Cast
40799                                                                  (FTy 12),
40800                                                                LL[bVar"b'11",
40801                                                                   bVar"b'10",
40802                                                                   bVar"b'9",
40803                                                                   bVar"b'8",
40804                                                                   bVar"b'7",
40805                                                                   bVar"b'6",
40806                                                                   bVar"b'5",
40807                                                                   bVar"b'4",
40808                                                                   bVar"b'3",
40809                                                                   bVar"b'2",
40810                                                                   bVar"b'1",
40811                                                                   bVar"b'0"]),
40812                                                            LW(0,12)))),
40813                                                 Apply
40814                                                   (Call
40815                                                      ("DECODE_UNPREDICTABLE",
40816                                                       ATy(qTy,qTy),
40817                                                       TP[Var("mc",
40818                                                              CTy"MachineCode"),
40819                                                          LS
40820                                                           "SecureMonitorCall"]),
40821                                                    qVar"s"),qVar"s")],
40822                                          TP[Apply
40823                                               (Call
40824                                                  ("Skip",
40825                                                   ATy(qTy,
40826                                                       CTy"instruction"),
40827                                                   LU),qVar"s"),qVar"s"])))),
40828                             (Bop(And,bVar"b'26",
40829                                  Bop(And,bVar"b'25",
40830                                      Bop(And,bVar"b'24",
40831                                          Bop(And,bVar"b'23",
40832                                              Bop(And,bVar"b'22",
40833                                                  Bop(And,bVar"b'21",
40834                                                      Bop(And,bVar"b'20",
40835                                                          Bop(And,
40836                                                              Mop(Not,
40837                                                                  bVar"b'14"),
40838                                                              Bop(And,
40839                                                                  bVar"b'13",
40840                                                                  Mop(Not,
40841                                                                      bVar"b'12")))))))))),
40842                              Let(TP[Var("v",F4),qVar"s"],
40843                                  Apply
40844                                    (Call
40845                                       ("ThumbCondition",
40846                                        ATy(qTy,PTy(F4,qTy)),LU),
40847                                     qVar"state"),
40848                                  Let(TP[bVar"v",qVar"s"],
40849                                      Apply
40850                                        (Call
40851                                           ("Do",ATy(qTy,PTy(bTy,qTy)),
40852                                            TP[Var("v",F4),
40853                                               Apply
40854                                                 (Call
40855                                                    ("HaveThumb2",
40856                                                     ATy(qTy,bTy),LU),
40857                                                  qVar"s")]),qVar"s"),
40858                                      TP[ITE(bVar"v",
40859                                             Call
40860                                               ("Undefined",
40861                                                CTy"instruction",
40862                                                Mop(Cast F32,
40863                                                    CC[Mop(Cast F4,
40864                                                           LL[bVar"b'19",
40865                                                              bVar"b'18",
40866                                                              bVar"b'17",
40867                                                              bVar"b'16"]),
40868                                                       Mop(Cast(FTy 12),
40869                                                           LL[bVar"b'11",
40870                                                              bVar"b'10",
40871                                                              bVar"b'9",
40872                                                              bVar"b'8",
40873                                                              bVar"b'7",
40874                                                              bVar"b'6",
40875                                                              bVar"b'5",
40876                                                              bVar"b'4",
40877                                                              bVar"b'3",
40878                                                              bVar"b'2",
40879                                                              bVar"b'1",
40880                                                              bVar"b'0"])])),
40881                                             Apply
40882                                               (Call
40883                                                  ("Skip",
40884                                                   ATy(qTy,
40885                                                       CTy"instruction"),
40886                                                   LU),qVar"s")),qVar"s"]))),
40887                             (Bop(And,Mop(Not,bVar"b'14"),
40888                                  Mop(Not,bVar"b'12")),
40889                              Let(TP[bVar"v",qVar"s"],
40890                                  Apply
40891                                    (Call
40892                                       ("Do",ATy(qTy,PTy(bTy,qTy)),
40893                                        TP[Mop(Cast F4,
40894                                               LL[bVar"b'25",bVar"b'24",
40895                                                  bVar"b'23",bVar"b'22"]),
40896                                           Apply
40897                                             (Call
40898                                                ("HaveThumb2",
40899                                                 ATy(qTy,bTy),LU),
40900                                              qVar"state")]),qVar"state"),
40901                                  ITE(bVar"v",
40902                                      TP[Call
40903                                           ("Branch",CTy"instruction",
40904                                            Call
40905                                              ("BranchTarget",CTy"Branch",
40906                                               Mop(SE F32,
40907                                                   CC[Mop(Cast F1,
40908                                                          LL[bVar"b'26"]),
40909                                                      Mop(Cast F1,
40910                                                          LL[bVar"b'11"]),
40911                                                      Mop(Cast F1,
40912                                                          LL[bVar"b'13"]),
40913                                                      Mop(Cast(FTy 6),
40914                                                          LL[bVar"b'21",
40915                                                             bVar"b'20",
40916                                                             bVar"b'19",
40917                                                             bVar"b'18",
40918                                                             bVar"b'17",
40919                                                             bVar"b'16"]),
40920                                                      Mop(Cast(FTy 11),
40921                                                          LL[bVar"b'10",
40922                                                             bVar"b'9",
40923                                                             bVar"b'8",
40924                                                             bVar"b'7",
40925                                                             bVar"b'6",
40926                                                             bVar"b'5",
40927                                                             bVar"b'4",
40928                                                             bVar"b'3",
40929                                                             bVar"b'2",
40930                                                             bVar"b'1",
40931                                                             bVar"b'0"]),
40932                                                      LW(0,1)]))),
40933                                         ITE(Apply
40934                                               (Call
40935                                                  ("InITBlock",
40936                                                   ATy(qTy,bTy),LU),
40937                                                qVar"s"),
40938                                             Apply
40939                                               (Call
40940                                                  ("DECODE_UNPREDICTABLE",
40941                                                   ATy(qTy,qTy),
40942                                                   TP[Var("mc",
40943                                                          CTy"MachineCode"),
40944                                                      LS"BranchTarget"]),
40945                                                qVar"s"),qVar"s")],
40946                                      TP[Apply
40947                                           (Call
40948                                              ("Skip",
40949                                               ATy(qTy,CTy"instruction"),
40950                                               LU),qVar"s"),qVar"s"]))),
40951                             (bVar"b'12",
40952                              Let(Var("S",F1),Mop(Cast F1,LL[bVar"b'26"]),
40953                                  Let(Var("J2",F1),
40954                                      Mop(Cast F1,LL[bVar"b'11"]),
40955                                      Let(Var("J1",F1),
40956                                          Mop(Cast F1,LL[bVar"b'13"]),
40957                                          Let(Var("L",F1),
40958                                              Mop(Cast F1,LL[bVar"b'14"]),
40959                                              Let(TP[Var("v",F4),qVar"s"],
40960                                                  Apply
40961                                                    (Call
40962                                                       ("ThumbCondition",
40963                                                        ATy(qTy,
40964                                                            PTy(F4,qTy)),
40965                                                        LU),qVar"state"),
40966                                                  Let(TP[bVar"v",qVar"s"],
40967                                                      Apply
40968                                                        (Call
40969                                                           ("Do",
40970                                                            ATy(qTy,
40971                                                                PTy(bTy,
40972                                                                    qTy)),
40973                                                            TP[Var("v",F4),
40974                                                               Bop(Or,
40975                                                                   Bop(And,
40976                                                                       EQ(Var("L",
40977                                                                              F1),
40978                                                                          LW(1,
40979                                                                             1)),
40980                                                                       Bop(And,
40981                                                                           EQ(Var("J1",
40982                                                                                  F1),
40983                                                                              LW(1,
40984                                                                                 1)),
40985                                                                           EQ(Var("J1",
40986                                                                                  F1),
40987                                                                              Var("J2",
40988                                                                                  F1)))),
40989                                                                   Apply
40990                                                                     (Call
40991                                                                        ("HaveThumb2",
40992                                                                         ATy(qTy,
40993                                                                             bTy),
40994                                                                         LU),
40995                                                                      qVar"s"))]),
40996                                                         qVar"s"),
40997                                                      ITE(bVar"v",
40998                                                          TP[Let(Var("imm32",
40999                                                                     F32),
41000                                                                 Mop(SE F32,
41001                                                                     CC[Var("S",
41002                                                                            F1),
41003                                                                        Mop(BNot,
41004                                                                            Bop(BXor,
41005                                                                                Var("J1",
41006                                                                                    F1),
41007                                                                                Var("S",
41008                                                                                    F1))),
41009                                                                        Mop(BNot,
41010                                                                            Bop(BXor,
41011                                                                                Var("J2",
41012                                                                                    F1),
41013                                                                                Var("S",
41014                                                                                    F1))),
41015                                                                        Mop(Cast
41016                                                                              (FTy 10),
41017                                                                            LL[bVar"b'25",
41018                                                                               bVar"b'24",
41019                                                                               bVar"b'23",
41020                                                                               bVar"b'22",
41021                                                                               bVar"b'21",
41022                                                                               bVar"b'20",
41023                                                                               bVar"b'19",
41024                                                                               bVar"b'18",
41025                                                                               bVar"b'17",
41026                                                                               bVar"b'16"]),
41027                                                                        Mop(Cast
41028                                                                              (FTy 11),
41029                                                                            LL[bVar"b'10",
41030                                                                               bVar"b'9",
41031                                                                               bVar"b'8",
41032                                                                               bVar"b'7",
41033                                                                               bVar"b'6",
41034                                                                               bVar"b'5",
41035                                                                               bVar"b'4",
41036                                                                               bVar"b'3",
41037                                                                               bVar"b'2",
41038                                                                               bVar"b'1",
41039                                                                               bVar"b'0"]),
41040                                                                        LW(0,
41041                                                                           1)]),
41042                                                                 ITE(EQ(Var("L",
41043                                                                            F1),
41044                                                                        LW(1,
41045                                                                           1)),
41046                                                                     Call
41047                                                                       ("Branch",
41048                                                                        CTy"instruction",
41049                                                                        Call
41050                                                                          ("BranchLinkExchangeImmediate",
41051                                                                           CTy"Branch",
41052                                                                           TP[LC("InstrSet_Thumb",
41053                                                                                 CTy"InstrSet"),
41054                                                                              Var("imm32",
41055                                                                                  F32)])),
41056                                                                     Call
41057                                                                       ("Branch",
41058                                                                        CTy"instruction",
41059                                                                        Call
41060                                                                          ("BranchTarget",
41061                                                                           CTy"Branch",
41062                                                                           Var("imm32",
41063                                                                               F32))))),
41064                                                             ITE(Bop(And,
41065                                                                     Apply
41066                                                                       (Call
41067                                                                          ("InITBlock",
41068                                                                           ATy(qTy,
41069                                                                               bTy),
41070                                                                           LU),
41071                                                                        qVar"s"),
41072                                                                     Mop(Not,
41073                                                                         Apply
41074                                                                           (Call
41075                                                                              ("LastInITBlock",
41076                                                                               ATy(qTy,
41077                                                                                   bTy),
41078                                                                               LU),
41079                                                                            qVar"s"))),
41080                                                                 Apply
41081                                                                   (Call
41082                                                                      ("DECODE_UNPREDICTABLE",
41083                                                                       ATy(qTy,
41084                                                                           qTy),
41085                                                                       TP[Var("mc",
41086                                                                              CTy"MachineCode"),
41087                                                                          LS
41088                                                                           "BranchTarget or BranchLinkExchangeImmediate"]),
41089                                                                    qVar"s"),
41090                                                                 qVar"s")],
41091                                                          TP[Apply
41092                                                               (Call
41093                                                                  ("Skip",
41094                                                                   ATy(qTy,
41095                                                                       CTy"instruction"),
41096                                                                   LU),
41097                                                                qVar"s"),
41098                                                             qVar"s"])))))))),
41099                             (Bop(And,bVar"b'14",Mop(Not,bVar"b'12")),
41100                              Let(Var("S",F1),Mop(Cast F1,LL[bVar"b'26"]),
41101                                  Let(Var("J2",F1),
41102                                      Mop(Cast F1,LL[bVar"b'11"]),
41103                                      Let(Var("J1",F1),
41104                                          Mop(Cast F1,LL[bVar"b'13"]),
41105                                          Let(TP[Var("v",F4),qVar"s"],
41106                                              Apply
41107                                                (Call
41108                                                   ("ThumbCondition",
41109                                                    ATy(qTy,PTy(F4,qTy)),
41110                                                    LU),qVar"state"),
41111                                              Let(TP[bVar"v",qVar"s"],
41112                                                  Apply
41113                                                    (Call
41114                                                       ("Do",
41115                                                        ATy(qTy,
41116                                                            PTy(bTy,qTy)),
41117                                                        TP[Var("v",F4),
41118                                                           Bop(And,
41119                                                               Mop(Not,
41120                                                                   Bop(Or,
41121                                                                       EQ(Apply
41122                                                                            (Call
41123                                                                               ("CurrentInstrSet",
41124                                                                                ATy(qTy,
41125                                                                                    CTy"InstrSet"),
41126                                                                                LU),
41127                                                                             qVar"s"),
41128                                                                          LC("InstrSet_ThumbEE",
41129                                                                             CTy"InstrSet")),
41130                                                                       EQ(Mop(Cast
41131                                                                                F1,
41132                                                                              LL[bVar"b'0"]),
41133                                                                          LW(1,
41134                                                                             1)))),
41135                                                               ITE(Bop(And,
41136                                                                       EQ(Var("J1",
41137                                                                              F1),
41138                                                                          LW(1,
41139                                                                             1)),
41140                                                                       EQ(Var("J1",
41141                                                                              F1),
41142                                                                          Var("J2",
41143                                                                              F1))),
41144                                                                   Bop(Ge,
41145                                                                       Apply
41146                                                                         (Call
41147                                                                            ("ArchVersion",
41148                                                                             ATy(qTy,
41149                                                                                 nTy),
41150                                                                             LU),
41151                                                                          qVar"s"),
41152                                                                       LN
41153                                                                        5),
41154                                                                   Apply
41155                                                                     (Call
41156                                                                        ("HaveThumb2",
41157                                                                         ATy(qTy,
41158                                                                             bTy),
41159                                                                         LU),
41160                                                                      qVar"s")))]),
41161                                                     qVar"s"),
41162                                                  ITE(bVar"v",
41163                                                      TP[Call
41164                                                           ("Branch",
41165                                                            CTy"instruction",
41166                                                            Call
41167                                                              ("BranchLinkExchangeImmediate",
41168                                                               CTy"Branch",
41169                                                               TP[LC("InstrSet_ARM",
41170                                                                     CTy"InstrSet"),
41171                                                                  Mop(SE F32,
41172                                                                      CC[Var("S",
41173                                                                             F1),
41174                                                                         Mop(BNot,
41175                                                                             Bop(BXor,
41176                                                                                 Var("J1",
41177                                                                                     F1),
41178                                                                                 Var("S",
41179                                                                                     F1))),
41180                                                                         Mop(BNot,
41181                                                                             Bop(BXor,
41182                                                                                 Var("J2",
41183                                                                                     F1),
41184                                                                                 Var("S",
41185                                                                                     F1))),
41186                                                                         Mop(Cast
41187                                                                               (FTy 10),
41188                                                                             LL[bVar"b'25",
41189                                                                                bVar"b'24",
41190                                                                                bVar"b'23",
41191                                                                                bVar"b'22",
41192                                                                                bVar"b'21",
41193                                                                                bVar"b'20",
41194                                                                                bVar"b'19",
41195                                                                                bVar"b'18",
41196                                                                                bVar"b'17",
41197                                                                                bVar"b'16"]),
41198                                                                         Mop(Cast
41199                                                                               (FTy 10),
41200                                                                             LL[bVar"b'10",
41201                                                                                bVar"b'9",
41202                                                                                bVar"b'8",
41203                                                                                bVar"b'7",
41204                                                                                bVar"b'6",
41205                                                                                bVar"b'5",
41206                                                                                bVar"b'4",
41207                                                                                bVar"b'3",
41208                                                                                bVar"b'2",
41209                                                                                bVar"b'1"]),
41210                                                                         LW(0,
41211                                                                            2)])])),
41212                                                         ITE(Bop(And,
41213                                                                 Apply
41214                                                                   (Call
41215                                                                      ("InITBlock",
41216                                                                       ATy(qTy,
41217                                                                           bTy),
41218                                                                       LU),
41219                                                                    qVar"s"),
41220                                                                 Mop(Not,
41221                                                                     Apply
41222                                                                       (Call
41223                                                                          ("LastInITBlock",
41224                                                                           ATy(qTy,
41225                                                                               bTy),
41226                                                                           LU),
41227                                                                        qVar"s"))),
41228                                                             Apply
41229                                                               (Call
41230                                                                  ("DECODE_UNPREDICTABLE",
41231                                                                   ATy(qTy,
41232                                                                       qTy),
41233                                                                   TP[Var("mc",
41234                                                                          CTy"MachineCode"),
41235                                                                      LS
41236                                                                       "BranchLinkExchangeImmediate"]),
41237                                                                qVar"s"),
41238                                                             qVar"s")],
41239                                                      TP[Apply
41240                                                           (Call
41241                                                              ("Skip",
41242                                                               ATy(qTy,
41243                                                                   CTy"instruction"),
41244                                                               LU),qVar"s"),
41245                                                         qVar"s"])))))))],
41246                            Apply
41247                              (Call
41248                                 ("UndefinedThumb",
41249                                  ATy(qTy,PTy(CTy"instruction",qTy)),LU),
41250                               qVar"state")),
41251                        Apply
41252                          (Call
41253                             ("UndefinedThumb",
41254                              ATy(qTy,PTy(CTy"instruction",qTy)),LU),
41255                           qVar"state"))),
41256                   (Bop(And,bVar"b'31",
41257                        Bop(And,bVar"b'30",Bop(And,bVar"b'29",bVar"b'28"))),
41258                    ITB([(Mop(Not,bVar"b'25"),
41259                          Let(Var("Rn",F4),
41260                              Mop(Cast F4,
41261                                  LL[bVar"b'19",bVar"b'18",bVar"b'17",
41262                                     bVar"b'16"]),
41263                              Let(Var("S",F1),Mop(Cast F1,LL[bVar"b'20"]),
41264                                  Let(Var("Rd",F4),
41265                                      Mop(Cast F4,
41266                                          LL[bVar"b'11",bVar"b'10",
41267                                             bVar"b'9",bVar"b'8"]),
41268                                      Let(TP[Var("v",F4),qVar"s"],
41269                                          Apply
41270                                            (Call
41271                                               ("ThumbCondition",
41272                                                ATy(qTy,PTy(F4,qTy)),LU),
41273                                             qVar"state"),
41274                                          Let(TP[bVar"v",qVar"s"],
41275                                              Apply
41276                                                (Call
41277                                                   ("Do",
41278                                                    ATy(qTy,PTy(bTy,qTy)),
41279                                                    TP[Var("v",F4),
41280                                                       Apply
41281                                                         (Call
41282                                                            ("HaveThumb2",
41283                                                             ATy(qTy,bTy),
41284                                                             LU),qVar"s")]),
41285                                                 qVar"s"),
41286                                              ITE(bVar"v",
41287                                                  Let(Var("imm12",FTy 12),
41288                                                      CC[Mop(Cast F1,
41289                                                             LL[bVar"b'26"]),
41290                                                         Mop(Cast(FTy 3),
41291                                                             LL[bVar"b'14",
41292                                                                bVar"b'13",
41293                                                                bVar"b'12"]),
41294                                                         Mop(Cast F8,
41295                                                             LL[bVar"b'7",
41296                                                                bVar"b'6",
41297                                                                bVar"b'5",
41298                                                                bVar"b'4",
41299                                                                bVar"b'3",
41300                                                                bVar"b'2",
41301                                                                bVar"b'1",
41302                                                                bVar"b'0"])],
41303                                                      Let(bVar"setflags",
41304                                                          EQ(Var("S",F1),
41305                                                             LW(1,1)),
41306                                                          CS(TP[Mop(Cast
41307                                                                      F4,
41308                                                                    LL[bVar"b'24",
41309                                                                       bVar"b'23",
41310                                                                       bVar"b'22",
41311                                                                       bVar"b'21"]),
41312                                                                Var("Rn",
41313                                                                    F4),
41314                                                                Var("Rd",
41315                                                                    F4),
41316                                                                Var("S",F1)],
41317                                                             [(TP[LW(0,4),
41318                                                                  AVar F4,
41319                                                                  LW(15,4),
41320                                                                  LW(1,1)],
41321                                                               TP[Call
41322                                                                    ("Data",
41323                                                                     CTy"instruction",
41324                                                                     Call
41325                                                                       ("TestCompareImmediate",
41326                                                                        CTy"Data",
41327                                                                        TP[LW(0,
41328                                                                              2),
41329                                                                           Var("Rn",
41330                                                                               F4),
41331                                                                           Var("imm12",
41332                                                                               FTy 12)])),
41333                                                                  ITE(Bop(In,
41334                                                                          Var("Rn",
41335                                                                              F4),
41336                                                                          SL[LW(13,
41337                                                                                4),
41338                                                                             LW(15,
41339                                                                                4)]),
41340                                                                      Apply
41341                                                                        (Call
41342                                                                           ("DECODE_UNPREDICTABLE",
41343                                                                            ATy(qTy,
41344                                                                                qTy),
41345                                                                            TP[Var("mc",
41346                                                                                   CTy"MachineCode"),
41347                                                                               LS
41348                                                                                "TST (immediate)"]),
41349                                                                         qVar"s"),
41350                                                                      qVar"s")]),
41351                                                              (TP[LW(0,4),
41352                                                                  AVar
41353                                                                    (PTy(F4,
41354                                                                         PTy(F4,
41355                                                                             F1)))],
41356                                                               TP[Call
41357                                                                    ("Data",
41358                                                                     CTy"instruction",
41359                                                                     Call
41360                                                                       ("ArithLogicImmediate",
41361                                                                        CTy"Data",
41362                                                                        TP[LW(0,
41363                                                                              4),
41364                                                                           bVar"setflags",
41365                                                                           Var("Rd",
41366                                                                               F4),
41367                                                                           Var("Rn",
41368                                                                               F4),
41369                                                                           Var("imm12",
41370                                                                               FTy 12)])),
41371                                                                  ITE(Bop(Or,
41372                                                                          EQ(Var("Rd",
41373                                                                                 F4),
41374                                                                             LW(13,
41375                                                                                4)),
41376                                                                          Bop(Or,
41377                                                                              Bop(And,
41378                                                                                  EQ(Var("Rd",
41379                                                                                         F4),
41380                                                                                     LW(15,
41381                                                                                        4)),
41382                                                                                  Mop(Not,
41383                                                                                      bVar"setflags")),
41384                                                                              Bop(In,
41385                                                                                  Var("Rn",
41386                                                                                      F4),
41387                                                                                  SL[LW(13,
41388                                                                                        4),
41389                                                                                     LW(15,
41390                                                                                        4)]))),
41391                                                                      Apply
41392                                                                        (Call
41393                                                                           ("DECODE_UNPREDICTABLE",
41394                                                                            ATy(qTy,
41395                                                                                qTy),
41396                                                                            TP[Var("mc",
41397                                                                                   CTy"MachineCode"),
41398                                                                               LS
41399                                                                                "AND (immediate)"]),
41400                                                                         qVar"s"),
41401                                                                      qVar"s")]),
41402                                                              (TP[LW(1,4),
41403                                                                  AVar
41404                                                                    (PTy(F4,
41405                                                                         PTy(F4,
41406                                                                             F1)))],
41407                                                               TP[Call
41408                                                                    ("Data",
41409                                                                     CTy"instruction",
41410                                                                     Call
41411                                                                       ("ArithLogicImmediate",
41412                                                                        CTy"Data",
41413                                                                        TP[LW(14,
41414                                                                              4),
41415                                                                           bVar"setflags",
41416                                                                           Var("Rd",
41417                                                                               F4),
41418                                                                           Var("Rn",
41419                                                                               F4),
41420                                                                           Var("imm12",
41421                                                                               FTy 12)])),
41422                                                                  ITE(Bop(Or,
41423                                                                          Bop(In,
41424                                                                              Var("Rd",
41425                                                                                  F4),
41426                                                                              SL[LW(13,
41427                                                                                    4),
41428                                                                                 LW(15,
41429                                                                                    4)]),
41430                                                                          Bop(In,
41431                                                                              Var("Rn",
41432                                                                                  F4),
41433                                                                              SL[LW(13,
41434                                                                                    4),
41435                                                                                 LW(15,
41436                                                                                    4)])),
41437                                                                      Apply
41438                                                                        (Call
41439                                                                           ("DECODE_UNPREDICTABLE",
41440                                                                            ATy(qTy,
41441                                                                                qTy),
41442                                                                            TP[Var("mc",
41443                                                                                   CTy"MachineCode"),
41444                                                                               LS
41445                                                                                "BIC (immediate)"]),
41446                                                                         qVar"s"),
41447                                                                      qVar"s")]),
41448                                                              (TP[LW(2,4),
41449                                                                  LW(15,4),
41450                                                                  AVar
41451                                                                    (PTy(F4,
41452                                                                         F1))],
41453                                                               TP[Call
41454                                                                    ("Data",
41455                                                                     CTy"instruction",
41456                                                                     Call
41457                                                                       ("Move",
41458                                                                        CTy"Data",
41459                                                                        TP[bVar"setflags",
41460                                                                           LF,
41461                                                                           Var("Rd",
41462                                                                               F4),
41463                                                                           Var("imm12",
41464                                                                               FTy 12)])),
41465                                                                  ITE(Bop(In,
41466                                                                          Var("Rd",
41467                                                                              F4),
41468                                                                          SL[LW(13,
41469                                                                                4),
41470                                                                             LW(15,
41471                                                                                4)]),
41472                                                                      Apply
41473                                                                        (Call
41474                                                                           ("DECODE_UNPREDICTABLE",
41475                                                                            ATy(qTy,
41476                                                                                qTy),
41477                                                                            TP[Var("mc",
41478                                                                                   CTy"MachineCode"),
41479                                                                               LS
41480                                                                                "MOV (immediate)"]),
41481                                                                         qVar"s"),
41482                                                                      qVar"s")]),
41483                                                              (TP[LW(2,4),
41484                                                                  AVar
41485                                                                    (PTy(F4,
41486                                                                         PTy(F4,
41487                                                                             F1)))],
41488                                                               TP[Call
41489                                                                    ("Data",
41490                                                                     CTy"instruction",
41491                                                                     Call
41492                                                                       ("ArithLogicImmediate",
41493                                                                        CTy"Data",
41494                                                                        TP[LW(12,
41495                                                                              4),
41496                                                                           bVar"setflags",
41497                                                                           Var("Rd",
41498                                                                               F4),
41499                                                                           Var("Rn",
41500                                                                               F4),
41501                                                                           Var("imm12",
41502                                                                               FTy 12)])),
41503                                                                  ITE(Bop(Or,
41504                                                                          Bop(In,
41505                                                                              Var("Rd",
41506                                                                                  F4),
41507                                                                              SL[LW(13,
41508                                                                                    4),
41509                                                                                 LW(15,
41510                                                                                    4)]),
41511                                                                          EQ(Var("Rn",
41512                                                                                 F4),
41513                                                                             LW(13,
41514                                                                                4))),
41515                                                                      Apply
41516                                                                        (Call
41517                                                                           ("DECODE_UNPREDICTABLE",
41518                                                                            ATy(qTy,
41519                                                                                qTy),
41520                                                                            TP[Var("mc",
41521                                                                                   CTy"MachineCode"),
41522                                                                               LS
41523                                                                                "ORR (immediate)"]),
41524                                                                         qVar"s"),
41525                                                                      qVar"s")]),
41526                                                              (TP[LW(3,4),
41527                                                                  LW(15,4),
41528                                                                  AVar
41529                                                                    (PTy(F4,
41530                                                                         F1))],
41531                                                               TP[Call
41532                                                                    ("Data",
41533                                                                     CTy"instruction",
41534                                                                     Call
41535                                                                       ("Move",
41536                                                                        CTy"Data",
41537                                                                        TP[bVar"setflags",
41538                                                                           LT,
41539                                                                           Var("Rd",
41540                                                                               F4),
41541                                                                           Var("imm12",
41542                                                                               FTy 12)])),
41543                                                                  ITE(Bop(In,
41544                                                                          Var("Rd",
41545                                                                              F4),
41546                                                                          SL[LW(13,
41547                                                                                4),
41548                                                                             LW(15,
41549                                                                                4)]),
41550                                                                      Apply
41551                                                                        (Call
41552                                                                           ("DECODE_UNPREDICTABLE",
41553                                                                            ATy(qTy,
41554                                                                                qTy),
41555                                                                            TP[Var("mc",
41556                                                                                   CTy"MachineCode"),
41557                                                                               LS
41558                                                                                "MVN (immediate)"]),
41559                                                                         qVar"s"),
41560                                                                      qVar"s")]),
41561                                                              (TP[LW(3,4),
41562                                                                  AVar
41563                                                                    (PTy(F4,
41564                                                                         PTy(F4,
41565                                                                             F1)))],
41566                                                               TP[Call
41567                                                                    ("Data",
41568                                                                     CTy"instruction",
41569                                                                     Call
41570                                                                       ("ArithLogicImmediate",
41571                                                                        CTy"Data",
41572                                                                        TP[LW(15,
41573                                                                              4),
41574                                                                           bVar"setflags",
41575                                                                           Var("Rd",
41576                                                                               F4),
41577                                                                           Var("Rn",
41578                                                                               F4),
41579                                                                           Var("imm12",
41580                                                                               FTy 12)])),
41581                                                                  ITE(Bop(Or,
41582                                                                          Bop(In,
41583                                                                              Var("Rd",
41584                                                                                  F4),
41585                                                                              SL[LW(13,
41586                                                                                    4),
41587                                                                                 LW(15,
41588                                                                                    4)]),
41589                                                                          EQ(Var("Rn",
41590                                                                                 F4),
41591                                                                             LW(13,
41592                                                                                4))),
41593                                                                      Apply
41594                                                                        (Call
41595                                                                           ("DECODE_UNPREDICTABLE",
41596                                                                            ATy(qTy,
41597                                                                                qTy),
41598                                                                            TP[Var("mc",
41599                                                                                   CTy"MachineCode"),
41600                                                                               LS
41601                                                                                "ORN (immediate)"]),
41602                                                                         qVar"s"),
41603                                                                      qVar"s")]),
41604                                                              (TP[LW(4,4),
41605                                                                  AVar F4,
41606                                                                  LW(15,4),
41607                                                                  LW(1,1)],
41608                                                               TP[Call
41609                                                                    ("Data",
41610                                                                     CTy"instruction",
41611                                                                     Call
41612                                                                       ("TestCompareImmediate",
41613                                                                        CTy"Data",
41614                                                                        TP[LW(1,
41615                                                                              2),
41616                                                                           Var("Rn",
41617                                                                               F4),
41618                                                                           Var("imm12",
41619                                                                               FTy 12)])),
41620                                                                  ITE(Bop(In,
41621                                                                          Var("Rn",
41622                                                                              F4),
41623                                                                          SL[LW(13,
41624                                                                                4),
41625                                                                             LW(15,
41626                                                                                4)]),
41627                                                                      Apply
41628                                                                        (Call
41629                                                                           ("DECODE_UNPREDICTABLE",
41630                                                                            ATy(qTy,
41631                                                                                qTy),
41632                                                                            TP[Var("mc",
41633                                                                                   CTy"MachineCode"),
41634                                                                               LS
41635                                                                                "TEQ (immediate)"]),
41636                                                                         qVar"s"),
41637                                                                      qVar"s")]),
41638                                                              (TP[LW(4,4),
41639                                                                  AVar
41640                                                                    (PTy(F4,
41641                                                                         PTy(F4,
41642                                                                             F1)))],
41643                                                               TP[Call
41644                                                                    ("Data",
41645                                                                     CTy"instruction",
41646                                                                     Call
41647                                                                       ("ArithLogicImmediate",
41648                                                                        CTy"Data",
41649                                                                        TP[LW(1,
41650                                                                              4),
41651                                                                           bVar"setflags",
41652                                                                           Var("Rd",
41653                                                                               F4),
41654                                                                           Var("Rn",
41655                                                                               F4),
41656                                                                           Var("imm12",
41657                                                                               FTy 12)])),
41658                                                                  ITE(Bop(Or,
41659                                                                          EQ(Var("Rd",
41660                                                                                 F4),
41661                                                                             LW(13,
41662                                                                                4)),
41663                                                                          Bop(Or,
41664                                                                              Bop(And,
41665                                                                                  EQ(Var("Rd",
41666                                                                                         F4),
41667                                                                                     LW(15,
41668                                                                                        4)),
41669                                                                                  Mop(Not,
41670                                                                                      bVar"setflags")),
41671                                                                              Bop(In,
41672                                                                                  Var("Rn",
41673                                                                                      F4),
41674                                                                                  SL[LW(13,
41675                                                                                        4),
41676                                                                                     LW(15,
41677                                                                                        4)]))),
41678                                                                      Apply
41679                                                                        (Call
41680                                                                           ("DECODE_UNPREDICTABLE",
41681                                                                            ATy(qTy,
41682                                                                                qTy),
41683                                                                            TP[Var("mc",
41684                                                                                   CTy"MachineCode"),
41685                                                                               LS
41686                                                                                "EOR (immediate)"]),
41687                                                                         qVar"s"),
41688                                                                      qVar"s")]),
41689                                                              (TP[LW(8,4),
41690                                                                  AVar F4,
41691                                                                  LW(15,4),
41692                                                                  LW(1,1)],
41693                                                               TP[Call
41694                                                                    ("Data",
41695                                                                     CTy"instruction",
41696                                                                     Call
41697                                                                       ("TestCompareImmediate",
41698                                                                        CTy"Data",
41699                                                                        TP[LW(3,
41700                                                                              2),
41701                                                                           Var("Rn",
41702                                                                               F4),
41703                                                                           Var("imm12",
41704                                                                               FTy 12)])),
41705                                                                  ITE(EQ(Var("Rn",
41706                                                                             F4),
41707                                                                         LW(15,
41708                                                                            4)),
41709                                                                      Apply
41710                                                                        (Call
41711                                                                           ("DECODE_UNPREDICTABLE",
41712                                                                            ATy(qTy,
41713                                                                                qTy),
41714                                                                            TP[Var("mc",
41715                                                                                   CTy"MachineCode"),
41716                                                                               LS
41717                                                                                "CMN (immediate)"]),
41718                                                                         qVar"s"),
41719                                                                      qVar"s")]),
41720                                                              (TP[LW(8,4),
41721                                                                  AVar
41722                                                                    (PTy(F4,
41723                                                                         PTy(F4,
41724                                                                             F1)))],
41725                                                               TP[Call
41726                                                                    ("Data",
41727                                                                     CTy"instruction",
41728                                                                     Call
41729                                                                       ("ArithLogicImmediate",
41730                                                                        CTy"Data",
41731                                                                        TP[LW(4,
41732                                                                              4),
41733                                                                           bVar"setflags",
41734                                                                           Var("Rd",
41735                                                                               F4),
41736                                                                           Var("Rn",
41737                                                                               F4),
41738                                                                           Var("imm12",
41739                                                                               FTy 12)])),
41740                                                                  ITE(Bop(Or,
41741                                                                          EQ(Var("Rd",
41742                                                                                 F4),
41743                                                                             LW(13,
41744                                                                                4)),
41745                                                                          Bop(Or,
41746                                                                              Bop(And,
41747                                                                                  EQ(Var("Rd",
41748                                                                                         F4),
41749                                                                                     LW(15,
41750                                                                                        4)),
41751                                                                                  Mop(Not,
41752                                                                                      bVar"setflags")),
41753                                                                              EQ(Var("Rn",
41754                                                                                     F4),
41755                                                                                 LW(15,
41756                                                                                    4)))),
41757                                                                      Apply
41758                                                                        (Call
41759                                                                           ("DECODE_UNPREDICTABLE",
41760                                                                            ATy(qTy,
41761                                                                                qTy),
41762                                                                            TP[Var("mc",
41763                                                                                   CTy"MachineCode"),
41764                                                                               LS
41765                                                                                "ADD (immediate)"]),
41766                                                                         qVar"s"),
41767                                                                      qVar"s")]),
41768                                                              (TP[LW(10,4),
41769                                                                  AVar
41770                                                                    (PTy(F4,
41771                                                                         PTy(F4,
41772                                                                             F1)))],
41773                                                               TP[Call
41774                                                                    ("Data",
41775                                                                     CTy"instruction",
41776                                                                     Call
41777                                                                       ("ArithLogicImmediate",
41778                                                                        CTy"Data",
41779                                                                        TP[LW(5,
41780                                                                              4),
41781                                                                           bVar"setflags",
41782                                                                           Var("Rd",
41783                                                                               F4),
41784                                                                           Var("Rn",
41785                                                                               F4),
41786                                                                           Var("imm12",
41787                                                                               FTy 12)])),
41788                                                                  ITE(Bop(Or,
41789                                                                          Bop(In,
41790                                                                              Var("Rd",
41791                                                                                  F4),
41792                                                                              SL[LW(13,
41793                                                                                    4),
41794                                                                                 LW(15,
41795                                                                                    4)]),
41796                                                                          Bop(In,
41797                                                                              Var("Rn",
41798                                                                                  F4),
41799                                                                              SL[LW(13,
41800                                                                                    4),
41801                                                                                 LW(15,
41802                                                                                    4)])),
41803                                                                      Apply
41804                                                                        (Call
41805                                                                           ("DECODE_UNPREDICTABLE",
41806                                                                            ATy(qTy,
41807                                                                                qTy),
41808                                                                            TP[Var("mc",
41809                                                                                   CTy"MachineCode"),
41810                                                                               LS
41811                                                                                "ADC (immediate)"]),
41812                                                                         qVar"s"),
41813                                                                      qVar"s")]),
41814                                                              (TP[LW(11,4),
41815                                                                  AVar
41816                                                                    (PTy(F4,
41817                                                                         PTy(F4,
41818                                                                             F1)))],
41819                                                               TP[Call
41820                                                                    ("Data",
41821                                                                     CTy"instruction",
41822                                                                     Call
41823                                                                       ("ArithLogicImmediate",
41824                                                                        CTy"Data",
41825                                                                        TP[LW(6,
41826                                                                              4),
41827                                                                           bVar"setflags",
41828                                                                           Var("Rd",
41829                                                                               F4),
41830                                                                           Var("Rn",
41831                                                                               F4),
41832                                                                           Var("imm12",
41833                                                                               FTy 12)])),
41834                                                                  ITE(Bop(Or,
41835                                                                          Bop(In,
41836                                                                              Var("Rd",
41837                                                                                  F4),
41838                                                                              SL[LW(13,
41839                                                                                    4),
41840                                                                                 LW(15,
41841                                                                                    4)]),
41842                                                                          Bop(In,
41843                                                                              Var("Rn",
41844                                                                                  F4),
41845                                                                              SL[LW(13,
41846                                                                                    4),
41847                                                                                 LW(15,
41848                                                                                    4)])),
41849                                                                      Apply
41850                                                                        (Call
41851                                                                           ("DECODE_UNPREDICTABLE",
41852                                                                            ATy(qTy,
41853                                                                                qTy),
41854                                                                            TP[Var("mc",
41855                                                                                   CTy"MachineCode"),
41856                                                                               LS
41857                                                                                "SBC (immediate)"]),
41858                                                                         qVar"s"),
41859                                                                      qVar"s")]),
41860                                                              (TP[LW(13,4),
41861                                                                  AVar F4,
41862                                                                  LW(15,4),
41863                                                                  LW(1,1)],
41864                                                               TP[Call
41865                                                                    ("Data",
41866                                                                     CTy"instruction",
41867                                                                     Call
41868                                                                       ("TestCompareImmediate",
41869                                                                        CTy"Data",
41870                                                                        TP[LW(2,
41871                                                                              2),
41872                                                                           Var("Rn",
41873                                                                               F4),
41874                                                                           Var("imm12",
41875                                                                               FTy 12)])),
41876                                                                  ITE(EQ(Var("Rn",
41877                                                                             F4),
41878                                                                         LW(15,
41879                                                                            4)),
41880                                                                      Apply
41881                                                                        (Call
41882                                                                           ("DECODE_UNPREDICTABLE",
41883                                                                            ATy(qTy,
41884                                                                                qTy),
41885                                                                            TP[Var("mc",
41886                                                                                   CTy"MachineCode"),
41887                                                                               LS
41888                                                                                "CMP (immediate)"]),
41889                                                                         qVar"s"),
41890                                                                      qVar"s")]),
41891                                                              (TP[LW(13,4),
41892                                                                  AVar
41893                                                                    (PTy(F4,
41894                                                                         PTy(F4,
41895                                                                             F1)))],
41896                                                               TP[Call
41897                                                                    ("Data",
41898                                                                     CTy"instruction",
41899                                                                     Call
41900                                                                       ("ArithLogicImmediate",
41901                                                                        CTy"Data",
41902                                                                        TP[LW(2,
41903                                                                              4),
41904                                                                           bVar"setflags",
41905                                                                           Var("Rd",
41906                                                                               F4),
41907                                                                           Var("Rn",
41908                                                                               F4),
41909                                                                           Var("imm12",
41910                                                                               FTy 12)])),
41911                                                                  ITE(Bop(Or,
41912                                                                          EQ(Var("Rd",
41913                                                                                 F4),
41914                                                                             LW(13,
41915                                                                                4)),
41916                                                                          Bop(Or,
41917                                                                              Bop(And,
41918                                                                                  EQ(Var("Rd",
41919                                                                                         F4),
41920                                                                                     LW(15,
41921                                                                                        4)),
41922                                                                                  Mop(Not,
41923                                                                                      bVar"setflags")),
41924                                                                              EQ(Var("Rn",
41925                                                                                     F4),
41926                                                                                 LW(15,
41927                                                                                    4)))),
41928                                                                      Apply
41929                                                                        (Call
41930                                                                           ("DECODE_UNPREDICTABLE",
41931                                                                            ATy(qTy,
41932                                                                                qTy),
41933                                                                            TP[Var("mc",
41934                                                                                   CTy"MachineCode"),
41935                                                                               LS
41936                                                                                "SUB (immediate)"]),
41937                                                                         qVar"s"),
41938                                                                      qVar"s")]),
41939                                                              (TP[LW(14,4),
41940                                                                  AVar
41941                                                                    (PTy(F4,
41942                                                                         PTy(F4,
41943                                                                             F1)))],
41944                                                               TP[Call
41945                                                                    ("Data",
41946                                                                     CTy"instruction",
41947                                                                     Call
41948                                                                       ("ArithLogicImmediate",
41949                                                                        CTy"Data",
41950                                                                        TP[LW(3,
41951                                                                              4),
41952                                                                           bVar"setflags",
41953                                                                           Var("Rd",
41954                                                                               F4),
41955                                                                           Var("Rn",
41956                                                                               F4),
41957                                                                           Var("imm12",
41958                                                                               FTy 12)])),
41959                                                                  ITE(Bop(Or,
41960                                                                          Bop(In,
41961                                                                              Var("Rd",
41962                                                                                  F4),
41963                                                                              SL[LW(13,
41964                                                                                    4),
41965                                                                                 LW(15,
41966                                                                                    4)]),
41967                                                                          Bop(In,
41968                                                                              Var("Rn",
41969                                                                                  F4),
41970                                                                              SL[LW(13,
41971                                                                                    4),
41972                                                                                 LW(15,
41973                                                                                    4)])),
41974                                                                      Apply
41975                                                                        (Call
41976                                                                           ("DECODE_UNPREDICTABLE",
41977                                                                            ATy(qTy,
41978                                                                                qTy),
41979                                                                            TP[Var("mc",
41980                                                                                   CTy"MachineCode"),
41981                                                                               LS
41982                                                                                "RSB (immediate)"]),
41983                                                                         qVar"s"),
41984                                                                      qVar"s")]),
41985                                                              (AVar
41986                                                                 (PTy(F4,
41987                                                                      PTy(F4,
41988                                                                          PTy(F4,
41989                                                                              F1)))),
41990                                                               TP[Call
41991                                                                    ("Undefined",
41992                                                                     CTy"instruction",
41993                                                                     LW(0,
41994                                                                        32)),
41995                                                                  qVar"s"])]))),
41996                                                  TP[Apply
41997                                                       (Call
41998                                                          ("Skip",
41999                                                           ATy(qTy,
42000                                                               CTy"instruction"),
42001                                                           LU),qVar"s"),
42002                                                     qVar"s"]))))))),
42003                         (Bop(And,bVar"b'25",
42004                              Bop(And,Mop(Not,bVar"b'24"),
42005                                  Bop(And,Mop(Not,bVar"b'23"),
42006                                      Bop(And,Mop(Not,bVar"b'22"),
42007                                          Bop(And,Mop(Not,bVar"b'21"),
42008                                              Mop(Not,bVar"b'20")))))),
42009                          Let(Var("Rd",F4),
42010                              Mop(Cast F4,
42011                                  LL[bVar"b'11",bVar"b'10",bVar"b'9",
42012                                     bVar"b'8"]),
42013                              Let(TP[Var("v",F4),qVar"s"],
42014                                  Apply
42015                                    (Call
42016                                       ("ThumbCondition",
42017                                        ATy(qTy,PTy(F4,qTy)),LU),
42018                                     qVar"state"),
42019                                  Let(TP[bVar"v",qVar"s"],
42020                                      Apply
42021                                        (Call
42022                                           ("Do",ATy(qTy,PTy(bTy,qTy)),
42023                                            TP[Var("v",F4),
42024                                               Apply
42025                                                 (Call
42026                                                    ("HaveThumb2",
42027                                                     ATy(qTy,bTy),LU),
42028                                                  qVar"s")]),qVar"s"),
42029                                      ITE(bVar"v",
42030                                          TP[Call
42031                                               ("Data",CTy"instruction",
42032                                                Call
42033                                                  ("AddSub",CTy"Data",
42034                                                   TP[LF,Var("Rd",F4),
42035                                                      Mop(Cast F4,
42036                                                          LL[bVar"b'19",
42037                                                             bVar"b'18",
42038                                                             bVar"b'17",
42039                                                             bVar"b'16"]),
42040                                                      CC[Mop(Cast F1,
42041                                                             LL[bVar"b'26"]),
42042                                                         Mop(Cast(FTy 3),
42043                                                             LL[bVar"b'14",
42044                                                                bVar"b'13",
42045                                                                bVar"b'12"]),
42046                                                         Mop(Cast F8,
42047                                                             LL[bVar"b'7",
42048                                                                bVar"b'6",
42049                                                                bVar"b'5",
42050                                                                bVar"b'4",
42051                                                                bVar"b'3",
42052                                                                bVar"b'2",
42053                                                                bVar"b'1",
42054                                                                bVar"b'0"])]])),
42055                                             ITE(Bop(In,Var("Rd",F4),
42056                                                     SL[LW(13,4),LW(15,4)]),
42057                                                 Apply
42058                                                   (Call
42059                                                      ("DECODE_UNPREDICTABLE",
42060                                                       ATy(qTy,qTy),
42061                                                       TP[Var("mc",
42062                                                              CTy"MachineCode"),
42063                                                          LS
42064                                                           "ADDW (immediate)"]),
42065                                                    qVar"s"),qVar"s")],
42066                                          TP[Apply
42067                                               (Call
42068                                                  ("Skip",
42069                                                   ATy(qTy,
42070                                                       CTy"instruction"),
42071                                                   LU),qVar"s"),qVar"s"]))))),
42072                         (Bop(And,bVar"b'25",
42073                              Bop(And,Mop(Not,bVar"b'24"),
42074                                  Bop(And,bVar"b'23",
42075                                      Bop(And,Mop(Not,bVar"b'22"),
42076                                          Bop(And,bVar"b'21",
42077                                              Mop(Not,bVar"b'20")))))),
42078                          Let(Var("Rd",F4),
42079                              Mop(Cast F4,
42080                                  LL[bVar"b'11",bVar"b'10",bVar"b'9",
42081                                     bVar"b'8"]),
42082                              Let(TP[Var("v",F4),qVar"s"],
42083                                  Apply
42084                                    (Call
42085                                       ("ThumbCondition",
42086                                        ATy(qTy,PTy(F4,qTy)),LU),
42087                                     qVar"state"),
42088                                  Let(TP[bVar"v",qVar"s"],
42089                                      Apply
42090                                        (Call
42091                                           ("Do",ATy(qTy,PTy(bTy,qTy)),
42092                                            TP[Var("v",F4),
42093                                               Apply
42094                                                 (Call
42095                                                    ("HaveThumb2",
42096                                                     ATy(qTy,bTy),LU),
42097                                                  qVar"s")]),qVar"s"),
42098                                      ITE(bVar"v",
42099                                          TP[Call
42100                                               ("Data",CTy"instruction",
42101                                                Call
42102                                                  ("AddSub",CTy"Data",
42103                                                   TP[LT,Var("Rd",F4),
42104                                                      Mop(Cast F4,
42105                                                          LL[bVar"b'19",
42106                                                             bVar"b'18",
42107                                                             bVar"b'17",
42108                                                             bVar"b'16"]),
42109                                                      CC[Mop(Cast F1,
42110                                                             LL[bVar"b'26"]),
42111                                                         Mop(Cast(FTy 3),
42112                                                             LL[bVar"b'14",
42113                                                                bVar"b'13",
42114                                                                bVar"b'12"]),
42115                                                         Mop(Cast F8,
42116                                                             LL[bVar"b'7",
42117                                                                bVar"b'6",
42118                                                                bVar"b'5",
42119                                                                bVar"b'4",
42120                                                                bVar"b'3",
42121                                                                bVar"b'2",
42122                                                                bVar"b'1",
42123                                                                bVar"b'0"])]])),
42124                                             ITE(Bop(In,Var("Rd",F4),
42125                                                     SL[LW(13,4),LW(15,4)]),
42126                                                 Apply
42127                                                   (Call
42128                                                      ("DECODE_UNPREDICTABLE",
42129                                                       ATy(qTy,qTy),
42130                                                       TP[Var("mc",
42131                                                              CTy"MachineCode"),
42132                                                          LS
42133                                                           "SUBW (immediate)"]),
42134                                                    qVar"s"),qVar"s")],
42135                                          TP[Apply
42136                                               (Call
42137                                                  ("Skip",
42138                                                   ATy(qTy,
42139                                                       CTy"instruction"),
42140                                                   LU),qVar"s"),qVar"s"]))))),
42141                         (Bop(And,bVar"b'25",
42142                              Bop(And,Mop(Not,bVar"b'24"),
42143                                  Bop(And,bVar"b'22",
42144                                      Bop(And,Mop(Not,bVar"b'21"),
42145                                          Mop(Not,bVar"b'20"))))),
42146                          Let(Var("Rd",F4),
42147                              Mop(Cast F4,
42148                                  LL[bVar"b'11",bVar"b'10",bVar"b'9",
42149                                     bVar"b'8"]),
42150                              Let(TP[Var("v",F4),qVar"s"],
42151                                  Apply
42152                                    (Call
42153                                       ("ThumbCondition",
42154                                        ATy(qTy,PTy(F4,qTy)),LU),
42155                                     qVar"state"),
42156                                  Let(TP[bVar"v",qVar"s"],
42157                                      Apply
42158                                        (Call
42159                                           ("Do",ATy(qTy,PTy(bTy,qTy)),
42160                                            TP[Var("v",F4),
42161                                               Apply
42162                                                 (Call
42163                                                    ("HaveThumb2",
42164                                                     ATy(qTy,bTy),LU),
42165                                                  qVar"s")]),qVar"s"),
42166                                      ITE(bVar"v",
42167                                          TP[Call
42168                                               ("Data",CTy"instruction",
42169                                                Call
42170                                                  ("MoveHalfword",
42171                                                   CTy"Data",
42172                                                   TP[EQ(Mop(Cast F1,
42173                                                             LL[bVar"b'23"]),
42174                                                         LW(1,1)),
42175                                                      Var("Rd",F4),
42176                                                      CC[Mop(Cast F4,
42177                                                             LL[bVar"b'19",
42178                                                                bVar"b'18",
42179                                                                bVar"b'17",
42180                                                                bVar"b'16"]),
42181                                                         Mop(Cast F1,
42182                                                             LL[bVar"b'26"]),
42183                                                         Mop(Cast(FTy 3),
42184                                                             LL[bVar"b'14",
42185                                                                bVar"b'13",
42186                                                                bVar"b'12"]),
42187                                                         Mop(Cast F8,
42188                                                             LL[bVar"b'7",
42189                                                                bVar"b'6",
42190                                                                bVar"b'5",
42191                                                                bVar"b'4",
42192                                                                bVar"b'3",
42193                                                                bVar"b'2",
42194                                                                bVar"b'1",
42195                                                                bVar"b'0"])]])),
42196                                             ITE(Bop(In,Var("Rd",F4),
42197                                                     SL[LW(13,4),LW(15,4)]),
42198                                                 Apply
42199                                                   (Call
42200                                                      ("DECODE_UNPREDICTABLE",
42201                                                       ATy(qTy,qTy),
42202                                                       TP[Var("mc",
42203                                                              CTy"MachineCode"),
42204                                                          LS
42205                                                           "MOVT or MOVW (immediate)"]),
42206                                                    qVar"s"),qVar"s")],
42207                                          TP[Apply
42208                                               (Call
42209                                                  ("Skip",
42210                                                   ATy(qTy,
42211                                                       CTy"instruction"),
42212                                                   LU),qVar"s"),qVar"s"]))))),
42213                         (Bop(And,bVar"b'25",
42214                              Bop(And,bVar"b'24",
42215                                  Bop(And,Mop(Not,bVar"b'22"),
42216                                      Bop(And,bVar"b'21",
42217                                          Bop(And,Mop(Not,bVar"b'20"),
42218                                              Bop(And,Mop(Not,bVar"b'14"),
42219                                                  Bop(And,
42220                                                      Mop(Not,bVar"b'13"),
42221                                                      Bop(And,
42222                                                          Mop(Not,
42223                                                              bVar"b'12"),
42224                                                          Bop(And,
42225                                                              Mop(Not,
42226                                                                  bVar"b'7"),
42227                                                              Mop(Not,
42228                                                                  bVar"b'6")))))))))),
42229                          Let(Var("Rn",F4),
42230                              Mop(Cast F4,
42231                                  LL[bVar"b'19",bVar"b'18",bVar"b'17",
42232                                     bVar"b'16"]),
42233                              Let(Var("sat_imm",F4),
42234                                  Mop(Cast F4,
42235                                      LL[bVar"b'3",bVar"b'2",bVar"b'1",
42236                                         bVar"b'0"]),
42237                                  Let(Var("Rd",F4),
42238                                      Mop(Cast F4,
42239                                          LL[bVar"b'11",bVar"b'10",
42240                                             bVar"b'9",bVar"b'8"]),
42241                                      Let(TP[Var("v",F4),qVar"s"],
42242                                          Apply
42243                                            (Call
42244                                               ("ThumbCondition",
42245                                                ATy(qTy,PTy(F4,qTy)),LU),
42246                                             qVar"state"),
42247                                          Let(TP[bVar"v",qVar"s"],
42248                                              Apply
42249                                                (Call
42250                                                   ("Do",
42251                                                    ATy(qTy,PTy(bTy,qTy)),
42252                                                    TP[Var("v",F4),
42253                                                       Apply
42254                                                         (Call
42255                                                            ("HaveThumb2",
42256                                                             ATy(qTy,bTy),
42257                                                             LU),qVar"s")]),
42258                                                 qVar"s"),
42259                                              ITE(bVar"v",
42260                                                  TP[Let(bVar"unsigned",
42261                                                         EQ(Mop(Cast F1,
42262                                                                LL[bVar"b'23"]),
42263                                                            LW(1,1)),
42264                                                         Call
42265                                                           ("Media",
42266                                                            CTy"instruction",
42267                                                            Call
42268                                                              ("Saturate16",
42269                                                               CTy"Media",
42270                                                               TP[ITE(bVar"unsigned",
42271                                                                      Mop(Cast
42272                                                                            nTy,
42273                                                                          Var("sat_imm",
42274                                                                              F4)),
42275                                                                      Bop(Add,
42276                                                                          Mop(Cast
42277                                                                                nTy,
42278                                                                              Var("sat_imm",
42279                                                                                  F4)),
42280                                                                          LN
42281                                                                           1)),
42282                                                                  bVar"unsigned",
42283                                                                  Var("Rd",
42284                                                                      F4),
42285                                                                  Var("Rn",
42286                                                                      F4)]))),
42287                                                     ITE(Bop(Or,
42288                                                             Bop(In,
42289                                                                 Var("Rd",
42290                                                                     F4),
42291                                                                 SL[LW(13,
42292                                                                       4),
42293                                                                    LW(15,
42294                                                                       4)]),
42295                                                             Bop(Or,
42296                                                                 Bop(In,
42297                                                                     Var("Rn",
42298                                                                         F4),
42299                                                                     SL[LW(13,
42300                                                                           4),
42301                                                                        LW(15,
42302                                                                           4)]),
42303                                                                 Mop(Not,
42304                                                                     Bop(And,
42305                                                                         EQ(Mop(Cast
42306                                                                                  F1,
42307                                                                                LL[bVar"b'26"]),
42308                                                                            LW(0,
42309                                                                               1)),
42310                                                                         EQ(Mop(Cast
42311                                                                                  (FTy 2),
42312                                                                                LL[bVar"b'5",
42313                                                                                   bVar"b'4"]),
42314                                                                            LW(0,
42315                                                                               2)))))),
42316                                                         Apply
42317                                                           (Call
42318                                                              ("DECODE_UNPREDICTABLE",
42319                                                               ATy(qTy,qTy),
42320                                                               TP[Var("mc",
42321                                                                      CTy"MachineCode"),
42322                                                                  LS
42323                                                                   "Saturate16"]),
42324                                                            qVar"s"),
42325                                                         qVar"s")],
42326                                                  TP[Apply
42327                                                       (Call
42328                                                          ("Skip",
42329                                                           ATy(qTy,
42330                                                               CTy"instruction"),
42331                                                           LU),qVar"s"),
42332                                                     qVar"s"]))))))),
42333                         (Bop(And,bVar"b'25",
42334                              Bop(And,bVar"b'24",
42335                                  Bop(And,Mop(Not,bVar"b'22"),
42336                                      Mop(Not,bVar"b'20")))),
42337                          Let(Var("Rn",F4),
42338                              Mop(Cast F4,
42339                                  LL[bVar"b'19",bVar"b'18",bVar"b'17",
42340                                     bVar"b'16"]),
42341                              Let(Var("sat_imm",FTy 5),
42342                                  Mop(Cast(FTy 5),
42343                                      LL[bVar"b'4",bVar"b'3",bVar"b'2",
42344                                         bVar"b'1",bVar"b'0"]),
42345                                  Let(Var("Rd",F4),
42346                                      Mop(Cast F4,
42347                                          LL[bVar"b'11",bVar"b'10",
42348                                             bVar"b'9",bVar"b'8"]),
42349                                      Let(TP[Var("v",F4),qVar"s"],
42350                                          Apply
42351                                            (Call
42352                                               ("ThumbCondition",
42353                                                ATy(qTy,PTy(F4,qTy)),LU),
42354                                             qVar"state"),
42355                                          Let(TP[bVar"v",qVar"s"],
42356                                              Apply
42357                                                (Call
42358                                                   ("Do",
42359                                                    ATy(qTy,PTy(bTy,qTy)),
42360                                                    TP[Var("v",F4),
42361                                                       Apply
42362                                                         (Call
42363                                                            ("HaveThumb2",
42364                                                             ATy(qTy,bTy),
42365                                                             LU),qVar"s")]),
42366                                                 qVar"s"),
42367                                              ITE(bVar"v",
42368                                                  TP[Let(bVar"unsigned",
42369                                                         EQ(Mop(Cast F1,
42370                                                                LL[bVar"b'23"]),
42371                                                            LW(1,1)),
42372                                                         Let(TP[Var("shift_t",
42373                                                                    CTy"SRType"),
42374                                                                nVar"shift_n"],
42375                                                             Call
42376                                                               ("DecodeImmShift",
42377                                                                PTy(CTy"SRType",
42378                                                                    nTy),
42379                                                                TP[CC[Mop(Cast
42380                                                                            F1,
42381                                                                          LL[bVar"b'21"]),
42382                                                                      LW(0,
42383                                                                         1)],
42384                                                                   CC[Mop(Cast
42385                                                                            (FTy 3),
42386                                                                          LL[bVar"b'14",
42387                                                                             bVar"b'13",
42388                                                                             bVar"b'12"]),
42389                                                                      Mop(Cast
42390                                                                            (FTy 2),
42391                                                                          LL[bVar"b'7",
42392                                                                             bVar"b'6"])]]),
42393                                                             Call
42394                                                               ("Media",
42395                                                                CTy"instruction",
42396                                                                Call
42397                                                                  ("Saturate",
42398                                                                   CTy"Media",
42399                                                                   TP[Var("shift_t",
42400                                                                          CTy"SRType"),
42401                                                                      nVar"shift_n",
42402                                                                      ITE(bVar"unsigned",
42403                                                                          Mop(Cast
42404                                                                                nTy,
42405                                                                              Var("sat_imm",
42406                                                                                  FTy 5)),
42407                                                                          Bop(Add,
42408                                                                              Mop(Cast
42409                                                                                    nTy,
42410                                                                                  Var("sat_imm",
42411                                                                                      FTy 5)),
42412                                                                              LN
42413                                                                               1)),
42414                                                                      bVar"unsigned",
42415                                                                      Var("Rd",
42416                                                                          F4),
42417                                                                      Var("Rn",
42418                                                                          F4)])))),
42419                                                     ITE(Bop(Or,
42420                                                             Bop(In,
42421                                                                 Var("Rd",
42422                                                                     F4),
42423                                                                 SL[LW(13,
42424                                                                       4),
42425                                                                    LW(15,
42426                                                                       4)]),
42427                                                             Bop(Or,
42428                                                                 Bop(In,
42429                                                                     Var("Rn",
42430                                                                         F4),
42431                                                                     SL[LW(13,
42432                                                                           4),
42433                                                                        LW(15,
42434                                                                           4)]),
42435                                                                 Mop(Not,
42436                                                                     Bop(And,
42437                                                                         EQ(Mop(Cast
42438                                                                                  F1,
42439                                                                                LL[bVar"b'26"]),
42440                                                                            LW(0,
42441                                                                               1)),
42442                                                                         EQ(Mop(Cast
42443                                                                                  F1,
42444                                                                                LL[bVar"b'5"]),
42445                                                                            LW(0,
42446                                                                               1)))))),
42447                                                         Apply
42448                                                           (Call
42449                                                              ("DECODE_UNPREDICTABLE",
42450                                                               ATy(qTy,qTy),
42451                                                               TP[Var("mc",
42452                                                                      CTy"MachineCode"),
42453                                                                  LS
42454                                                                   "Saturate"]),
42455                                                            qVar"s"),
42456                                                         qVar"s")],
42457                                                  TP[Apply
42458                                                       (Call
42459                                                          ("Skip",
42460                                                           ATy(qTy,
42461                                                               CTy"instruction"),
42462                                                           LU),qVar"s"),
42463                                                     qVar"s"]))))))),
42464                         (Bop(And,bVar"b'25",
42465                              Bop(And,bVar"b'24",
42466                                  Bop(And,bVar"b'22",
42467                                      Bop(And,Mop(Not,bVar"b'21"),
42468                                          Mop(Not,bVar"b'20"))))),
42469                          Let(Var("Rn",F4),
42470                              Mop(Cast F4,
42471                                  LL[bVar"b'19",bVar"b'18",bVar"b'17",
42472                                     bVar"b'16"]),
42473                              Let(Var("Rd",F4),
42474                                  Mop(Cast F4,
42475                                      LL[bVar"b'11",bVar"b'10",bVar"b'9",
42476                                         bVar"b'8"]),
42477                                  Let(TP[Var("v",F4),qVar"s"],
42478                                      Apply
42479                                        (Call
42480                                           ("ThumbCondition",
42481                                            ATy(qTy,PTy(F4,qTy)),LU),
42482                                         qVar"state"),
42483                                      Let(TP[bVar"v",qVar"s"],
42484                                          Apply
42485                                            (Call
42486                                               ("Do",
42487                                                ATy(qTy,PTy(bTy,qTy)),
42488                                                TP[Var("v",F4),
42489                                                   Apply
42490                                                     (Call
42491                                                        ("HaveThumb2",
42492                                                         ATy(qTy,bTy),LU),
42493                                                      qVar"s")]),qVar"s"),
42494                                          ITE(bVar"v",
42495                                              Let(nVar"widthminus1",
42496                                                  Mop(Cast nTy,
42497                                                      Mop(Cast(FTy 5),
42498                                                          LL[bVar"b'4",
42499                                                             bVar"b'3",
42500                                                             bVar"b'2",
42501                                                             bVar"b'1",
42502                                                             bVar"b'0"])),
42503                                                  Let(nVar"lsbit",
42504                                                      Mop(Cast nTy,
42505                                                          CC[Mop(Cast
42506                                                                   (FTy 3),
42507                                                                 LL[bVar"b'14",
42508                                                                    bVar"b'13",
42509                                                                    bVar"b'12"]),
42510                                                             Mop(Cast
42511                                                                   (FTy 2),
42512                                                                 LL[bVar"b'7",
42513                                                                    bVar"b'6"])]),
42514                                                      TP[Call
42515                                                           ("Media",
42516                                                            CTy"instruction",
42517                                                            Call
42518                                                              ("BitFieldExtract",
42519                                                               CTy"Media",
42520                                                               TP[EQ(Mop(Cast
42521                                                                           F1,
42522                                                                         LL[bVar"b'23"]),
42523                                                                     LW(1,
42524                                                                        1)),
42525                                                                  Var("Rd",
42526                                                                      F4),
42527                                                                  Var("Rn",
42528                                                                      F4),
42529                                                                  nVar"lsbit",
42530                                                                  nVar"widthminus1"])),
42531                                                         ITE(Bop(Or,
42532                                                                 Bop(In,
42533                                                                     Var("Rd",
42534                                                                         F4),
42535                                                                     SL[LW(13,
42536                                                                           4),
42537                                                                        LW(15,
42538                                                                           4)]),
42539                                                                 Bop(Or,
42540                                                                     Bop(In,
42541                                                                         Var("Rn",
42542                                                                             F4),
42543                                                                         SL[LW(13,
42544                                                                               4),
42545                                                                            LW(15,
42546                                                                               4)]),
42547                                                                     Bop(Or,
42548                                                                         Bop(Lt,
42549                                                                             LN
42550                                                                              31,
42551                                                                             Bop(Add,
42552                                                                                 nVar"lsbit",
42553                                                                                 nVar"widthminus1")),
42554                                                                         Mop(Not,
42555                                                                             Bop(And,
42556                                                                                 EQ(Mop(Cast
42557                                                                                          F1,
42558                                                                                        LL[bVar"b'26"]),
42559                                                                                    LW(0,
42560                                                                                       1)),
42561                                                                                 EQ(Mop(Cast
42562                                                                                          F1,
42563                                                                                        LL[bVar"b'5"]),
42564                                                                                    LW(0,
42565                                                                                       1))))))),
42566                                                             Apply
42567                                                               (Call
42568                                                                  ("DECODE_UNPREDICTABLE",
42569                                                                   ATy(qTy,
42570                                                                       qTy),
42571                                                                   TP[Var("mc",
42572                                                                          CTy"MachineCode"),
42573                                                                      LS
42574                                                                       "BitFieldExtract"]),
42575                                                                qVar"s"),
42576                                                             qVar"s")])),
42577                                              TP[Apply
42578                                                   (Call
42579                                                      ("Skip",
42580                                                       ATy(qTy,
42581                                                           CTy"instruction"),
42582                                                       LU),qVar"s"),
42583                                                 qVar"s"])))))),
42584                         (Bop(And,bVar"b'25",
42585                              Bop(And,bVar"b'24",
42586                                  Bop(And,Mop(Not,bVar"b'23"),
42587                                      Bop(And,bVar"b'22",
42588                                          Bop(And,bVar"b'21",
42589                                              Mop(Not,bVar"b'20")))))),
42590                          Let(Var("Rn",F4),
42591                              Mop(Cast F4,
42592                                  LL[bVar"b'19",bVar"b'18",bVar"b'17",
42593                                     bVar"b'16"]),
42594                              Let(Var("Rd",F4),
42595                                  Mop(Cast F4,
42596                                      LL[bVar"b'11",bVar"b'10",bVar"b'9",
42597                                         bVar"b'8"]),
42598                                  Let(TP[Var("v",F4),qVar"s"],
42599                                      Apply
42600                                        (Call
42601                                           ("ThumbCondition",
42602                                            ATy(qTy,PTy(F4,qTy)),LU),
42603                                         qVar"state"),
42604                                      Let(TP[bVar"v",qVar"s"],
42605                                          Apply
42606                                            (Call
42607                                               ("Do",
42608                                                ATy(qTy,PTy(bTy,qTy)),
42609                                                TP[Var("v",F4),
42610                                                   Apply
42611                                                     (Call
42612                                                        ("HaveThumb2",
42613                                                         ATy(qTy,bTy),LU),
42614                                                      qVar"s")]),qVar"s"),
42615                                          ITE(bVar"v",
42616                                              Let(nVar"msbit",
42617                                                  Mop(Cast nTy,
42618                                                      Mop(Cast(FTy 5),
42619                                                          LL[bVar"b'4",
42620                                                             bVar"b'3",
42621                                                             bVar"b'2",
42622                                                             bVar"b'1",
42623                                                             bVar"b'0"])),
42624                                                  Let(nVar"lsbit",
42625                                                      Mop(Cast nTy,
42626                                                          CC[Mop(Cast
42627                                                                   (FTy 3),
42628                                                                 LL[bVar"b'14",
42629                                                                    bVar"b'13",
42630                                                                    bVar"b'12"]),
42631                                                             Mop(Cast
42632                                                                   (FTy 2),
42633                                                                 LL[bVar"b'7",
42634                                                                    bVar"b'6"])]),
42635                                                      TP[Call
42636                                                           ("Media",
42637                                                            CTy"instruction",
42638                                                            Call
42639                                                              ("BitFieldClearOrInsert",
42640                                                               CTy"Media",
42641                                                               TP[Var("Rd",
42642                                                                      F4),
42643                                                                  Var("Rn",
42644                                                                      F4),
42645                                                                  nVar"lsbit",
42646                                                                  nVar"msbit"])),
42647                                                         ITE(Bop(Or,
42648                                                                 Bop(In,
42649                                                                     Var("Rd",
42650                                                                         F4),
42651                                                                     SL[LW(13,
42652                                                                           4),
42653                                                                        LW(15,
42654                                                                           4)]),
42655                                                                 Bop(Or,
42656                                                                     EQ(Var("Rn",
42657                                                                            F4),
42658                                                                        LW(13,
42659                                                                           4)),
42660                                                                     Bop(Or,
42661                                                                         Bop(Lt,
42662                                                                             nVar"msbit",
42663                                                                             nVar"lsbit"),
42664                                                                         Mop(Not,
42665                                                                             Bop(And,
42666                                                                                 EQ(Mop(Cast
42667                                                                                          F1,
42668                                                                                        LL[bVar"b'26"]),
42669                                                                                    LW(0,
42670                                                                                       1)),
42671                                                                                 EQ(Mop(Cast
42672                                                                                          F1,
42673                                                                                        LL[bVar"b'5"]),
42674                                                                                    LW(0,
42675                                                                                       1))))))),
42676                                                             Apply
42677                                                               (Call
42678                                                                  ("DECODE_UNPREDICTABLE",
42679                                                                   ATy(qTy,
42680                                                                       qTy),
42681                                                                   TP[Var("mc",
42682                                                                          CTy"MachineCode"),
42683                                                                      LS
42684                                                                       "BitFieldClearOrInsert"]),
42685                                                                qVar"s"),
42686                                                             qVar"s")])),
42687                                              TP[Apply
42688                                                   (Call
42689                                                      ("Skip",
42690                                                       ATy(qTy,
42691                                                           CTy"instruction"),
42692                                                       LU),qVar"s"),
42693                                                 qVar"s"]))))))],
42694                        Apply
42695                          (Call
42696                             ("UndefinedThumb",
42697                              ATy(qTy,PTy(CTy"instruction",qTy)),LU),
42698                           qVar"state")))],
42699                  Apply
42700                    (Call
42701                       ("UndefinedThumb",
42702                        ATy(qTy,PTy(CTy"instruction",qTy)),LU),qVar"state"))))))
42703;
42704val Decode_def = Def
42705  ("Decode",Var("mc",CTy"MachineCode"),
42706   Close
42707     (qVar"state",
42708      CS(Var("mc",CTy"MachineCode"),
42709         [(Call("ARM",CTy"MachineCode",Var("w",F32)),
42710           Apply
42711             (Call
42712                ("DecodeARM",ATy(qTy,PTy(CTy"instruction",qTy)),
42713                 Var("w",F32)),qVar"state")),
42714          (Call("Thumb",CTy"MachineCode",Var("h",F16)),
42715           Apply
42716             (Call
42717                ("DecodeThumb",ATy(qTy,PTy(CTy"instruction",qTy)),
42718                 Var("h",F16)),qVar"state")),
42719          (Call("ThumbEE",CTy"MachineCode",Var("h",F16)),
42720           Apply
42721             (Call
42722                ("DecodeThumbEE",ATy(qTy,PTy(CTy"instruction",qTy)),
42723                 Var("h",F16)),qVar"state")),
42724          (Call("Thumb2",CTy"MachineCode",Var("hs",PTy(F16,F16))),
42725           Apply
42726             (Call
42727                ("DecodeThumb2",ATy(qTy,PTy(CTy"instruction",qTy)),
42728                 Var("hs",PTy(F16,F16))),qVar"state")),
42729          (Call("BadCode",CTy"MachineCode",sVar"s"),
42730           Apply
42731             (Call
42732                ("raise'exception",ATy(qTy,PTy(CTy"instruction",qTy)),
42733                 Call("UNPREDICTABLE",CTy"exception",sVar"s")),qVar"state"))])))
42734;
42735val Next_def = Def
42736  ("Next",qVar"state",
42737   Let(TP[Var("v",CTy"MachineCode"),qVar"s"],
42738       Apply
42739         (Const("Fetch",ATy(qTy,PTy(CTy"MachineCode",qTy))),qVar"state"),
42740       Apply
42741         (Call("ITAdvance",ATy(qTy,qTy),LU),
42742          Let(TP[Var("v",CTy"instruction"),qVar"s"],
42743              Apply
42744                (Call
42745                   ("Decode",ATy(qTy,PTy(CTy"instruction",qTy)),
42746                    Var("v",CTy"MachineCode")),qVar"s"),
42747              Apply
42748                (Call("Run",ATy(qTy,qTy),Var("v",CTy"instruction")),
42749                 qVar"s")))))
42750;
42751val EncodeARMImmediate_aux_def = Def
42752  ("EncodeARMImmediate_aux",TP[Var("n",F4),Var("x",F32)],
42753   ITB([(EQ(EX(Var("x",F32),LN 31,LN 8,FTy 24),LW(0,24)),
42754         Mop(Some,
42755             CC[Bop(Sub,LW(15,4),Var("n",F4)),
42756                EX(Var("x",F32),LN 7,LN 0,F8)])),
42757        (EQ(Var("n",F4),LW(0,4)),LO(FTy 12))],
42758       Call
42759         ("EncodeARMImmediate_aux",OTy(FTy 12),
42760          TP[Bop(Sub,Var("n",F4),LW(1,4)),Bop(Rol,Var("x",F32),LN 2)])))
42761;
42762val EncodeARMImmediate_def = Def
42763  ("EncodeARMImmediate",Var("x",F32),
42764   Call("EncodeARMImmediate_aux",OTy(FTy 12),TP[LW(15,4),Var("x",F32)]))
42765;
42766val EncodeImmShift_def = Def
42767  ("EncodeImmShift",TP[Var("shift_t",CTy"SRType"),nVar"shift_n"],
42768   CS(Var("shift_t",CTy"SRType"),
42769      [(LC("SRType_LSL",CTy"SRType"),
42770        TP[LW(0,2),Mop(Cast(FTy 5),nVar"shift_n")]),
42771       (LC("SRType_LSR",CTy"SRType"),
42772        TP[LW(1,2),
42773           ITE(EQ(nVar"shift_n",LN 32),LW(0,5),
42774               Mop(Cast(FTy 5),nVar"shift_n"))]),
42775       (LC("SRType_ASR",CTy"SRType"),
42776        TP[LW(2,2),
42777           ITE(EQ(nVar"shift_n",LN 32),LW(0,5),
42778               Mop(Cast(FTy 5),nVar"shift_n"))]),
42779       (LC("SRType_ROR",CTy"SRType"),
42780        TP[LW(3,2),Mop(Cast(FTy 5),nVar"shift_n")]),
42781       (LC("SRType_RRX",CTy"SRType"),TP[LW(3,2),LW(0,5)])]))
42782;
42783val EncodeRegShift_def = Def
42784  ("EncodeRegShift",Var("shift_t",CTy"SRType"),
42785   CS(Var("shift_t",CTy"SRType"),
42786      [(LC("SRType_LSL",CTy"SRType"),LW(0,2)),
42787       (LC("SRType_LSR",CTy"SRType"),LW(1,2)),
42788       (LC("SRType_ASR",CTy"SRType"),LW(2,2)),
42789       (LC("SRType_ROR",CTy"SRType"),LW(3,2)),
42790       (LC("SRType_RRX",CTy"SRType"),LX(FTy 2))]))
42791;
42792val EncodeAddSubOpc_def = Def
42793  ("EncodeAddSubOpc",Var("opc",FTy 2),
42794   CS(Var("opc",FTy 2),
42795      [(LW(0,2),LW(1,3)),(LW(1,2),LW(2,3)),(LW(2,2),LW(6,3)),
42796       (LW(3,2),LW(5,3))]))
42797;
42798val EncodeVFPImmediate_def = Def
42799  ("EncodeVFPImmediate",TP[Var("imm64",F64),bVar"single_register"],
42800   ITB([(bVar"single_register",
42801         ITE(Bop(And,EQ(EX(Var("imm64",F64),LN 18,LN 0,FTy 19),LW(0,19)),
42802                 Bop(And,
42803                     Bop(In,EX(Var("imm64",F64),LN 29,LN 25,FTy 5),
42804                         SL[LW(0,5),LW(31,5)]),
42805                     Bop(And,
42806                         Mop(Not,
42807                             EQ(Bop(Bit,Var("imm64",F64),LN 25),
42808                                Bop(Bit,Var("imm64",F64),LN 30))),
42809                         EQ(EX(Var("imm64",F64),LN 63,LN 32,F32),LW(0,32))))),
42810             Mop(Some,
42811                 CC[EX(Var("imm64",F64),LN 31,LN 31,F1),
42812                    EX(Var("imm64",F64),LN 25,LN 25,F1),
42813                    EX(Var("imm64",F64),LN 24,LN 19,FTy 6)]),LO F8)),
42814        (Bop(And,EQ(EX(Var("imm64",F64),LN 47,LN 0,FTy 48),LW(0,48)),
42815             Bop(And,
42816                 Bop(In,EX(Var("imm64",F64),LN 61,LN 54,F8),
42817                     SL[LW(0,8),LW(255,8)]),
42818                 Mop(Not,
42819                     EQ(Bop(Bit,Var("imm64",F64),LN 61),
42820                        Bop(Bit,Var("imm64",F64),LN 62))))),
42821         Mop(Some,
42822             CC[EX(Var("imm64",F64),LN 63,LN 63,F1),
42823                EX(Var("imm64",F64),LN 54,LN 54,F1),
42824                EX(Var("imm64",F64),LN 53,LN 48,FTy 6)]))],LO F8))
42825;
42826val EncodeVFPReg_def = Def
42827  ("EncodeVFPReg",TP[Var("d",FTy 5),bVar"single_register"],
42828   ITE(bVar"single_register",
42829       TP[EX(Var("d",FTy 5),LN 0,LN 0,F1),EX(Var("d",FTy 5),LN 4,LN 1,F4)],
42830       TP[EX(Var("d",FTy 5),LN 4,LN 4,F1),EX(Var("d",FTy 5),LN 3,LN 0,F4)]))
42831;
42832val e_branch_def = Def
42833  ("e_branch",TP[Var("c",F4),Var("ast",CTy"Branch")],
42834   CS(Var("ast",CTy"Branch"),
42835      [(Call("BranchTarget",CTy"Branch",Var("imm32",F32)),
42836        ITE(Bop(And,Bop(Le,Mop(Neg,LW(33554432,32)),Var("imm32",F32)),
42837                Bop(And,Bop(Le,Var("imm32",F32),LW(33554428,32)),
42838                    Call("Aligned",bTy,TP[Var("imm32",F32),LN 4]))),
42839            Call
42840              ("ARM",CTy"MachineCode",
42841               CC[Var("c",F4),LW(10,4),
42842                  EX(Var("imm32",F32),LN 25,LN 2,FTy 24)]),
42843            Call("BadCode",CTy"MachineCode",LS"B: bad offset"))),
42844       (Call("BranchExchange",CTy"Branch",Var("Rm",F4)),
42845        Call
42846          ("ARM",CTy"MachineCode",
42847           CC[Var("c",F4),LW(1245169,24),Var("Rm",F4)])),
42848       (Call
42849          ("BranchLinkExchangeImmediate",CTy"Branch",
42850           TP[Var("targetInstrSet",CTy"InstrSet"),Var("imm32",F32)]),
42851        ITE(EQ(Var("c",F4),LW(14,4)),
42852            ITB([(EQ(Var("targetInstrSet",CTy"InstrSet"),
42853                     LC("InstrSet_ARM",CTy"InstrSet")),
42854                  ITE(Bop(And,
42855                          Bop(Le,Mop(Neg,LW(33554432,32)),Var("imm32",F32)),
42856                          Bop(And,
42857                              Bop(Le,Var("imm32",F32),LW(33554428,32)),
42858                              Call
42859                                ("Aligned",bTy,TP[Var("imm32",F32),LN 4]))),
42860                      Call
42861                        ("ARM",CTy"MachineCode",
42862                         CC[Var("c",F4),LW(11,4),
42863                            EX(Var("imm32",F32),LN 25,LN 2,FTy 24)]),
42864                      Call("BadCode",CTy"MachineCode",LS"BL: bad offset"))),
42865                 (Bop(And,
42866                      Bop(Le,Mop(Neg,LW(33554432,32)),Var("imm32",F32)),
42867                      Bop(And,Bop(Le,Var("imm32",F32),LW(33554430,32)),
42868                          Call("Aligned",bTy,TP[Var("imm32",F32),LN 2]))),
42869                  Call
42870                    ("ARM",CTy"MachineCode",
42871                     CC[LW(125,7),EX(Var("imm32",F32),LN 1,LN 1,F1),
42872                        EX(Var("imm32",F32),LN 25,LN 2,FTy 24)]))],
42873                Call
42874                  ("BadCode",CTy"MachineCode",
42875                   LS"BLX (immediate): bad offset")),
42876            Call("BadCode",CTy"MachineCode",LS"BLX (immediate)"))),
42877       (Call("BranchLinkExchangeRegister",CTy"Branch",Var("Rm",F4)),
42878        Call
42879          ("ARM",CTy"MachineCode",
42880           CC[Var("c",F4),LW(1245171,24),Var("Rm",F4)])),
42881       (Call
42882          ("CompareBranch",CTy"Branch",
42883           TP[bVar"nonzero",Var("n",F4),Var("imm32",F32)]),
42884        Call("BadCode",CTy"MachineCode",LS"CBZ")),
42885       (Call
42886          ("TableBranchByte",CTy"Branch",
42887           TP[bVar"is_tbh",Var("Rm",F4),Var("Rn",F4)]),
42888        Call("BadCode",CTy"MachineCode",LS"CBZ")),
42889       (Call("CheckArray",CTy"Branch",TP[Var("Rm",F4),Var("n",F4)]),
42890        Call("BadCode",CTy"MachineCode",LS"CHKA")),
42891       (Call
42892          ("HandlerBranchLink",CTy"Branch",
42893           TP[bVar"generate_link",Var("handler_offset",F32)]),
42894        Call("BadCode",CTy"MachineCode",LS"HB{L}")),
42895       (Call
42896          ("HandlerBranchLinkParameter",CTy"Branch",
42897           TP[Var("imm32",F32),Var("handler_offset",F32)]),
42898        Call("BadCode",CTy"MachineCode",LS"HBLP")),
42899       (Call
42900          ("HandlerBranchParameter",CTy"Branch",
42901           TP[Var("imm32",F32),Var("handler_offset",F32)]),
42902        Call("BadCode",CTy"MachineCode",LS"CBZ"))]))
42903;
42904val e_vfp_def = Def
42905  ("e_vfp",TP[Var("c",F4),Var("ast",CTy"VFP")],
42906   CS(Var("ast",CTy"VFP"),
42907      [(Call("vmrs",CTy"VFP",Var("t",F4)),
42908        Call
42909          ("ARM",CTy"MachineCode",
42910           CC[Var("c",F4),LW(3825,12),Var("t",F4),LW(2576,12)])),
42911       (Call("vmsr",CTy"VFP",Var("t",F4)),
42912        Call
42913          ("ARM",CTy"MachineCode",
42914           CC[Var("c",F4),LW(3809,12),Var("t",F4),LW(2576,12)])),
42915       (Call
42916          ("vcmp",CTy"VFP",
42917           TP[bVar"dp_operation",Var("d",FTy 5),Mop(Some,Var("m",FTy 5))]),
42918        Let(TP[Var("D",F1),Var("Vd",F4)],
42919            Call
42920              ("EncodeVFPReg",PTy(F1,F4),
42921               TP[Var("d",FTy 5),Mop(Not,bVar"dp_operation")]),
42922            Let(TP[Var("M",F1),Var("Vm",F4)],
42923                Call
42924                  ("EncodeVFPReg",PTy(F1,F4),
42925                   TP[Var("m",FTy 5),Mop(Not,bVar"dp_operation")]),
42926                Call
42927                  ("ARM",CTy"MachineCode",
42928                   CC[Var("c",F4),LW(29,5),Var("D",F1),LW(52,6),
42929                      Var("Vd",F4),LW(5,3),
42930                      Mop(Cast F1,bVar"dp_operation"),LW(3,2),Var("M",F1),
42931                      LW(0,1),Var("Vm",F4)])))),
42932       (Call
42933          ("vcmp",CTy"VFP",TP[bVar"dp_operation",Var("d",FTy 5),LO(FTy 5)]),
42934        Let(TP[Var("D",F1),Var("Vd",F4)],
42935            Call
42936              ("EncodeVFPReg",PTy(F1,F4),
42937               TP[Var("d",FTy 5),Mop(Not,bVar"dp_operation")]),
42938            Call
42939              ("ARM",CTy"MachineCode",
42940               CC[Var("c",F4),LW(29,5),Var("D",F1),LW(53,6),Var("Vd",F4),
42941                  LW(5,3),Mop(Cast F1,bVar"dp_operation"),LW(192,8)]))),
42942       (Call
42943          ("vcvt_float",CTy"VFP",
42944           TP[bVar"double_to_single",Var("d",FTy 5),Var("m",FTy 5)]),
42945        Let(TP[Var("D",F1),Var("Vd",F4)],
42946            Call
42947              ("EncodeVFPReg",PTy(F1,F4),
42948               TP[Var("d",FTy 5),bVar"double_to_single"]),
42949            Let(TP[Var("M",F1),Var("Vm",F4)],
42950                Call
42951                  ("EncodeVFPReg",PTy(F1,F4),
42952                   TP[Var("m",FTy 5),Mop(Not,bVar"double_to_single")]),
42953                Call
42954                  ("ARM",CTy"MachineCode",
42955                   CC[Var("c",F4),LW(29,5),Var("D",F1),LW(55,6),
42956                      Var("Vd",F4),LW(5,3),
42957                      Mop(Cast F1,bVar"double_to_single"),LW(3,2),
42958                      Var("M",F1),LW(0,1),Var("Vm",F4)])))),
42959       (Call
42960          ("vcvt_from_integer",CTy"VFP",
42961           TP[bVar"dp_operation",bVar"unsigned",Var("d",FTy 5),
42962              Var("m",FTy 5)]),
42963        Let(TP[Var("D",F1),Var("Vd",F4)],
42964            Call
42965              ("EncodeVFPReg",PTy(F1,F4),
42966               TP[Var("d",FTy 5),Mop(Not,bVar"dp_operation")]),
42967            Let(TP[Var("M",F1),Var("Vm",F4)],
42968                Call("EncodeVFPReg",PTy(F1,F4),TP[Var("m",FTy 5),LT]),
42969                Call
42970                  ("ARM",CTy"MachineCode",
42971                   CC[Var("c",F4),LW(29,5),Var("D",F1),LW(56,6),
42972                      Var("Vd",F4),LW(5,3),
42973                      Mop(Cast F1,bVar"dp_operation"),
42974                      Mop(Cast F1,Mop(Not,bVar"unsigned")),LW(1,1),
42975                      Var("M",F1),LW(0,1),Var("Vm",F4)])))),
42976       (Call
42977          ("vcvt_to_integer",CTy"VFP",
42978           TP[bVar"dp_operation",bVar"unsigned",bVar"round_zero",
42979              Var("d",FTy 5),Var("m",FTy 5)]),
42980        Let(TP[Var("D",F1),Var("Vd",F4)],
42981            Call("EncodeVFPReg",PTy(F1,F4),TP[Var("d",FTy 5),LT]),
42982            Let(TP[Var("M",F1),Var("Vm",F4)],
42983                Call
42984                  ("EncodeVFPReg",PTy(F1,F4),
42985                   TP[Var("m",FTy 5),Mop(Not,bVar"dp_operation")]),
42986                Call
42987                  ("ARM",CTy"MachineCode",
42988                   CC[Var("c",F4),LW(29,5),Var("D",F1),LW(30,5),
42989                      Mop(Cast F1,Mop(Not,bVar"unsigned")),Var("Vd",F4),
42990                      LW(5,3),Mop(Cast F1,bVar"dp_operation"),
42991                      Mop(Cast F1,bVar"round_zero"),LW(1,1),Var("M",F1),
42992                      LW(0,1),Var("Vm",F4)])))),
42993       (Call
42994          ("vmov_imm",CTy"VFP",
42995           TP[bVar"single_register",Var("d",FTy 5),Var("imm64",F64)]),
42996        CS(Call
42997             ("EncodeVFPImmediate",OTy F8,
42998              TP[Var("imm64",F64),bVar"single_register"]),
42999           [(Mop(Some,Var("v#0",F8)),
43000             Let(TP[Var("D",F1),Var("Vd",F4)],
43001                 Call
43002                   ("EncodeVFPReg",PTy(F1,F4),
43003                    TP[Var("d",FTy 5),bVar"single_register"]),
43004                 Call
43005                   ("ARM",CTy"MachineCode",
43006                    CC[Var("c",F4),LW(29,5),Var("D",F1),LW(3,2),
43007                       EX(Var("v#0",F8),LN 7,LN 4,F4),Var("Vd",F4),
43008                       LW(5,3),
43009                       Mop(Cast F1,Mop(Not,bVar"single_register")),
43010                       LW(0,4),EX(Var("v#0",F8),LN 3,LN 0,F4)]))),
43011            (LO F8,Call("BadCode",CTy"MachineCode",LS"VMOV (immediate)"))])),
43012       (Call
43013          ("vmov",CTy"VFP",
43014           TP[bVar"single_register",Var("d",FTy 5),Var("m",FTy 5)]),
43015        Let(TP[Var("D",F1),Var("Vd",F4)],
43016            Call
43017              ("EncodeVFPReg",PTy(F1,F4),
43018               TP[Var("d",FTy 5),bVar"single_register"]),
43019            Let(TP[Var("M",F1),Var("Vm",F4)],
43020                Call
43021                  ("EncodeVFPReg",PTy(F1,F4),
43022                   TP[Var("m",FTy 5),bVar"single_register"]),
43023                Call
43024                  ("ARM",CTy"MachineCode",
43025                   CC[Var("c",F4),LW(29,5),Var("D",F1),LW(48,6),
43026                      Var("Vd",F4),LW(5,3),
43027                      Mop(Cast F1,Mop(Not,bVar"single_register")),LW(1,2),
43028                      Var("M",F1),LW(0,1),Var("Vm",F4)])))),
43029       (Call
43030          ("vmov_single",CTy"VFP",
43031           TP[bVar"to_arm_register",Var("t",F4),Var("n",FTy 5)]),
43032        Let(TP[Var("N",F1),Var("Vn",F4)],
43033            Call("EncodeVFPReg",PTy(F1,F4),TP[Var("n",FTy 5),LT]),
43034            Call
43035              ("ARM",CTy"MachineCode",
43036               CC[Var("c",F4),LW(112,7),
43037                  Mop(Cast F1,bVar"to_arm_register"),Var("Vn",F4),
43038                  Var("t",F4),LW(10,4),Var("N",F1),LW(16,7)]))),
43039       (Call
43040          ("vmov_two_singles",CTy"VFP",
43041           TP[bVar"to_arm_registers",Var("t",F4),Var("t2",F4),
43042              Var("m",FTy 5)]),
43043        Let(TP[Var("M",F1),Var("Vm",F4)],
43044            Call("EncodeVFPReg",PTy(F1,F4),TP[Var("m",FTy 5),LT]),
43045            Call
43046              ("ARM",CTy"MachineCode",
43047               CC[Var("c",F4),LW(98,7),
43048                  Mop(Cast F1,bVar"to_arm_registers"),Var("t2",F4),
43049                  Var("t",F4),LW(40,6),Var("M",F1),LW(1,1),Var("Vm",F4)]))),
43050       (Call
43051          ("vmov_double",CTy"VFP",
43052           TP[bVar"to_arm_registers",Var("t",F4),Var("t2",F4),
43053              Var("m",FTy 5)]),
43054        Let(TP[Var("M",F1),Var("Vm",F4)],
43055            Call("EncodeVFPReg",PTy(F1,F4),TP[Var("m",FTy 5),LF]),
43056            Call
43057              ("ARM",CTy"MachineCode",
43058               CC[Var("c",F4),LW(98,7),
43059                  Mop(Cast F1,bVar"to_arm_registers"),Var("t2",F4),
43060                  Var("t",F4),LW(44,6),Var("M",F1),LW(1,1),Var("Vm",F4)]))),
43061       (Call
43062          ("vabs",CTy"VFP",
43063           TP[bVar"dp_operation",Var("d",FTy 5),Var("m",FTy 5)]),
43064        Let(TP[Var("D",F1),Var("Vd",F4)],
43065            Call
43066              ("EncodeVFPReg",PTy(F1,F4),
43067               TP[Var("d",FTy 5),Mop(Not,bVar"dp_operation")]),
43068            Let(TP[Var("M",F1),Var("Vm",F4)],
43069                Call
43070                  ("EncodeVFPReg",PTy(F1,F4),
43071                   TP[Var("m",FTy 5),Mop(Not,bVar"dp_operation")]),
43072                Call
43073                  ("ARM",CTy"MachineCode",
43074                   CC[Var("c",F4),LW(29,5),Var("D",F1),LW(48,6),
43075                      Var("Vd",F4),LW(5,3),
43076                      Mop(Cast F1,bVar"dp_operation"),LW(3,2),Var("M",F1),
43077                      LW(0,1),Var("Vm",F4)])))),
43078       (Call
43079          ("vneg",CTy"VFP",
43080           TP[bVar"dp_operation",Var("d",FTy 5),Var("m",FTy 5)]),
43081        Let(TP[Var("D",F1),Var("Vd",F4)],
43082            Call
43083              ("EncodeVFPReg",PTy(F1,F4),
43084               TP[Var("d",FTy 5),Mop(Not,bVar"dp_operation")]),
43085            Let(TP[Var("M",F1),Var("Vm",F4)],
43086                Call
43087                  ("EncodeVFPReg",PTy(F1,F4),
43088                   TP[Var("m",FTy 5),Mop(Not,bVar"dp_operation")]),
43089                Call
43090                  ("ARM",CTy"MachineCode",
43091                   CC[Var("c",F4),LW(29,5),Var("D",F1),LW(49,6),
43092                      Var("Vd",F4),LW(5,3),
43093                      Mop(Cast F1,bVar"dp_operation"),LW(1,2),Var("M",F1),
43094                      LW(0,1),Var("Vm",F4)])))),
43095       (Call
43096          ("vsqrt",CTy"VFP",
43097           TP[bVar"dp_operation",Var("d",FTy 5),Var("m",FTy 5)]),
43098        Let(TP[Var("D",F1),Var("Vd",F4)],
43099            Call
43100              ("EncodeVFPReg",PTy(F1,F4),
43101               TP[Var("d",FTy 5),Mop(Not,bVar"dp_operation")]),
43102            Let(TP[Var("M",F1),Var("Vm",F4)],
43103                Call
43104                  ("EncodeVFPReg",PTy(F1,F4),
43105                   TP[Var("m",FTy 5),Mop(Not,bVar"dp_operation")]),
43106                Call
43107                  ("ARM",CTy"MachineCode",
43108                   CC[Var("c",F4),LW(29,5),Var("D",F1),LW(49,6),
43109                      Var("Vd",F4),LW(5,3),
43110                      Mop(Cast F1,bVar"dp_operation"),LW(3,2),Var("M",F1),
43111                      LW(0,1),Var("Vm",F4)])))),
43112       (Call
43113          ("vadd",CTy"VFP",
43114           TP[bVar"dp_operation",Var("d",FTy 5),Var("n",FTy 5),
43115              Var("m",FTy 5)]),
43116        Let(bVar"single_register",Mop(Not,bVar"dp_operation"),
43117            Let(TP[Var("D",F1),Var("Vd",F4)],
43118                Call
43119                  ("EncodeVFPReg",PTy(F1,F4),
43120                   TP[Var("d",FTy 5),bVar"single_register"]),
43121                Let(TP[Var("N",F1),Var("Vn",F4)],
43122                    Call
43123                      ("EncodeVFPReg",PTy(F1,F4),
43124                       TP[Var("n",FTy 5),bVar"single_register"]),
43125                    Let(TP[Var("M",F1),Var("Vm",F4)],
43126                        Call
43127                          ("EncodeVFPReg",PTy(F1,F4),
43128                           TP[Var("m",FTy 5),bVar"single_register"]),
43129                        Call
43130                          ("ARM",CTy"MachineCode",
43131                           CC[Var("c",F4),LW(28,5),Var("D",F1),LW(3,2),
43132                              Var("Vn",F4),Var("Vd",F4),LW(5,3),
43133                              Mop(Cast F1,bVar"dp_operation"),Var("N",F1),
43134                              LW(0,1),Var("M",F1),LW(0,1),Var("Vm",F4)])))))),
43135       (Call
43136          ("vsub",CTy"VFP",
43137           TP[bVar"dp_operation",Var("d",FTy 5),Var("n",FTy 5),
43138              Var("m",FTy 5)]),
43139        Let(bVar"single_register",Mop(Not,bVar"dp_operation"),
43140            Let(TP[Var("D",F1),Var("Vd",F4)],
43141                Call
43142                  ("EncodeVFPReg",PTy(F1,F4),
43143                   TP[Var("d",FTy 5),bVar"single_register"]),
43144                Let(TP[Var("N",F1),Var("Vn",F4)],
43145                    Call
43146                      ("EncodeVFPReg",PTy(F1,F4),
43147                       TP[Var("n",FTy 5),bVar"single_register"]),
43148                    Let(TP[Var("M",F1),Var("Vm",F4)],
43149                        Call
43150                          ("EncodeVFPReg",PTy(F1,F4),
43151                           TP[Var("m",FTy 5),bVar"single_register"]),
43152                        Call
43153                          ("ARM",CTy"MachineCode",
43154                           CC[Var("c",F4),LW(28,5),Var("D",F1),LW(3,2),
43155                              Var("Vn",F4),Var("Vd",F4),LW(5,3),
43156                              Mop(Cast F1,bVar"dp_operation"),Var("N",F1),
43157                              LW(1,1),Var("M",F1),LW(0,1),Var("Vm",F4)])))))),
43158       (Call
43159          ("vmul",CTy"VFP",
43160           TP[bVar"dp_operation",Var("d",FTy 5),Var("n",FTy 5),
43161              Var("m",FTy 5)]),
43162        Let(bVar"single_register",Mop(Not,bVar"dp_operation"),
43163            Let(TP[Var("D",F1),Var("Vd",F4)],
43164                Call
43165                  ("EncodeVFPReg",PTy(F1,F4),
43166                   TP[Var("d",FTy 5),bVar"single_register"]),
43167                Let(TP[Var("N",F1),Var("Vn",F4)],
43168                    Call
43169                      ("EncodeVFPReg",PTy(F1,F4),
43170                       TP[Var("n",FTy 5),bVar"single_register"]),
43171                    Let(TP[Var("M",F1),Var("Vm",F4)],
43172                        Call
43173                          ("EncodeVFPReg",PTy(F1,F4),
43174                           TP[Var("m",FTy 5),bVar"single_register"]),
43175                        Call
43176                          ("ARM",CTy"MachineCode",
43177                           CC[Var("c",F4),LW(28,5),Var("D",F1),LW(2,2),
43178                              Var("Vn",F4),Var("Vd",F4),LW(5,3),
43179                              Mop(Cast F1,bVar"dp_operation"),Var("N",F1),
43180                              LW(0,1),Var("M",F1),LW(0,1),Var("Vm",F4)])))))),
43181       (Call
43182          ("vdiv",CTy"VFP",
43183           TP[bVar"dp_operation",Var("d",FTy 5),Var("n",FTy 5),
43184              Var("m",FTy 5)]),
43185        Let(bVar"single_register",Mop(Not,bVar"dp_operation"),
43186            Let(TP[Var("D",F1),Var("Vd",F4)],
43187                Call
43188                  ("EncodeVFPReg",PTy(F1,F4),
43189                   TP[Var("d",FTy 5),bVar"single_register"]),
43190                Let(TP[Var("N",F1),Var("Vn",F4)],
43191                    Call
43192                      ("EncodeVFPReg",PTy(F1,F4),
43193                       TP[Var("n",FTy 5),bVar"single_register"]),
43194                    Let(TP[Var("M",F1),Var("Vm",F4)],
43195                        Call
43196                          ("EncodeVFPReg",PTy(F1,F4),
43197                           TP[Var("m",FTy 5),bVar"single_register"]),
43198                        Call
43199                          ("ARM",CTy"MachineCode",
43200                           CC[Var("c",F4),LW(29,5),Var("D",F1),LW(0,2),
43201                              Var("Vn",F4),Var("Vd",F4),LW(5,3),
43202                              Mop(Cast F1,bVar"dp_operation"),Var("N",F1),
43203                              LW(0,1),Var("M",F1),LW(0,1),Var("Vm",F4)])))))),
43204       (Call
43205          ("vneg_mul",CTy"VFP",
43206           TP[bVar"dp_operation",Var("typ",CTy"VFPNegMul"),Var("d",FTy 5),
43207              Var("n",FTy 5),Var("m",FTy 5)]),
43208        Let(bVar"single_register",Mop(Not,bVar"dp_operation"),
43209            Let(TP[Var("D",F1),Var("Vd",F4)],
43210                Call
43211                  ("EncodeVFPReg",PTy(F1,F4),
43212                   TP[Var("d",FTy 5),bVar"single_register"]),
43213                Let(TP[Var("N",F1),Var("Vn",F4)],
43214                    Call
43215                      ("EncodeVFPReg",PTy(F1,F4),
43216                       TP[Var("n",FTy 5),bVar"single_register"]),
43217                    Let(TP[Var("M",F1),Var("Vm",F4)],
43218                        Call
43219                          ("EncodeVFPReg",PTy(F1,F4),
43220                           TP[Var("m",FTy 5),bVar"single_register"]),
43221                        Let(TP[Var("op1",FTy 2),Var("op2",F1)],
43222                            CS(Var("typ",CTy"VFPNegMul"),
43223                               [(LC("VFPNegMul_VNMUL",CTy"VFPNegMul"),
43224                                 TP[LW(2,2),LW(1,1)]),
43225                                (LC("VFPNegMul_VNMLA",CTy"VFPNegMul"),
43226                                 TP[LW(1,2),LW(1,1)]),
43227                                (LC("VFPNegMul_VNMLS",CTy"VFPNegMul"),
43228                                 TP[LW(1,2),LW(0,1)])]),
43229                            Call
43230                              ("ARM",CTy"MachineCode",
43231                               CC[Var("c",F4),LW(28,5),Var("D",F1),
43232                                  Var("op1",FTy 2),Var("Vn",F4),
43233                                  Var("Vd",F4),LW(5,3),
43234                                  Mop(Cast F1,bVar"dp_operation"),
43235                                  Var("N",F1),Var("op2",F1),Var("M",F1),
43236                                  LW(0,1),Var("Vm",F4)]))))))),
43237       (Call
43238          ("vmla_vmls",CTy"VFP",
43239           TP[bVar"dp_operation",bVar"add",Var("d",FTy 5),Var("n",FTy 5),
43240              Var("m",FTy 5)]),
43241        Let(bVar"single_register",Mop(Not,bVar"dp_operation"),
43242            Let(TP[Var("D",F1),Var("Vd",F4)],
43243                Call
43244                  ("EncodeVFPReg",PTy(F1,F4),
43245                   TP[Var("d",FTy 5),bVar"single_register"]),
43246                Let(TP[Var("N",F1),Var("Vn",F4)],
43247                    Call
43248                      ("EncodeVFPReg",PTy(F1,F4),
43249                       TP[Var("n",FTy 5),bVar"single_register"]),
43250                    Let(TP[Var("M",F1),Var("Vm",F4)],
43251                        Call
43252                          ("EncodeVFPReg",PTy(F1,F4),
43253                           TP[Var("m",FTy 5),bVar"single_register"]),
43254                        Call
43255                          ("ARM",CTy"MachineCode",
43256                           CC[Var("c",F4),LW(28,5),Var("D",F1),LW(0,2),
43257                              Var("Vn",F4),Var("Vd",F4),LW(5,3),
43258                              Mop(Cast F1,bVar"dp_operation"),Var("N",F1),
43259                              Mop(Cast F1,Mop(Not,bVar"add")),Var("M",F1),
43260                              LW(0,1),Var("Vm",F4)])))))),
43261       (Call
43262          ("vfma_vfms",CTy"VFP",
43263           TP[bVar"dp_operation",bVar"add",Var("d",FTy 5),Var("n",FTy 5),
43264              Var("m",FTy 5)]),
43265        Let(bVar"single_register",Mop(Not,bVar"dp_operation"),
43266            Let(TP[Var("D",F1),Var("Vd",F4)],
43267                Call
43268                  ("EncodeVFPReg",PTy(F1,F4),
43269                   TP[Var("d",FTy 5),bVar"single_register"]),
43270                Let(TP[Var("N",F1),Var("Vn",F4)],
43271                    Call
43272                      ("EncodeVFPReg",PTy(F1,F4),
43273                       TP[Var("n",FTy 5),bVar"single_register"]),
43274                    Let(TP[Var("M",F1),Var("Vm",F4)],
43275                        Call
43276                          ("EncodeVFPReg",PTy(F1,F4),
43277                           TP[Var("m",FTy 5),bVar"single_register"]),
43278                        Call
43279                          ("ARM",CTy"MachineCode",
43280                           CC[Var("c",F4),LW(29,5),Var("D",F1),LW(2,2),
43281                              Var("Vn",F4),Var("Vd",F4),LW(5,3),
43282                              Mop(Cast F1,bVar"dp_operation"),Var("N",F1),
43283                              Mop(Cast F1,Mop(Not,bVar"add")),Var("M",F1),
43284                              LW(0,1),Var("Vm",F4)])))))),
43285       (Call
43286          ("vfnma_vfnms",CTy"VFP",
43287           TP[bVar"dp_operation",bVar"add",Var("d",FTy 5),Var("n",FTy 5),
43288              Var("m",FTy 5)]),
43289        Let(bVar"single_register",Mop(Not,bVar"dp_operation"),
43290            Let(TP[Var("D",F1),Var("Vd",F4)],
43291                Call
43292                  ("EncodeVFPReg",PTy(F1,F4),
43293                   TP[Var("d",FTy 5),bVar"single_register"]),
43294                Let(TP[Var("N",F1),Var("Vn",F4)],
43295                    Call
43296                      ("EncodeVFPReg",PTy(F1,F4),
43297                       TP[Var("n",FTy 5),bVar"single_register"]),
43298                    Let(TP[Var("M",F1),Var("Vm",F4)],
43299                        Call
43300                          ("EncodeVFPReg",PTy(F1,F4),
43301                           TP[Var("m",FTy 5),bVar"single_register"]),
43302                        Call
43303                          ("ARM",CTy"MachineCode",
43304                           CC[Var("c",F4),LW(29,5),Var("D",F1),LW(1,2),
43305                              Var("Vn",F4),Var("Vd",F4),LW(5,3),
43306                              Mop(Cast F1,bVar"dp_operation"),Var("N",F1),
43307                              Mop(Cast F1,Mop(Not,bVar"add")),Var("M",F1),
43308                              LW(0,1),Var("Vm",F4)])))))),
43309       (Call
43310          ("vldr",CTy"VFP",
43311           TP[bVar"single_register",bVar"add",Var("d",FTy 5),Var("n",F4),
43312              Var("imm32",F32)]),
43313        ITE(Bop(Or,Mop(Not,Call("Aligned",bTy,TP[Var("imm32",F32),LN 4])),
43314                Mop(Not,
43315                    EQ(EX(Var("imm32",F32),LN 31,LN 10,FTy 22),LW(0,22)))),
43316            Call("BadCode",CTy"MachineCode",LS"VLDR: bad immediate"),
43317            Let(TP[Var("D",F1),Var("Vd",F4)],
43318                Call
43319                  ("EncodeVFPReg",PTy(F1,F4),
43320                   TP[Var("d",FTy 5),bVar"single_register"]),
43321                Call
43322                  ("ARM",CTy"MachineCode",
43323                   CC[Var("c",F4),LW(13,4),Mop(Cast F1,bVar"add"),
43324                      Var("D",F1),LW(1,2),Var("n",F4),Var("Vd",F4),
43325                      LW(5,3),Mop(Cast F1,Mop(Not,bVar"single_register")),
43326                      EX(Var("imm32",F32),LN 9,LN 2,F8)])))),
43327       (Call
43328          ("vstr",CTy"VFP",
43329           TP[bVar"single_register",bVar"add",Var("d",FTy 5),Var("n",F4),
43330              Var("imm32",F32)]),
43331        ITE(Bop(Or,Mop(Not,Call("Aligned",bTy,TP[Var("imm32",F32),LN 4])),
43332                Mop(Not,
43333                    EQ(EX(Var("imm32",F32),LN 31,LN 10,FTy 22),LW(0,22)))),
43334            Call("BadCode",CTy"MachineCode",LS"VSTR: bad immediate"),
43335            Let(TP[Var("D",F1),Var("Vd",F4)],
43336                Call
43337                  ("EncodeVFPReg",PTy(F1,F4),
43338                   TP[Var("d",FTy 5),bVar"single_register"]),
43339                Call
43340                  ("ARM",CTy"MachineCode",
43341                   CC[Var("c",F4),LW(13,4),Mop(Cast F1,bVar"add"),
43342                      Var("D",F1),LW(0,2),Var("n",F4),Var("Vd",F4),
43343                      LW(5,3),Mop(Cast F1,Mop(Not,bVar"single_register")),
43344                      EX(Var("imm32",F32),LN 9,LN 2,F8)])))),
43345       (Call
43346          ("vldm",CTy"VFP",
43347           TP[bVar"single_regs",bVar"add",bVar"wback",Var("d",FTy 5),
43348              Var("n",F4),Var("imm8",F8)]),
43349        Let(TP[Var("D",F1),Var("Vd",F4)],
43350            Call
43351              ("EncodeVFPReg",PTy(F1,F4),
43352               TP[Var("d",FTy 5),bVar"single_regs"]),
43353            Call
43354              ("ARM",CTy"MachineCode",
43355               CC[Var("c",F4),LW(6,3),ITE(bVar"add",LW(1,2),LW(2,2)),
43356                  Var("D",F1),Mop(Cast F1,bVar"wback"),LW(1,1),
43357                  Var("n",F4),Var("Vd",F4),LW(5,3),
43358                  Mop(Cast F1,Mop(Not,bVar"single_regs")),Var("imm8",F8)]))),
43359       (Call
43360          ("vstm",CTy"VFP",
43361           TP[bVar"single_regs",bVar"add",bVar"wback",Var("d",FTy 5),
43362              Var("n",F4),Var("imm8",F8)]),
43363        Let(TP[Var("D",F1),Var("Vd",F4)],
43364            Call
43365              ("EncodeVFPReg",PTy(F1,F4),
43366               TP[Var("d",FTy 5),bVar"single_regs"]),
43367            Call
43368              ("ARM",CTy"MachineCode",
43369               CC[Var("c",F4),LW(6,3),ITE(bVar"add",LW(1,2),LW(2,2)),
43370                  Var("D",F1),Mop(Cast F1,bVar"wback"),LW(0,1),
43371                  Var("n",F4),Var("Vd",F4),LW(5,3),
43372                  Mop(Cast F1,Mop(Not,bVar"single_regs")),Var("imm8",F8)])))]))
43373;
43374val e_data_def = Def
43375  ("e_data",TP[Var("c",F4),Var("ast",CTy"Data")],
43376   CS(Var("ast",CTy"Data"),
43377      [(Call("CountLeadingZeroes",CTy"Data",TP[Var("Rd",F4),Var("Rm",F4)]),
43378        Call
43379          ("ARM",CTy"MachineCode",
43380           CC[Var("c",F4),LW(367,12),Var("Rd",F4),LW(241,8),Var("Rm",F4)])),
43381       (Call
43382          ("MoveHalfword",CTy"Data",
43383           TP[bVar"high",Var("Rd",F4),Var("imm16",F16)]),
43384        Call
43385          ("ARM",CTy"MachineCode",
43386           CC[Var("c",F4),LW(6,5),Mop(Cast F1,bVar"high"),LW(0,2),
43387              EX(Var("imm16",F16),LN 15,LN 12,F4),Var("Rd",F4),
43388              EX(Var("imm16",F16),LN 11,LN 0,FTy 12)])),
43389       (Call
43390          ("Move",CTy"Data",
43391           TP[bVar"setflags",bVar"negate",Var("d",F4),Var("imm12",FTy 12)]),
43392        Call
43393          ("ARM",CTy"MachineCode",
43394           CC[Var("c",F4),LW(7,5),Mop(Cast F1,bVar"negate"),LW(1,1),
43395              Mop(Cast F1,bVar"setflags"),LW(0,4),Var("d",F4),
43396              Var("imm12",FTy 12)])),
43397       (Call
43398          ("AddSub",CTy"Data",
43399           TP[bVar"sub",Var("Rd",F4),Var("Rn",F4),Var("imm12",FTy 12)]),
43400        Call("BadCode",CTy"MachineCode",LS"ADDW/SUBW")),
43401       (Call
43402          ("TestCompareImmediate",CTy"Data",
43403           TP[Var("op",FTy 2),Var("Rn",F4),Var("imm12",FTy 12)]),
43404        Call
43405          ("ARM",CTy"MachineCode",
43406           CC[Var("c",F4),LW(6,5),Var("op",FTy 2),LW(1,1),Var("Rn",F4),
43407              LW(0,4),Var("imm12",FTy 12)])),
43408       (Call
43409          ("ArithLogicImmediate",CTy"Data",
43410           TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),
43411              Var("imm12",FTy 12)]),
43412        Call
43413          ("ARM",CTy"MachineCode",
43414           CC[Var("c",F4),LW(1,3),Var("opc",F4),
43415              Mop(Cast F1,bVar"setflags"),Var("n",F4),Var("d",F4),
43416              Var("imm12",FTy 12)])),
43417       (Call
43418          ("Register",CTy"Data",
43419           TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),
43420              Var("m",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"]),
43421        Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)],
43422            Call
43423              ("EncodeImmShift",PTy(FTy 2,FTy 5),
43424               TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]),
43425            Call
43426              ("ARM",CTy"MachineCode",
43427               CC[Var("c",F4),LW(0,3),Var("opc",F4),
43428                  Mop(Cast F1,bVar"setflags"),Var("n",F4),Var("d",F4),
43429                  Var("imm5",FTy 5),Var("typ",FTy 2),LW(0,1),Var("m",F4)]))),
43430       (Call
43431          ("TestCompareRegister",CTy"Data",
43432           TP[Var("opc",FTy 2),Var("n",F4),Var("m",F4),
43433              Var("shift_t",CTy"SRType"),nVar"shift_n"]),
43434        Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)],
43435            Call
43436              ("EncodeImmShift",PTy(FTy 2,FTy 5),
43437               TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]),
43438            Call
43439              ("ARM",CTy"MachineCode",
43440               CC[Var("c",F4),LW(2,5),Var("opc",FTy 2),LW(1,1),
43441                  Var("n",F4),LW(0,4),Var("imm5",FTy 5),Var("typ",FTy 2),
43442                  LW(0,1),Var("m",F4)]))),
43443       (Call
43444          ("ShiftImmediate",CTy"Data",
43445           TP[bVar"negate",bVar"setflags",Var("d",F4),Var("m",F4),
43446              Var("shift_t",CTy"SRType"),nVar"shift_n"]),
43447        Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)],
43448            Call
43449              ("EncodeImmShift",PTy(FTy 2,FTy 5),
43450               TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]),
43451            Call
43452              ("ARM",CTy"MachineCode",
43453               CC[Var("c",F4),LW(3,5),Mop(Cast F1,bVar"negate"),LW(1,1),
43454                  Mop(Cast F1,bVar"setflags"),LW(0,4),Var("d",F4),
43455                  Var("imm5",FTy 5),Var("typ",FTy 2),LW(0,1),Var("m",F4)]))),
43456       (Call
43457          ("RegisterShiftedRegister",CTy"Data",
43458           TP[AVar F4,AVar bTy,AVar F4,AVar F4,AVar F4,
43459              LC("SRType_RRX",CTy"SRType"),AVar F4]),
43460        Call("BadCode",CTy"MachineCode",LS"RegisterShiftedRegister: rrx")),
43461       (Call
43462          ("RegisterShiftedRegister",CTy"Data",
43463           TP[Var("opc",F4),bVar"setflags",Var("d",F4),Var("n",F4),
43464              Var("m",F4),Var("shift_t",CTy"SRType"),Var("s",F4)]),
43465        Call
43466          ("ARM",CTy"MachineCode",
43467           CC[Var("c",F4),LW(0,3),Var("opc",F4),
43468              Mop(Cast F1,bVar"setflags"),Var("n",F4),Var("d",F4),
43469              Var("s",F4),LW(0,1),
43470              Call("EncodeRegShift",FTy 2,Var("shift_t",CTy"SRType")),
43471              LW(1,1),Var("m",F4)])),
43472       (Call
43473          ("ShiftRegister",CTy"Data",
43474           TP[AVar bTy,AVar bTy,AVar F4,AVar F4,
43475              LC("SRType_RRX",CTy"SRType"),AVar F4]),
43476        Call("BadCode",CTy"MachineCode",LS"ShiftRegister: rrx")),
43477       (Call
43478          ("ShiftRegister",CTy"Data",
43479           TP[bVar"negate",bVar"setflags",Var("d",F4),Var("n",F4),
43480              Var("shift_t",CTy"SRType"),Var("m",F4)]),
43481        Call
43482          ("ARM",CTy"MachineCode",
43483           CC[Var("c",F4),LW(3,5),Mop(Cast F1,bVar"negate"),LW(1,1),
43484              Mop(Cast F1,bVar"setflags"),LW(0,4),Var("d",F4),Var("m",F4),
43485              LW(0,1),
43486              Call("EncodeRegShift",FTy 2,Var("shift_t",CTy"SRType")),
43487              LW(1,1),Var("n",F4)]))]))
43488;
43489val e_media_def = Def
43490  ("e_media",TP[Var("c",F4),Var("ast",CTy"Media")],
43491   CS(Var("ast",CTy"Media"),
43492      [(Call
43493          ("SaturatingAddSubtract",CTy"Media",
43494           TP[Var("opc",FTy 2),Var("Rd",F4),Var("Rm",F4),Var("Rn",F4)]),
43495        Call
43496          ("ARM",CTy"MachineCode",
43497           CC[Var("c",F4),LW(2,5),Var("opc",FTy 2),LW(0,1),Var("Rn",F4),
43498              Var("Rd",F4),LW(5,8),Var("Rm",F4)])),
43499       (Call
43500          ("PackHalfword",CTy"Media",
43501           TP[Var("shift_t",CTy"SRType"),nVar"shift_n",bVar"tbform",
43502              Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]),
43503        Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)],
43504            Call
43505              ("EncodeImmShift",PTy(FTy 2,FTy 5),
43506               TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]),
43507            Call
43508              ("ARM",CTy"MachineCode",
43509               CC[Var("c",F4),LW(104,8),Var("Rn",F4),Var("Rd",F4),
43510                  Var("imm5",FTy 5),EX(Var("typ",FTy 2),LN 1,LN 1,F1),
43511                  LW(1,2),Var("Rm",F4)]))),
43512       (Call
43513          ("Saturate",CTy"Media",
43514           TP[Var("shift_t",CTy"SRType"),nVar"shift_n",nVar"saturate_to",
43515              bVar"unsigned",Var("Rd",F4),Var("Rn",F4)]),
43516        Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)],
43517            Call
43518              ("EncodeImmShift",PTy(FTy 2,FTy 5),
43519               TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]),
43520            Call
43521              ("ARM",CTy"MachineCode",
43522               CC[Var("c",F4),LW(13,5),Mop(Cast F1,bVar"unsigned"),
43523                  LW(1,1),
43524                  ITE(bVar"unsigned",Mop(Cast(FTy 5),nVar"saturate_to"),
43525                      Mop(Cast(FTy 5),Bop(Sub,nVar"saturate_to",LN 1))),
43526                  Var("Rd",F4),Var("imm5",FTy 5),
43527                  EX(Var("typ",FTy 2),LN 1,LN 1,F1),LW(1,2),Var("Rn",F4)]))),
43528       (Call
43529          ("Saturate16",CTy"Media",
43530           TP[nVar"saturate_to",bVar"unsigned",Var("Rd",F4),Var("Rn",F4)]),
43531        Call
43532          ("ARM",CTy"MachineCode",
43533           CC[Var("c",F4),LW(13,5),Mop(Cast F1,bVar"unsigned"),LW(2,2),
43534              ITE(bVar"unsigned",Mop(Cast F4,nVar"saturate_to"),
43535                  Mop(Cast F4,Bop(Sub,nVar"saturate_to",LN 1))),
43536              Var("Rd",F4),LW(243,8),Var("Rn",F4)])),
43537       (Call
43538          ("ExtendByte",CTy"Media",
43539           TP[bVar"unsigned",Var("d",F4),Var("Rn",F4),Var("m",F4),
43540              nVar"rotation"]),
43541        Call
43542          ("ARM",CTy"MachineCode",
43543           CC[Var("c",F4),LW(13,5),Mop(Cast F1,bVar"unsigned"),LW(2,2),
43544              Var("Rn",F4),Var("d",F4),
43545              EX(Mop(Cast(FTy 5),nVar"rotation"),LN 4,LN 3,FTy 2),LW(7,6),
43546              Var("m",F4)])),
43547       (Call
43548          ("ExtendHalfword",CTy"Media",
43549           TP[bVar"unsigned",Var("d",F4),Var("Rn",F4),Var("m",F4),
43550              nVar"rotation"]),
43551        Call
43552          ("ARM",CTy"MachineCode",
43553           CC[Var("c",F4),LW(13,5),Mop(Cast F1,bVar"unsigned"),LW(3,2),
43554              Var("Rn",F4),Var("d",F4),
43555              EX(Mop(Cast(FTy 5),nVar"rotation"),LN 4,LN 3,FTy 2),LW(7,6),
43556              Var("m",F4)])),
43557       (Call
43558          ("ExtendByte16",CTy"Media",
43559           TP[bVar"unsigned",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4),
43560              nVar"rotation"]),
43561        Call
43562          ("ARM",CTy"MachineCode",
43563           CC[Var("c",F4),LW(13,5),Mop(Cast F1,bVar"unsigned"),LW(0,2),
43564              Var("Rn",F4),Var("Rd",F4),
43565              EX(Mop(Cast(FTy 5),nVar"rotation"),LN 4,LN 3,FTy 2),LW(7,6),
43566              Var("Rm",F4)])),
43567       (Call
43568          ("SelectBytes",CTy"Media",
43569           TP[Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]),
43570        Call
43571          ("ARM",CTy"MachineCode",
43572           CC[Var("c",F4),LW(104,8),Var("Rn",F4),Var("Rd",F4),LW(251,8),
43573              Var("Rm",F4)])),
43574       (Call("ByteReverse",CTy"Media",TP[Var("d",F4),Var("m",F4)]),
43575        Call
43576          ("ARM",CTy"MachineCode",
43577           CC[Var("c",F4),LW(1727,12),Var("d",F4),LW(243,8),Var("m",F4)])),
43578       (Call
43579          ("ByteReversePackedHalfword",CTy"Media",
43580           TP[Var("d",F4),Var("m",F4)]),
43581        Call
43582          ("ARM",CTy"MachineCode",
43583           CC[Var("c",F4),LW(1727,12),Var("d",F4),LW(251,8),Var("m",F4)])),
43584       (Call
43585          ("ByteReverseSignedHalfword",CTy"Media",
43586           TP[Var("d",F4),Var("m",F4)]),
43587        Call
43588          ("ARM",CTy"MachineCode",
43589           CC[Var("c",F4),LW(1791,12),Var("d",F4),LW(251,8),Var("m",F4)])),
43590       (Call("ReverseBits",CTy"Media",TP[Var("Rd",F4),Var("Rm",F4)]),
43591        Call
43592          ("ARM",CTy"MachineCode",
43593           CC[Var("c",F4),LW(1791,12),Var("Rd",F4),LW(243,8),Var("Rm",F4)])),
43594       (Call
43595          ("BitFieldExtract",CTy"Media",
43596           TP[bVar"unsigned",Var("Rd",F4),Var("Rn",F4),nVar"lsbit",
43597              nVar"widthminus1"]),
43598        Call
43599          ("ARM",CTy"MachineCode",
43600           CC[Var("c",F4),LW(15,5),Mop(Cast F1,bVar"unsigned"),LW(1,1),
43601              Mop(Cast(FTy 5),nVar"widthminus1"),Var("Rd",F4),
43602              Mop(Cast(FTy 5),nVar"lsbit"),LW(5,3),Var("Rn",F4)])),
43603       (Call
43604          ("BitFieldClearOrInsert",CTy"Media",
43605           TP[Var("Rd",F4),Var("Rn",F4),nVar"lsbit",nVar"msbit"]),
43606        Call
43607          ("ARM",CTy"MachineCode",
43608           CC[Var("c",F4),LW(62,7),Mop(Cast(FTy 5),nVar"msbit"),
43609              Var("Rd",F4),Mop(Cast(FTy 5),nVar"lsbit"),LW(1,3),
43610              Var("Rn",F4)]))]))
43611;
43612val e_hint_def = Def
43613  ("e_hint",TP[Var("c",F4),Var("ast",CTy"Hint")],
43614   CS(Var("ast",CTy"Hint"),
43615      [(Call("Breakpoint",CTy"Hint",Var("imm32",F32)),
43616        Call
43617          ("ARM",CTy"MachineCode",
43618           CC[Var("c",F4),LW(18,8),EX(Var("imm32",F32),LN 15,LN 4,FTy 12),
43619              LW(7,4),EX(Var("imm32",F32),LN 3,LN 0,F4)])),
43620       (Call("Debug",CTy"Hint",Var("option",F4)),
43621        Call
43622          ("ARM",CTy"MachineCode",
43623           CC[Var("c",F4),LW(3280655,24),Var("option",F4)])),
43624       (Call("DataMemoryBarrier",CTy"Hint",Var("option",F4)),
43625        ITE(EQ(Var("c",F4),LW(14,4)),
43626            Call
43627              ("ARM",CTy"MachineCode",
43628               CC[LW(257425157,28),Var("option",F4)]),
43629            Call("BadCode",CTy"MachineCode",LS"DataMemoryBarrier"))),
43630       (Call("DataSynchronizationBarrier",CTy"Hint",Var("option",F4)),
43631        ITE(EQ(Var("c",F4),LW(14,4)),
43632            Call
43633              ("ARM",CTy"MachineCode",
43634               CC[LW(257425156,28),Var("option",F4)]),
43635            Call
43636              ("BadCode",CTy"MachineCode",LS"DataSynchronizationBarrier"))),
43637       (Call
43638          ("InstructionSynchronizationBarrier",CTy"Hint",Var("option",F4)),
43639        ITE(EQ(Var("c",F4),LW(14,4)),
43640            Call
43641              ("ARM",CTy"MachineCode",
43642               CC[LW(257425158,28),Var("option",F4)]),
43643            Call
43644              ("BadCode",CTy"MachineCode",
43645               LS"InstructionSynchronizationBarrier"))),
43646       (Const("SendEvent",CTy"Hint"),
43647        Call("ARM",CTy"MachineCode",CC[Var("c",F4),LW(52490244,28)])),
43648       (Const("WaitForEvent",CTy"Hint"),
43649        Call("ARM",CTy"MachineCode",CC[Var("c",F4),LW(52490242,28)])),
43650       (Const("WaitForInterrupt",CTy"Hint"),
43651        Call("ARM",CTy"MachineCode",CC[Var("c",F4),LW(52490243,28)])),
43652       (Const("Yield",CTy"Hint"),
43653        Call("ARM",CTy"MachineCode",CC[Var("c",F4),LW(52490241,28)])),
43654       (Call
43655          ("PreloadData",CTy"Hint",
43656           TP[bVar"add",bVar"is_pldw",Var("Rn",F4),
43657              Call("immediate_form1",CTy"offset1",Var("imm32",F32))]),
43658        Call
43659          ("ARM",CTy"MachineCode",
43660           CC[LW(245,8),Mop(Cast F1,bVar"add"),
43661              Mop(Cast F1,Mop(Not,bVar"is_pldw")),LW(1,2),Var("Rn",F4),
43662              LW(15,4),EX(Var("imm32",F32),LN 11,LN 0,FTy 12)])),
43663       (Call
43664          ("PreloadData",CTy"Hint",
43665           TP[bVar"add",bVar"is_pldw",Var("Rn",F4),
43666              Call
43667                ("register_form1",CTy"offset1",
43668                 TP[Var("Rm",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]),
43669        ITE(EQ(Var("c",F4),LW(14,4)),
43670            Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)],
43671                Call
43672                  ("EncodeImmShift",PTy(FTy 2,FTy 5),
43673                   TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]),
43674                Call
43675                  ("ARM",CTy"MachineCode",
43676                   CC[LW(247,8),Mop(Cast F1,bVar"add"),
43677                      Mop(Cast F1,Mop(Not,bVar"is_pldw")),LW(1,2),
43678                      Var("Rn",F4),LW(15,4),Var("imm5",FTy 5),
43679                      Var("typ",FTy 2),LW(0,1),Var("Rm",F4)])),
43680            Call("BadCode",CTy"MachineCode",LS"PreloadData"))),
43681       (Call
43682          ("PreloadDataLiteral",CTy"Hint",TP[bVar"add",Var("imm32",F32)]),
43683        ITE(EQ(Var("c",F4),LW(14,4)),
43684            Call
43685              ("ARM",CTy"MachineCode",
43686               CC[LW(245,8),Mop(Cast F1,bVar"add"),LW(1535,11),
43687                  EX(Var("imm32",F32),LN 11,LN 0,FTy 12)]),
43688            Call("BadCode",CTy"MachineCode",LS"PreloadDataLiteral"))),
43689       (Call
43690          ("PreloadInstruction",CTy"Hint",
43691           TP[bVar"add",Var("Rn",F4),
43692              Call("immediate_form1",CTy"offset1",Var("imm32",F32))]),
43693        ITE(EQ(Var("c",F4),LW(14,4)),
43694            Call
43695              ("ARM",CTy"MachineCode",
43696               CC[LW(244,8),Mop(Cast F1,bVar"add"),LW(5,3),Var("Rn",F4),
43697                  LW(15,4),EX(Var("imm32",F32),LN 11,LN 0,FTy 12)]),
43698            Call("BadCode",CTy"MachineCode",LS"PreloadInstruction"))),
43699       (Call
43700          ("PreloadInstruction",CTy"Hint",
43701           TP[bVar"add",Var("Rn",F4),
43702              Call
43703                ("register_form1",CTy"offset1",
43704                 TP[Var("Rm",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]),
43705        Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)],
43706            Call
43707              ("EncodeImmShift",PTy(FTy 2,FTy 5),
43708               TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]),
43709            Call
43710              ("ARM",CTy"MachineCode",
43711               CC[LW(246,8),Mop(Cast F1,bVar"add"),LW(5,3),Var("Rn",F4),
43712                  LW(15,4),Var("imm5",FTy 5),Var("typ",FTy 2),LW(0,1),
43713                  Var("Rm",F4)])))]))
43714;
43715val e_system_def = Def
43716  ("e_system",TP[Var("c",F4),Var("ast",CTy"System")],
43717   CS(Var("ast",CTy"System"),
43718      [(Call("EnterxLeavex",CTy"System",bVar"is_enterx"),
43719        Call("BadCode",CTy"MachineCode",LS"EnterxLeavex")),
43720       (Call
43721          ("ChangeProcessorState",CTy"System",
43722           TP[LT,LT,AVar(PTy(bTy,PTy(bTy,PTy(bTy,OTy(FTy 5)))))]),
43723        Call("BadCode",CTy"MachineCode",LS"ChangeProcessorState")),
43724       (Call
43725          ("ChangeProcessorState",CTy"System",
43726           TP[bVar"enable",bVar"disable",bVar"affectA",bVar"affectI",
43727              bVar"affectF",Var("changemode",OTy(FTy 5))]),
43728        ITE(EQ(Var("c",F4),LW(14,4)),
43729            Let(TP[Var("M",F1),Var("mode",FTy 5)],
43730                CS(Var("changemode",OTy(FTy 5)),
43731                   [(Mop(Some,Var("mode",FTy 5)),
43732                     TP[LW(1,1),Var("mode",FTy 5)]),
43733                    (LO(FTy 5),TP[LW(0,1),LW(0,5)])]),
43734                Call
43735                  ("ARM",CTy"MachineCode",
43736                   CC[LW(3856,12),
43737                      CC[Mop(Cast F1,Bop(Or,bVar"enable",bVar"disable")),
43738                         Mop(Cast F1,bVar"disable")],Var("M",F1),LW(0,8),
43739                      Mop(Cast F1,bVar"affectA"),
43740                      Mop(Cast F1,bVar"affectI"),
43741                      Mop(Cast F1,bVar"affectF"),LW(0,1),Var("mode",FTy 5)])),
43742            Call("BadCode",CTy"MachineCode",LS"ChangeProcessorState"))),
43743       (Const("ExceptionReturn",CTy"System"),
43744        Call("ARM",CTy"MachineCode",CC[Var("c",F4),LW(23068782,28)])),
43745       (Call("HypervisorCall",CTy"System",Var("imm16",F16)),
43746        Call
43747          ("ARM",CTy"MachineCode",
43748           CC[Var("c",F4),LW(20,8),EX(Var("imm16",F16),LN 15,LN 4,FTy 12),
43749              LW(7,4),EX(Var("imm16",F16),LN 3,LN 0,F4)])),
43750       (Call
43751          ("MoveToRegisterFromSpecial",CTy"System",
43752           TP[bVar"read_spsr",Var("Rd",F4)]),
43753        Call
43754          ("ARM",CTy"MachineCode",
43755           CC[Var("c",F4),LW(2,5),Mop(Cast F1,bVar"read_spsr"),LW(15,6),
43756              Var("Rd",F4),LW(0,12)])),
43757       (Call
43758          ("MoveToRegisterFromBankedOrSpecial",CTy"System",
43759           TP[bVar"read_spsr",Var("SYSm",FTy 5),Var("Rd",F4)]),
43760        Call
43761          ("ARM",CTy"MachineCode",
43762           CC[Var("c",F4),LW(2,5),Mop(Cast F1,bVar"read_spsr"),LW(0,2),
43763              EX(Var("SYSm",FTy 5),LN 3,LN 0,F4),Var("Rd",F4),LW(1,3),
43764              EX(Var("SYSm",FTy 5),LN 4,LN 4,F1),LW(0,8)])),
43765       (Call
43766          ("MoveToSpecialFromImmediate",CTy"System",
43767           TP[bVar"write_spsr",Var("imm32",F32),Var("mask",F4)]),
43768        CS(Call("EncodeARMImmediate",OTy(FTy 12),Var("imm32",F32)),
43769           [(Mop(Some,Var("imm12",FTy 12)),
43770             Call
43771               ("ARM",CTy"MachineCode",
43772                CC[Var("c",F4),LW(6,5),Mop(Cast F1,bVar"write_spsr"),
43773                   LW(2,2),Var("mask",F4),LW(15,4),Var("imm12",FTy 12)])),
43774            (LO(FTy 12),
43775             Call
43776               ("BadCode",CTy"MachineCode",LS"MoveToSpecialFromImmediate"))])),
43777       (Call
43778          ("MoveToSpecialFromRegister",CTy"System",
43779           TP[bVar"write_spsr",Var("Rn",F4),Var("mask",F4)]),
43780        Call
43781          ("ARM",CTy"MachineCode",
43782           CC[Var("c",F4),LW(2,5),Mop(Cast F1,bVar"write_spsr"),LW(2,2),
43783              Var("mask",F4),LW(3840,12),Var("Rn",F4)])),
43784       (Call
43785          ("MoveToBankedOrSpecialRegister",CTy"System",
43786           TP[bVar"write_spsr",Var("SYSm",FTy 5),Var("Rn",F4)]),
43787        Call
43788          ("ARM",CTy"MachineCode",
43789           CC[Var("c",F4),LW(2,5),Mop(Cast F1,bVar"write_spsr"),LW(2,2),
43790              EX(Var("SYSm",FTy 5),LN 3,LN 0,F4),LW(121,7),
43791              EX(Var("SYSm",FTy 5),LN 4,LN 4,F1),LW(0,4),Var("Rn",F4)])),
43792       (Call
43793          ("ReturnFromException",CTy"System",
43794           TP[bVar"increment",bVar"wordhigher",bVar"wback",Var("Rn",F4)]),
43795        ITE(EQ(Var("c",F4),LW(14,4)),
43796            Let(Var("U",F1),Mop(Cast F1,bVar"increment"),
43797                Call
43798                  ("ARM",CTy"MachineCode",
43799                   CC[LW(124,7),
43800                      ITE(bVar"wordhigher",Var("U",F1),
43801                          Mop(BNot,Var("U",F1))),Var("U",F1),LW(0,1),
43802                      Mop(Cast F1,bVar"wback"),LW(1,1),Var("Rn",F4),
43803                      LW(2560,16)])),
43804            Call("BadCode",CTy"MachineCode",LS"ReturnFromException"))),
43805       (Call("SecureMonitorCall",CTy"System",Var("imm4",F4)),
43806        Call
43807          ("ARM",CTy"MachineCode",
43808           CC[Var("c",F4),LW(1441799,24),Var("imm4",F4)])),
43809       (Call
43810          ("StoreReturnState",CTy"System",
43811           TP[bVar"increment",bVar"wordhigher",bVar"wback",
43812              Var("mode",FTy 5)]),
43813        ITE(EQ(Var("c",F4),LW(14,4)),
43814            Let(Var("U",F1),Mop(Cast F1,bVar"increment"),
43815                Call
43816                  ("ARM",CTy"MachineCode",
43817                   CC[LW(124,7),
43818                      ITE(bVar"wordhigher",Var("U",F1),
43819                          Mop(BNot,Var("U",F1))),Var("U",F1),LW(1,1),
43820                      Mop(Cast F1,bVar"wback"),LW(26664,16),
43821                      Var("mode",FTy 5)])),
43822            Call("BadCode",CTy"MachineCode",LS"StoreReturnState"))),
43823       (Call("SupervisorCall",CTy"System",Var("imm32",F32)),
43824        Call
43825          ("ARM",CTy"MachineCode",
43826           CC[Var("c",F4),LW(15,4),EX(Var("imm32",F32),LN 23,LN 0,FTy 24)])),
43827       (Call("Setend",CTy"System",bVar"E"),
43828        ITE(EQ(Var("c",F4),LW(14,4)),
43829            Call
43830              ("ARM",CTy"MachineCode",
43831               CC[LW(3948608,22),Mop(Cast F1,bVar"E"),LW(0,9)]),
43832            Call("BadCode",CTy"MachineCode",LS"Setend")))]))
43833;
43834val e_multiply_def = Def
43835  ("e_multiply",TP[Var("c",F4),Var("ast",CTy"Multiply")],
43836   CS(Var("ast",CTy"Multiply"),
43837      [(Call
43838          ("MultiplyAccumulate",CTy"Multiply",
43839           TP[bVar"setflags",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4),
43840              Var("Ra",F4)]),
43841        Call
43842          ("ARM",CTy"MachineCode",
43843           CC[Var("c",F4),LW(1,7),Mop(Cast F1,bVar"setflags"),
43844              Var("Rd",F4),Var("Ra",F4),Var("Rm",F4),LW(9,4),Var("Rn",F4)])),
43845       (Call
43846          ("Multiply32",CTy"Multiply",
43847           TP[bVar"setflags",Var("d",F4),Var("n",F4),Var("Rm",F4)]),
43848        Call
43849          ("ARM",CTy"MachineCode",
43850           CC[Var("c",F4),LW(0,7),Mop(Cast F1,bVar"setflags"),Var("d",F4),
43851              LW(0,4),Var("Rm",F4),LW(9,4),Var("n",F4)])),
43852       (Call
43853          ("MultiplyLong",CTy"Multiply",
43854           TP[bVar"accumulate",bVar"signed",bVar"setflags",Var("Rdhi",F4),
43855              Var("Rdlo",F4),Var("Rn",F4),Var("Rm",F4)]),
43856        Call
43857          ("ARM",CTy"MachineCode",
43858           CC[Var("c",F4),LW(1,5),Mop(Cast F1,bVar"signed"),
43859              Mop(Cast F1,bVar"accumulate"),Mop(Cast F1,bVar"setflags"),
43860              Var("Rdhi",F4),Var("Rdlo",F4),Var("Rm",F4),LW(9,4),
43861              Var("Rn",F4)])),
43862       (Call
43863          ("MultiplyAccumulateAccumulate",CTy"Multiply",
43864           TP[Var("Rdhi",F4),Var("Rdlo",F4),Var("Rn",F4),Var("Rm",F4)]),
43865        Call
43866          ("ARM",CTy"MachineCode",
43867           CC[Var("c",F4),LW(4,8),Var("Rdhi",F4),Var("Rdlo",F4),
43868              Var("Rm",F4),LW(9,4),Var("Rn",F4)])),
43869       (Call
43870          ("MultiplySubtract",CTy"Multiply",
43871           TP[Var("Rd",F4),Var("Rn",F4),Var("Rm",F4),Var("Ra",F4)]),
43872        Call
43873          ("ARM",CTy"MachineCode",
43874           CC[Var("c",F4),LW(6,8),Var("Rd",F4),Var("Ra",F4),Var("Rm",F4),
43875              LW(9,4),Var("Rn",F4)])),
43876       (Call
43877          ("Signed16Multiply32Accumulate",CTy"Multiply",
43878           TP[bVar"m_high",bVar"n_high",Var("Rd",F4),Var("Rn",F4),
43879              Var("Rm",F4),Var("Ra",F4)]),
43880        Call
43881          ("ARM",CTy"MachineCode",
43882           CC[Var("c",F4),LW(16,8),Var("Rd",F4),Var("Ra",F4),Var("Rm",F4),
43883              LW(1,1),Mop(Cast F1,bVar"m_high"),Mop(Cast F1,bVar"n_high"),
43884              LW(0,1),Var("Rn",F4)])),
43885       (Call
43886          ("Signed16Multiply32Result",CTy"Multiply",
43887           TP[bVar"m_high",bVar"n_high",Var("Rd",F4),Var("Rn",F4),
43888              Var("Rm",F4)]),
43889        Call
43890          ("ARM",CTy"MachineCode",
43891           CC[Var("c",F4),LW(22,8),Var("Rd",F4),LW(0,4),Var("Rm",F4),
43892              LW(1,1),Mop(Cast F1,bVar"m_high"),Mop(Cast F1,bVar"n_high"),
43893              LW(0,1),Var("Rn",F4)])),
43894       (Call
43895          ("Signed16x32Multiply32Accumulate",CTy"Multiply",
43896           TP[bVar"m_high",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4),
43897              Var("Ra",F4)]),
43898        Call
43899          ("ARM",CTy"MachineCode",
43900           CC[Var("c",F4),LW(18,8),Var("Rd",F4),Var("Ra",F4),Var("Rm",F4),
43901              LW(1,1),Mop(Cast F1,bVar"m_high"),LW(0,2),Var("Rn",F4)])),
43902       (Call
43903          ("Signed16x32Multiply32Result",CTy"Multiply",
43904           TP[bVar"m_high",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]),
43905        Call
43906          ("ARM",CTy"MachineCode",
43907           CC[Var("c",F4),LW(18,8),Var("Rd",F4),LW(0,4),Var("Rm",F4),
43908              LW(1,1),Mop(Cast F1,bVar"m_high"),LW(2,2),Var("Rn",F4)])),
43909       (Call
43910          ("Signed16Multiply64Accumulate",CTy"Multiply",
43911           TP[bVar"m_high",bVar"n_high",Var("Rdhi",F4),Var("Rdlo",F4),
43912              Var("Rn",F4),Var("Rm",F4)]),
43913        Call
43914          ("ARM",CTy"MachineCode",
43915           CC[Var("c",F4),LW(20,8),Var("Rdhi",F4),Var("Rdlo",F4),
43916              Var("Rm",F4),LW(1,1),Mop(Cast F1,bVar"m_high"),
43917              Mop(Cast F1,bVar"n_high"),LW(0,1),Var("Rn",F4)])),
43918       (Call
43919          ("SignedMultiplyDual",CTy"Multiply",
43920           TP[bVar"sub",bVar"m_swap",Var("Rd",F4),Var("Rn",F4),
43921              Var("Rm",F4),Var("Ra",F4)]),
43922        Call
43923          ("ARM",CTy"MachineCode",
43924           CC[Var("c",F4),LW(112,8),Var("Rd",F4),Var("Ra",F4),
43925              Var("Rm",F4),LW(0,1),Mop(Cast F1,bVar"sub"),
43926              Mop(Cast F1,bVar"m_swap"),LW(1,1),Var("Rn",F4)])),
43927       (Call
43928          ("SignedMultiplyLongDual",CTy"Multiply",
43929           TP[bVar"sub",bVar"m_swap",Var("Rdhi",F4),Var("Rdlo",F4),
43930              Var("Rn",F4),Var("Rm",F4)]),
43931        Call
43932          ("ARM",CTy"MachineCode",
43933           CC[Var("c",F4),LW(116,8),Var("Rdhi",F4),Var("Rdlo",F4),
43934              Var("Rm",F4),LW(0,1),Mop(Cast F1,bVar"sub"),
43935              Mop(Cast F1,bVar"m_swap"),LW(1,1),Var("Rn",F4)])),
43936       (Call
43937          ("SignedMostSignificantMultiply",CTy"Multiply",
43938           TP[bVar"round",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4),
43939              Var("Ra",F4)]),
43940        Call
43941          ("ARM",CTy"MachineCode",
43942           CC[Var("c",F4),LW(117,8),Var("Rd",F4),Var("Ra",F4),
43943              Var("Rm",F4),LW(0,2),Mop(Cast F1,bVar"round"),LW(1,1),
43944              Var("Rn",F4)])),
43945       (Call
43946          ("SignedMostSignificantMultiplySubtract",CTy"Multiply",
43947           TP[bVar"round",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4),
43948              Var("Ra",F4)]),
43949        Call
43950          ("ARM",CTy"MachineCode",
43951           CC[Var("c",F4),LW(117,8),Var("Rd",F4),Var("Ra",F4),
43952              Var("Rm",F4),LW(3,2),Mop(Cast F1,bVar"round"),LW(1,1),
43953              Var("Rn",F4)]))]))
43954;
43955val e_simd_def = Def
43956  ("e_simd",TP[Var("c",F4),Var("ast",CTy"SIMD")],
43957   CS(Var("ast",CTy"SIMD"),
43958      [(Call
43959          ("SignedAddSub16",CTy"SIMD",
43960           TP[Var("opc",FTy 2),Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]),
43961        Call
43962          ("ARM",CTy"MachineCode",
43963           CC[Var("c",F4),LW(97,8),Var("Rn",F4),Var("Rd",F4),LW(30,5),
43964              Var("opc",FTy 2),LW(1,1),Var("Rm",F4)])),
43965       (Call
43966          ("UnsignedAddSub16",CTy"SIMD",
43967           TP[Var("opc",FTy 2),Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]),
43968        Call
43969          ("ARM",CTy"MachineCode",
43970           CC[Var("c",F4),LW(101,8),Var("Rn",F4),Var("Rd",F4),LW(30,5),
43971              Var("opc",FTy 2),LW(1,1),Var("Rm",F4)])),
43972       (Call
43973          ("SignedSaturatingAddSub16",CTy"SIMD",
43974           TP[Var("opc",FTy 2),Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]),
43975        Call
43976          ("ARM",CTy"MachineCode",
43977           CC[Var("c",F4),LW(98,8),Var("Rn",F4),Var("Rd",F4),LW(30,5),
43978              Var("opc",FTy 2),LW(1,1),Var("Rm",F4)])),
43979       (Call
43980          ("UnsignedSaturatingAddSub16",CTy"SIMD",
43981           TP[Var("opc",FTy 2),Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]),
43982        Call
43983          ("ARM",CTy"MachineCode",
43984           CC[Var("c",F4),LW(102,8),Var("Rn",F4),Var("Rd",F4),LW(30,5),
43985              Var("opc",FTy 2),LW(1,1),Var("Rm",F4)])),
43986       (Call
43987          ("SignedHalvingAddSub16",CTy"SIMD",
43988           TP[Var("opc",FTy 2),Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]),
43989        Call
43990          ("ARM",CTy"MachineCode",
43991           CC[Var("c",F4),LW(99,8),Var("Rn",F4),Var("Rd",F4),LW(30,5),
43992              Var("opc",FTy 2),LW(1,1),Var("Rm",F4)])),
43993       (Call
43994          ("UnsignedHalvingAddSub16",CTy"SIMD",
43995           TP[Var("opc",FTy 2),Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]),
43996        Call
43997          ("ARM",CTy"MachineCode",
43998           CC[Var("c",F4),LW(103,8),Var("Rn",F4),Var("Rd",F4),LW(30,5),
43999              Var("opc",FTy 2),LW(1,1),Var("Rm",F4)])),
44000       (Call
44001          ("SignedAddSub8",CTy"SIMD",
44002           TP[bVar"sub",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]),
44003        Call
44004          ("ARM",CTy"MachineCode",
44005           CC[Var("c",F4),LW(97,8),Var("Rn",F4),Var("Rd",F4),LW(15,4),
44006              ITE(bVar"sub",LW(7,3),LW(4,3)),LW(1,1),Var("Rm",F4)])),
44007       (Call
44008          ("UnsignedAddSub8",CTy"SIMD",
44009           TP[bVar"sub",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]),
44010        Call
44011          ("ARM",CTy"MachineCode",
44012           CC[Var("c",F4),LW(101,8),Var("Rn",F4),Var("Rd",F4),LW(15,4),
44013              ITE(bVar"sub",LW(7,3),LW(4,3)),LW(1,1),Var("Rm",F4)])),
44014       (Call
44015          ("SignedSaturatingAddSub8",CTy"SIMD",
44016           TP[bVar"sub",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]),
44017        Call
44018          ("ARM",CTy"MachineCode",
44019           CC[Var("c",F4),LW(98,8),Var("Rn",F4),Var("Rd",F4),LW(15,4),
44020              ITE(bVar"sub",LW(7,3),LW(4,3)),LW(1,1),Var("Rm",F4)])),
44021       (Call
44022          ("UnsignedSaturatingAddSub8",CTy"SIMD",
44023           TP[bVar"sub",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]),
44024        Call
44025          ("ARM",CTy"MachineCode",
44026           CC[Var("c",F4),LW(102,8),Var("Rn",F4),Var("Rd",F4),LW(15,4),
44027              ITE(bVar"sub",LW(7,3),LW(4,3)),LW(1,1),Var("Rm",F4)])),
44028       (Call
44029          ("SignedHalvingAddSub8",CTy"SIMD",
44030           TP[bVar"sub",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]),
44031        Call
44032          ("ARM",CTy"MachineCode",
44033           CC[Var("c",F4),LW(99,8),Var("Rn",F4),Var("Rd",F4),LW(15,4),
44034              ITE(bVar"sub",LW(7,3),LW(4,3)),LW(1,1),Var("Rm",F4)])),
44035       (Call
44036          ("UnsignedHalvingAddSub8",CTy"SIMD",
44037           TP[bVar"sub",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]),
44038        Call
44039          ("ARM",CTy"MachineCode",
44040           CC[Var("c",F4),LW(103,8),Var("Rn",F4),Var("Rd",F4),LW(15,4),
44041              ITE(bVar"sub",LW(7,3),LW(4,3)),LW(1,1),Var("Rm",F4)])),
44042       (Call
44043          ("UnsignedSumAbsoluteDifferences",CTy"SIMD",
44044           TP[Var("Rd",F4),Var("Rn",F4),Var("Rm",F4),Var("Ra",F4)]),
44045        Call
44046          ("ARM",CTy"MachineCode",
44047           CC[Var("c",F4),LW(120,8),Var("Rd",F4),Var("Ra",F4),
44048              Var("Rm",F4),LW(1,4),Var("Rn",F4)]))]))
44049;
44050val e_load_def = Def
44051  ("e_load",TP[Var("c",F4),Var("ast",CTy"Load")],
44052   CS(Var("ast",CTy"Load"),
44053      [(Call
44054          ("LoadWord",CTy"Load",
44055           TP[AVar bTy,LF,LF,AVar(PTy(F4,PTy(F4,CTy"offset1")))]),
44056        Call("BadCode",CTy"MachineCode",LS"LoadWord")),
44057       (Call
44058          ("LoadWord",CTy"Load",
44059           TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4),
44060              Call("immediate_form1",CTy"offset1",Var("imm32",F32))]),
44061        ITE(Bop(Ule,Var("imm32",F32),LW(4095,32)),
44062            Call
44063              ("ARM",CTy"MachineCode",
44064               CC[Var("c",F4),LW(2,3),Mop(Cast F1,bVar"index"),
44065                  Mop(Cast F1,bVar"add"),LW(0,1),
44066                  Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(1,1),
44067                  Var("n",F4),Var("t",F4),
44068                  EX(Var("imm32",F32),LN 11,LN 0,FTy 12)]),
44069            Call("BadCode",CTy"MachineCode",LS"LoadWord"))),
44070       (Call
44071          ("LoadWord",CTy"Load",
44072           TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4),
44073              Call
44074                ("register_form1",CTy"offset1",
44075                 TP[Var("m",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]),
44076        Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)],
44077            Call
44078              ("EncodeImmShift",PTy(FTy 2,FTy 5),
44079               TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]),
44080            Call
44081              ("ARM",CTy"MachineCode",
44082               CC[Var("c",F4),LW(3,3),Mop(Cast F1,bVar"index"),
44083                  Mop(Cast F1,bVar"add"),LW(0,1),
44084                  Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(1,1),
44085                  Var("n",F4),Var("t",F4),Var("imm5",FTy 5),
44086                  Var("typ",FTy 2),LW(0,1),Var("m",F4)]))),
44087       (Call
44088          ("LoadLiteral",CTy"Load",
44089           TP[bVar"add",Var("t",F4),Var("imm32",F32)]),
44090        ITE(Bop(Ule,Var("imm32",F32),LW(4095,32)),
44091            Call
44092              ("ARM",CTy"MachineCode",
44093               CC[Var("c",F4),LW(5,4),Mop(Cast F1,bVar"add"),LW(31,7),
44094                  Var("t",F4),EX(Var("imm32",F32),LN 11,LN 0,FTy 12)]),
44095            Call("BadCode",CTy"MachineCode",LS"LoadLiteral"))),
44096       (Call
44097          ("LoadUnprivileged",CTy"Load",
44098           TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4),
44099              Call("immediate_form1",CTy"offset1",Var("imm32",F32))]),
44100        ITE(Bop(And,bVar"postindex",Bop(Ule,Var("imm32",F32),LW(4095,32))),
44101            Call
44102              ("ARM",CTy"MachineCode",
44103               CC[Var("c",F4),LW(4,4),Mop(Cast F1,bVar"add"),LW(3,3),
44104                  Var("Rn",F4),Var("Rt",F4),
44105                  EX(Var("imm32",F32),LN 11,LN 0,FTy 12)]),
44106            Call("BadCode",CTy"MachineCode",LS"LoadUnprivileged"))),
44107       (Call
44108          ("LoadUnprivileged",CTy"Load",
44109           TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4),
44110              Call
44111                ("register_form1",CTy"offset1",
44112                 TP[Var("Rm",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]),
44113        ITE(bVar"postindex",
44114            Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)],
44115                Call
44116                  ("EncodeImmShift",PTy(FTy 2,FTy 5),
44117                   TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]),
44118                Call
44119                  ("ARM",CTy"MachineCode",
44120                   CC[Var("c",F4),LW(6,4),Mop(Cast F1,bVar"add"),LW(3,3),
44121                      Var("Rn",F4),Var("Rt",F4),Var("imm5",FTy 5),
44122                      Var("typ",FTy 2),LW(0,1),Var("Rm",F4)])),
44123            Call("BadCode",CTy"MachineCode",LS"LoadUnprivileged"))),
44124       (Call
44125          ("LoadByte",CTy"Load",
44126           TP[AVar bTy,AVar bTy,LF,LF,AVar(PTy(F4,PTy(F4,CTy"offset1")))]),
44127        Call("BadCode",CTy"MachineCode",LS"LoadByte")),
44128       (Call
44129          ("LoadByte",CTy"Load",
44130           TP[bVar"unsigned",bVar"add",bVar"index",bVar"wback",
44131              Var("t",F4),Var("n",F4),
44132              Call("immediate_form1",CTy"offset1",Var("imm32",F32))]),
44133        Let(Var("P",F1),Mop(Cast F1,bVar"index"),
44134            Let(Var("U",F1),Mop(Cast F1,bVar"add"),
44135                Let(Var("W",F1),
44136                    Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),
44137                    ITB([(Bop(And,bVar"unsigned",
44138                              Bop(Ule,Var("imm32",F32),LW(4095,32))),
44139                          Call
44140                            ("ARM",CTy"MachineCode",
44141                             CC[Var("c",F4),LW(2,3),Var("P",F1),
44142                                Var("U",F1),LW(1,1),Var("W",F1),LW(1,1),
44143                                Var("n",F4),Var("t",F4),
44144                                EX(Var("imm32",F32),LN 11,LN 0,FTy 12)])),
44145                         (Bop(Ule,Var("imm32",F32),LW(255,32)),
44146                          Call
44147                            ("ARM",CTy"MachineCode",
44148                             CC[Var("c",F4),LW(0,3),Var("P",F1),
44149                                Var("U",F1),LW(1,1),Var("W",F1),LW(1,1),
44150                                Var("n",F4),Var("t",F4),
44151                                EX(Var("imm32",F32),LN 7,LN 4,F4),
44152                                LW(13,4),EX(Var("imm32",F32),LN 3,LN 0,F4)]))],
44153                        Call("BadCode",CTy"MachineCode",LS"LoadByte")))))),
44154       (Call
44155          ("LoadByte",CTy"Load",
44156           TP[bVar"unsigned",bVar"add",bVar"index",bVar"wback",
44157              Var("t",F4),Var("n",F4),
44158              Call
44159                ("register_form1",CTy"offset1",
44160                 TP[Var("m",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]),
44161        Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)],
44162            Call
44163              ("EncodeImmShift",PTy(FTy 2,FTy 5),
44164               TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]),
44165            Let(Var("P",F1),Mop(Cast F1,bVar"index"),
44166                Let(Var("U",F1),Mop(Cast F1,bVar"add"),
44167                    Let(Var("W",F1),
44168                        Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),
44169                        ITB([(bVar"unsigned",
44170                              Call
44171                                ("ARM",CTy"MachineCode",
44172                                 CC[Var("c",F4),LW(3,3),Var("P",F1),
44173                                    Var("U",F1),LW(1,1),Var("W",F1),
44174                                    LW(1,1),Var("n",F4),Var("t",F4),
44175                                    Var("imm5",FTy 5),Var("typ",FTy 2),
44176                                    LW(0,1),Var("m",F4)])),
44177                             (Bop(And,
44178                                  EQ(Var("shift_t",CTy"SRType"),
44179                                     LC("SRType_LSL",CTy"SRType")),
44180                                  EQ(nVar"shift_n",LN 0)),
44181                              Call
44182                                ("ARM",CTy"MachineCode",
44183                                 CC[Var("c",F4),LW(0,3),Var("P",F1),
44184                                    Var("U",F1),LW(0,1),Var("W",F1),
44185                                    LW(1,1),Var("n",F4),Var("t",F4),
44186                                    LW(13,8),Var("m",F4)]))],
44187                            Call("BadCode",CTy"MachineCode",LS"LoadByte"))))))),
44188       (Call
44189          ("LoadByteLiteral",CTy"Load",
44190           TP[bVar"unsigned",bVar"add",Var("Rt",F4),Var("imm32",F32)]),
44191        Let(Var("U",F1),Mop(Cast F1,bVar"add"),
44192            ITB([(Bop(And,bVar"unsigned",
44193                      Bop(Ule,Var("imm32",F32),LW(4095,32))),
44194                  Call
44195                    ("ARM",CTy"MachineCode",
44196                     CC[Var("c",F4),LW(5,4),Var("U",F1),LW(95,7),
44197                        Var("Rt",F4),
44198                        EX(Var("imm32",F32),LN 11,LN 0,FTy 12)])),
44199                 (Bop(Ule,Var("imm32",F32),LW(255,32)),
44200                  Call
44201                    ("ARM",CTy"MachineCode",
44202                     CC[Var("c",F4),LW(1,4),Var("U",F1),LW(95,7),
44203                        Var("Rt",F4),EX(Var("imm32",F32),LN 7,LN 4,F4),
44204                        LW(13,4),EX(Var("imm32",F32),LN 3,LN 0,F4)]))],
44205                Call("BadCode",CTy"MachineCode",LS"LoadByteLiteral")))),
44206       (Call
44207          ("LoadByteUnprivileged",CTy"Load",
44208           TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4),
44209              Call("immediate_form1",CTy"offset1",Var("imm32",F32))]),
44210        ITE(Bop(And,bVar"postindex",Bop(Ule,Var("imm32",F32),LW(4095,32))),
44211            Call
44212              ("ARM",CTy"MachineCode",
44213               CC[Var("c",F4),LW(4,4),Mop(Cast F1,bVar"add"),LW(7,3),
44214                  Var("Rn",F4),Var("Rt",F4),
44215                  EX(Var("imm32",F32),LN 11,LN 0,FTy 12)]),
44216            Call("BadCode",CTy"MachineCode",LS"LoadByteUnprivileged"))),
44217       (Call
44218          ("LoadByteUnprivileged",CTy"Load",
44219           TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4),
44220              Call
44221                ("register_form1",CTy"offset1",
44222                 TP[Var("Rm",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]),
44223        ITE(bVar"postindex",
44224            Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)],
44225                Call
44226                  ("EncodeImmShift",PTy(FTy 2,FTy 5),
44227                   TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]),
44228                Call
44229                  ("ARM",CTy"MachineCode",
44230                   CC[Var("c",F4),LW(6,4),Mop(Cast F1,bVar"add"),LW(7,3),
44231                      Var("Rn",F4),Var("Rt",F4),Var("imm5",FTy 5),
44232                      Var("typ",FTy 2),LW(0,1),Var("Rm",F4)])),
44233            Call("BadCode",CTy"MachineCode",LS"LoadByteUnprivileged"))),
44234       (Call
44235          ("LoadSignedByteUnprivileged",CTy"Load",
44236           TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4),
44237              Call("immediate_form2",CTy"offset2",Var("imm32",F32))]),
44238        ITE(Bop(And,bVar"postindex",Bop(Ule,Var("imm32",F32),LW(255,32))),
44239            Call
44240              ("ARM",CTy"MachineCode",
44241               CC[Var("c",F4),LW(0,4),Mop(Cast F1,bVar"add"),LW(7,3),
44242                  Var("Rn",F4),Var("Rt",F4),
44243                  EX(Var("imm32",F32),LN 7,LN 4,F4),LW(13,4),
44244                  EX(Var("imm32",F32),LN 3,LN 0,F4)]),
44245            Call
44246              ("BadCode",CTy"MachineCode",LS"LoadSignedByteUnprivileged"))),
44247       (Call
44248          ("LoadSignedByteUnprivileged",CTy"Load",
44249           TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4),
44250              Call("register_form2",CTy"offset2",Var("Rm",F4))]),
44251        ITE(bVar"postindex",
44252            Call
44253              ("ARM",CTy"MachineCode",
44254               CC[Var("c",F4),LW(0,4),Mop(Cast F1,bVar"add"),LW(3,3),
44255                  Var("Rn",F4),Var("Rt",F4),LW(13,8),Var("Rm",F4)]),
44256            Call
44257              ("BadCode",CTy"MachineCode",LS"LoadSignedByteUnprivileged"))),
44258       (Call
44259          ("LoadHalf",CTy"Load",
44260           TP[AVar bTy,AVar bTy,LF,LF,AVar(PTy(F4,PTy(F4,CTy"offset1")))]),
44261        Call("BadCode",CTy"MachineCode",LS"LoadHalf")),
44262       (Call
44263          ("LoadHalf",CTy"Load",
44264           TP[bVar"unsigned",bVar"add",bVar"index",bVar"wback",
44265              Var("t",F4),Var("n",F4),
44266              Call("immediate_form1",CTy"offset1",Var("imm32",F32))]),
44267        ITE(Bop(Ule,Var("imm32",F32),LW(255,32)),
44268            Call
44269              ("ARM",CTy"MachineCode",
44270               CC[Var("c",F4),LW(0,3),Mop(Cast F1,bVar"index"),
44271                  Mop(Cast F1,bVar"add"),LW(1,1),
44272                  Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(1,1),
44273                  Var("n",F4),Var("t",F4),
44274                  EX(Var("imm32",F32),LN 7,LN 4,F4),LW(1,1),
44275                  Mop(Cast F1,Mop(Not,bVar"unsigned")),LW(3,2),
44276                  EX(Var("imm32",F32),LN 3,LN 0,F4)]),
44277            Call("BadCode",CTy"MachineCode",LS"LoadHalf"))),
44278       (Call
44279          ("LoadHalf",CTy"Load",
44280           TP[bVar"unsigned",bVar"add",bVar"index",bVar"wback",
44281              Var("t",F4),Var("n",F4),
44282              Call
44283                ("register_form1",CTy"offset1",
44284                 TP[Var("m",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]),
44285        ITE(Bop(And,
44286                EQ(Var("shift_t",CTy"SRType"),LC("SRType_LSL",CTy"SRType")),
44287                EQ(nVar"shift_n",LN 0)),
44288            Call
44289              ("ARM",CTy"MachineCode",
44290               CC[Var("c",F4),LW(0,3),Mop(Cast F1,bVar"index"),
44291                  Mop(Cast F1,bVar"add"),LW(0,1),
44292                  Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(1,1),
44293                  Var("n",F4),Var("t",F4),LW(1,5),
44294                  Mop(Cast F1,Mop(Not,bVar"unsigned")),LW(3,2),Var("m",F4)]),
44295            Call("BadCode",CTy"MachineCode",LS"LoadHalf"))),
44296       (Call
44297          ("LoadHalfLiteral",CTy"Load",
44298           TP[bVar"unsigned",bVar"add",Var("Rt",F4),Var("imm32",F32)]),
44299        ITE(Bop(Ule,Var("imm32",F32),LW(255,32)),
44300            Call
44301              ("ARM",CTy"MachineCode",
44302               CC[Var("c",F4),LW(1,4),Mop(Cast F1,bVar"add"),LW(95,7),
44303                  Var("Rt",F4),EX(Var("imm32",F32),LN 7,LN 4,F4),LW(1,1),
44304                  Mop(Cast F1,Mop(Not,bVar"unsigned")),LW(3,2),
44305                  EX(Var("imm32",F32),LN 3,LN 0,F4)]),
44306            Call("BadCode",CTy"MachineCode",LS"LoadHalfLiteral"))),
44307       (Call
44308          ("LoadHalfUnprivileged",CTy"Load",
44309           TP[bVar"unsigned",bVar"add",bVar"postindex",Var("Rt",F4),
44310              Var("Rn",F4),
44311              Call("immediate_form2",CTy"offset2",Var("imm32",F32))]),
44312        ITE(Bop(And,bVar"postindex",Bop(Ule,Var("imm32",F32),LW(255,32))),
44313            Call
44314              ("ARM",CTy"MachineCode",
44315               CC[Var("c",F4),LW(0,4),Mop(Cast F1,bVar"add"),LW(7,3),
44316                  Var("Rn",F4),Var("Rt",F4),
44317                  EX(Var("imm32",F32),LN 7,LN 4,F4),LW(1,1),
44318                  Mop(Cast F1,Mop(Not,bVar"unsigned")),LW(3,2),
44319                  EX(Var("imm32",F32),LN 3,LN 0,F4)]),
44320            Call("BadCode",CTy"MachineCode",LS"LoadHalfUnprivileged"))),
44321       (Call
44322          ("LoadHalfUnprivileged",CTy"Load",
44323           TP[bVar"unsigned",bVar"add",bVar"postindex",Var("Rt",F4),
44324              Var("Rn",F4),
44325              Call("register_form2",CTy"offset2",Var("Rm",F4))]),
44326        ITE(bVar"postindex",
44327            Call
44328              ("ARM",CTy"MachineCode",
44329               CC[Var("c",F4),LW(0,4),Mop(Cast F1,bVar"add"),LW(3,3),
44330                  Var("Rn",F4),Var("Rt",F4),LW(1,5),
44331                  Mop(Cast F1,Mop(Not,bVar"unsigned")),LW(3,2),
44332                  Var("Rm",F4)]),
44333            Call("BadCode",CTy"MachineCode",LS"LoadHalfUnprivileged"))),
44334       (Call
44335          ("LoadMultiple",CTy"Load",
44336           TP[bVar"increment",bVar"index",bVar"wback",Var("n",F4),
44337              Var("registers",F16)]),
44338        Call
44339          ("ARM",CTy"MachineCode",
44340           CC[Var("c",F4),LW(4,3),Mop(Cast F1,bVar"index"),
44341              Mop(Cast F1,bVar"increment"),LW(0,1),
44342              Mop(Cast F1,bVar"wback"),LW(1,1),Var("n",F4),
44343              Var("registers",F16)])),
44344       (Call
44345          ("LoadMultipleExceptionReturn",CTy"Load",
44346           TP[bVar"increment",bVar"wordhigher",bVar"wback",Var("Rn",F4),
44347              Var("registers",FTy 15)]),
44348        Call
44349          ("ARM",CTy"MachineCode",
44350           CC[Var("c",F4),LW(4,3),
44351              Mop(Cast F1,
44352                  ITE(bVar"wordhigher",bVar"increment",
44353                      Mop(Not,bVar"increment"))),
44354              Mop(Cast F1,bVar"increment"),LW(1,1),
44355              Mop(Cast F1,bVar"wback"),LW(1,1),Var("Rn",F4),LW(1,1),
44356              Var("registers",FTy 15)])),
44357       (Call
44358          ("LoadMultipleUserRegisters",CTy"Load",
44359           TP[bVar"increment",bVar"wordhigher",Var("Rn",F4),
44360              Var("registers",FTy 15)]),
44361        Call
44362          ("ARM",CTy"MachineCode",
44363           CC[Var("c",F4),LW(4,3),
44364              Mop(Cast F1,
44365                  ITE(bVar"wordhigher",bVar"increment",
44366                      Mop(Not,bVar"increment"))),
44367              Mop(Cast F1,bVar"increment"),LW(5,3),Var("Rn",F4),LW(0,1),
44368              Var("registers",FTy 15)])),
44369       (Call
44370          ("LoadDual",CTy"Load",
44371           TP[bVar"add",bVar"index",bVar"wback",Var("Rt",F4),
44372              Var("Rt2",F4),Var("Rn",F4),
44373              Call("immediate_form2",CTy"offset2",Var("imm32",F32))]),
44374        ITE(Bop(And,EQ(Bop(Add,Var("Rt",F4),LW(1,4)),Var("Rt2",F4)),
44375                Bop(Ule,Var("imm32",F32),LW(255,32))),
44376            Call
44377              ("ARM",CTy"MachineCode",
44378               CC[Var("c",F4),LW(0,3),Mop(Cast F1,bVar"index"),
44379                  Mop(Cast F1,bVar"add"),LW(1,1),
44380                  Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(0,1),
44381                  Var("Rn",F4),Var("Rt",F4),
44382                  EX(Var("imm32",F32),LN 7,LN 4,F4),LW(13,4),
44383                  EX(Var("imm32",F32),LN 3,LN 0,F4)]),
44384            Call("BadCode",CTy"MachineCode",LS"LoadDual"))),
44385       (Call
44386          ("LoadDual",CTy"Load",
44387           TP[bVar"add",bVar"index",bVar"wback",Var("Rt",F4),
44388              Var("Rt2",F4),Var("Rn",F4),
44389              Call("register_form2",CTy"offset2",Var("Rm",F4))]),
44390        ITE(EQ(Bop(Add,Var("Rt",F4),LW(1,4)),Var("Rt2",F4)),
44391            Call
44392              ("ARM",CTy"MachineCode",
44393               CC[Var("c",F4),LW(0,3),Mop(Cast F1,bVar"index"),
44394                  Mop(Cast F1,bVar"add"),LW(0,1),
44395                  Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(0,1),
44396                  Var("Rn",F4),Var("Rt",F4),LW(13,8),Var("Rm",F4)]),
44397            Call("BadCode",CTy"MachineCode",LS"LoadDual"))),
44398       (Call
44399          ("LoadDualLiteral",CTy"Load",
44400           TP[bVar"add",Var("Rt",F4),Var("Rt2",F4),Var("imm32",F32)]),
44401        ITE(Bop(And,EQ(Bop(Add,Var("Rt",F4),LW(1,4)),Var("Rt2",F4)),
44402                Bop(Ule,Var("imm32",F32),LW(255,32))),
44403            Call
44404              ("ARM",CTy"MachineCode",
44405               CC[Var("c",F4),LW(1,4),Mop(Cast F1,bVar"add"),LW(79,7),
44406                  Var("Rt",F4),EX(Var("imm32",F32),LN 7,LN 4,F4),LW(13,4),
44407                  EX(Var("imm32",F32),LN 3,LN 0,F4)]),
44408            Call("BadCode",CTy"MachineCode",LS"LoadDualLiteral"))),
44409       (Call
44410          ("LoadExclusive",CTy"Load",
44411           TP[Var("Rt",F4),Var("Rn",F4),Var("imm32",F32)]),
44412        ITE(EQ(Var("imm32",F32),LW(0,32)),
44413            Call
44414              ("ARM",CTy"MachineCode",
44415               CC[Var("c",F4),LW(25,8),Var("Rn",F4),Var("Rt",F4),
44416                  LW(3999,12)]),
44417            Call("BadCode",CTy"MachineCode",LS"LoadExclusive"))),
44418       (Call("LoadExclusiveByte",CTy"Load",TP[Var("Rt",F4),Var("Rn",F4)]),
44419        Call
44420          ("ARM",CTy"MachineCode",
44421           CC[Var("c",F4),LW(29,8),Var("Rn",F4),Var("Rt",F4),LW(3999,12)])),
44422       (Call("LoadExclusiveHalf",CTy"Load",TP[Var("Rt",F4),Var("Rn",F4)]),
44423        Call
44424          ("ARM",CTy"MachineCode",
44425           CC[Var("c",F4),LW(31,8),Var("Rn",F4),Var("Rt",F4),LW(3999,12)])),
44426       (Call
44427          ("LoadExclusiveDoubleword",CTy"Load",
44428           TP[Var("Rt",F4),Var("Rt2",F4),Var("Rn",F4)]),
44429        ITE(EQ(Bop(Add,Var("Rt",F4),LW(1,4)),Var("Rt2",F4)),
44430            Call
44431              ("ARM",CTy"MachineCode",
44432               CC[Var("c",F4),LW(27,8),Var("Rn",F4),Var("Rt",F4),
44433                  LW(3999,12)]),
44434            Call("BadCode",CTy"MachineCode",LS"LoadExclusiveDoubleword")))]))
44435;
44436val e_store_def = Def
44437  ("e_store",TP[Var("c",F4),Var("ast",CTy"Store")],
44438   CS(Var("ast",CTy"Store"),
44439      [(Call
44440          ("StoreWord",CTy"Store",
44441           TP[AVar bTy,LF,LF,AVar(PTy(F4,PTy(F4,CTy"offset1")))]),
44442        Call("BadCode",CTy"MachineCode",LS"StoreWord")),
44443       (Call
44444          ("StoreWord",CTy"Store",
44445           TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4),
44446              Call("immediate_form1",CTy"offset1",Var("imm32",F32))]),
44447        ITE(Bop(Ule,Var("imm32",F32),LW(4095,32)),
44448            Call
44449              ("ARM",CTy"MachineCode",
44450               CC[Var("c",F4),LW(2,3),Mop(Cast F1,bVar"index"),
44451                  Mop(Cast F1,bVar"add"),LW(0,1),
44452                  Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(0,1),
44453                  Var("n",F4),Var("t",F4),
44454                  EX(Var("imm32",F32),LN 11,LN 0,FTy 12)]),
44455            Call("BadCode",CTy"MachineCode",LS"StoreWord"))),
44456       (Call
44457          ("StoreWord",CTy"Store",
44458           TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4),
44459              Call
44460                ("register_form1",CTy"offset1",
44461                 TP[Var("m",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]),
44462        Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)],
44463            Call
44464              ("EncodeImmShift",PTy(FTy 2,FTy 5),
44465               TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]),
44466            Call
44467              ("ARM",CTy"MachineCode",
44468               CC[Var("c",F4),LW(3,3),Mop(Cast F1,bVar"index"),
44469                  Mop(Cast F1,bVar"add"),LW(0,1),
44470                  Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(0,1),
44471                  Var("n",F4),Var("t",F4),Var("imm5",FTy 5),
44472                  Var("typ",FTy 2),LW(0,1),Var("m",F4)]))),
44473       (Call
44474          ("StoreUnprivileged",CTy"Store",
44475           TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4),
44476              Call("immediate_form1",CTy"offset1",Var("imm32",F32))]),
44477        ITE(Bop(And,bVar"postindex",Bop(Ule,Var("imm32",F32),LW(4095,32))),
44478            Call
44479              ("ARM",CTy"MachineCode",
44480               CC[Var("c",F4),LW(4,4),Mop(Cast F1,bVar"add"),LW(2,3),
44481                  Var("Rn",F4),Var("Rt",F4),
44482                  EX(Var("imm32",F32),LN 11,LN 0,FTy 12)]),
44483            Call("BadCode",CTy"MachineCode",LS"StoreUnprivileged"))),
44484       (Call
44485          ("StoreUnprivileged",CTy"Store",
44486           TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4),
44487              Call
44488                ("register_form1",CTy"offset1",
44489                 TP[Var("Rm",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]),
44490        ITE(bVar"postindex",
44491            Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)],
44492                Call
44493                  ("EncodeImmShift",PTy(FTy 2,FTy 5),
44494                   TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]),
44495                Call
44496                  ("ARM",CTy"MachineCode",
44497                   CC[Var("c",F4),LW(6,4),Mop(Cast F1,bVar"add"),LW(2,3),
44498                      Var("Rn",F4),Var("Rt",F4),Var("imm5",FTy 5),
44499                      Var("typ",FTy 2),LW(0,1),Var("Rm",F4)])),
44500            Call("BadCode",CTy"MachineCode",LS"StoreUnprivileged"))),
44501       (Call
44502          ("StoreByte",CTy"Store",
44503           TP[AVar bTy,LF,LF,AVar(PTy(F4,PTy(F4,CTy"offset1")))]),
44504        Call("BadCode",CTy"MachineCode",LS"StoreByte")),
44505       (Call
44506          ("StoreByte",CTy"Store",
44507           TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4),
44508              Call("immediate_form1",CTy"offset1",Var("imm32",F32))]),
44509        ITE(Bop(Ule,Var("imm32",F32),LW(4095,32)),
44510            Call
44511              ("ARM",CTy"MachineCode",
44512               CC[Var("c",F4),LW(2,3),Mop(Cast F1,bVar"index"),
44513                  Mop(Cast F1,bVar"add"),LW(1,1),
44514                  Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(0,1),
44515                  Var("n",F4),Var("t",F4),
44516                  EX(Var("imm32",F32),LN 11,LN 0,FTy 12)]),
44517            Call("BadCode",CTy"MachineCode",LS"StoreByte"))),
44518       (Call
44519          ("StoreByte",CTy"Store",
44520           TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4),
44521              Call
44522                ("register_form1",CTy"offset1",
44523                 TP[Var("m",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]),
44524        Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)],
44525            Call
44526              ("EncodeImmShift",PTy(FTy 2,FTy 5),
44527               TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]),
44528            Call
44529              ("ARM",CTy"MachineCode",
44530               CC[Var("c",F4),LW(3,3),Mop(Cast F1,bVar"index"),
44531                  Mop(Cast F1,bVar"add"),LW(1,1),
44532                  Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(0,1),
44533                  Var("n",F4),Var("t",F4),Var("imm5",FTy 5),
44534                  Var("typ",FTy 2),LW(0,1),Var("m",F4)]))),
44535       (Call
44536          ("StoreByteUnprivileged",CTy"Store",
44537           TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4),
44538              Call("immediate_form1",CTy"offset1",Var("imm32",F32))]),
44539        ITE(Bop(And,bVar"postindex",Bop(Ule,Var("imm32",F32),LW(4095,32))),
44540            Call
44541              ("ARM",CTy"MachineCode",
44542               CC[Var("c",F4),LW(4,4),Mop(Cast F1,bVar"add"),LW(6,3),
44543                  Var("Rn",F4),Var("Rt",F4),
44544                  EX(Var("imm32",F32),LN 11,LN 0,FTy 12)]),
44545            Call("BadCode",CTy"MachineCode",LS"StoreByteUnprivileged"))),
44546       (Call
44547          ("StoreByteUnprivileged",CTy"Store",
44548           TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4),
44549              Call
44550                ("register_form1",CTy"offset1",
44551                 TP[Var("Rm",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]),
44552        ITE(bVar"postindex",
44553            Let(TP[Var("typ",FTy 2),Var("imm5",FTy 5)],
44554                Call
44555                  ("EncodeImmShift",PTy(FTy 2,FTy 5),
44556                   TP[Var("shift_t",CTy"SRType"),nVar"shift_n"]),
44557                Call
44558                  ("ARM",CTy"MachineCode",
44559                   CC[Var("c",F4),LW(6,4),Mop(Cast F1,bVar"add"),LW(6,3),
44560                      Var("Rn",F4),Var("Rt",F4),Var("imm5",FTy 5),
44561                      Var("typ",FTy 2),LW(0,1),Var("Rm",F4)])),
44562            Call("BadCode",CTy"MachineCode",LS"StoreByteUnprivileged"))),
44563       (Call
44564          ("StoreHalf",CTy"Store",
44565           TP[AVar bTy,LF,LF,AVar(PTy(F4,PTy(F4,CTy"offset1")))]),
44566        Call("BadCode",CTy"MachineCode",LS"StoreHalf")),
44567       (Call
44568          ("StoreHalf",CTy"Store",
44569           TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4),
44570              Call("immediate_form1",CTy"offset1",Var("imm32",F32))]),
44571        ITE(Bop(Ule,Var("imm32",F32),LW(255,32)),
44572            Call
44573              ("ARM",CTy"MachineCode",
44574               CC[Var("c",F4),LW(0,3),Mop(Cast F1,bVar"index"),
44575                  Mop(Cast F1,bVar"add"),LW(1,1),
44576                  Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(0,1),
44577                  Var("n",F4),Var("t",F4),
44578                  EX(Var("imm32",F32),LN 7,LN 4,F4),LW(11,4),
44579                  EX(Var("imm32",F32),LN 3,LN 0,F4)]),
44580            Call("BadCode",CTy"MachineCode",LS"StoreHalf"))),
44581       (Call
44582          ("StoreHalf",CTy"Store",
44583           TP[bVar"add",bVar"index",bVar"wback",Var("t",F4),Var("n",F4),
44584              Call
44585                ("register_form1",CTy"offset1",
44586                 TP[Var("m",F4),Var("shift_t",CTy"SRType"),nVar"shift_n"])]),
44587        ITE(Bop(And,
44588                EQ(Var("shift_t",CTy"SRType"),LC("SRType_LSL",CTy"SRType")),
44589                EQ(nVar"shift_n",LN 0)),
44590            Call
44591              ("ARM",CTy"MachineCode",
44592               CC[Var("c",F4),LW(0,3),Mop(Cast F1,bVar"index"),
44593                  Mop(Cast F1,bVar"add"),LW(0,1),
44594                  Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(0,1),
44595                  Var("n",F4),Var("t",F4),LW(11,8),Var("m",F4)]),
44596            Call("BadCode",CTy"MachineCode",LS"StoreHalf"))),
44597       (Call
44598          ("StoreHalfUnprivileged",CTy"Store",
44599           TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4),
44600              Call("immediate_form2",CTy"offset2",Var("imm32",F32))]),
44601        ITE(Bop(And,bVar"postindex",Bop(Ule,Var("imm32",F32),LW(255,32))),
44602            Call
44603              ("ARM",CTy"MachineCode",
44604               CC[Var("c",F4),LW(0,4),Mop(Cast F1,bVar"add"),LW(6,3),
44605                  Var("Rn",F4),Var("Rt",F4),
44606                  EX(Var("imm32",F32),LN 7,LN 4,F4),LW(11,4),
44607                  EX(Var("imm32",F32),LN 3,LN 0,F4)]),
44608            Call("BadCode",CTy"MachineCode",LS"StoreHalfUnprivileged"))),
44609       (Call
44610          ("StoreHalfUnprivileged",CTy"Store",
44611           TP[bVar"add",bVar"postindex",Var("Rt",F4),Var("Rn",F4),
44612              Call("register_form2",CTy"offset2",Var("Rm",F4))]),
44613        ITE(bVar"postindex",
44614            Call
44615              ("ARM",CTy"MachineCode",
44616               CC[Var("c",F4),LW(0,4),Mop(Cast F1,bVar"add"),LW(2,3),
44617                  Var("Rn",F4),Var("Rt",F4),LW(11,8),Var("Rm",F4)]),
44618            Call("BadCode",CTy"MachineCode",LS"StoreHalfUnprivileged"))),
44619       (Call
44620          ("StoreMultiple",CTy"Store",
44621           TP[bVar"increment",bVar"index",bVar"wback",Var("n",F4),
44622              Var("registers",F16)]),
44623        Call
44624          ("ARM",CTy"MachineCode",
44625           CC[Var("c",F4),LW(4,3),Mop(Cast F1,bVar"index"),
44626              Mop(Cast F1,bVar"increment"),LW(0,1),
44627              Mop(Cast F1,bVar"wback"),LW(0,1),Var("n",F4),
44628              Var("registers",F16)])),
44629       (Call
44630          ("StoreMultipleUserRegisters",CTy"Store",
44631           TP[bVar"increment",bVar"wordhigher",Var("Rn",F4),
44632              Var("registers",F16)]),
44633        Call
44634          ("ARM",CTy"MachineCode",
44635           CC[Var("c",F4),LW(4,3),
44636              Mop(Cast F1,
44637                  ITE(bVar"wordhigher",bVar"increment",
44638                      Mop(Not,bVar"increment"))),
44639              Mop(Cast F1,bVar"increment"),LW(4,3),Var("Rn",F4),
44640              Var("registers",F16)])),
44641       (Call
44642          ("StoreDual",CTy"Store",
44643           TP[bVar"add",bVar"index",bVar"wback",Var("Rt",F4),
44644              Var("Rt2",F4),Var("Rn",F4),
44645              Call("immediate_form2",CTy"offset2",Var("imm32",F32))]),
44646        ITE(Bop(And,EQ(Bop(Add,Var("Rt",F4),LW(1,4)),Var("Rt2",F4)),
44647                Bop(Ule,Var("imm32",F32),LW(255,32))),
44648            Call
44649              ("ARM",CTy"MachineCode",
44650               CC[Var("c",F4),LW(0,3),Mop(Cast F1,bVar"index"),
44651                  Mop(Cast F1,bVar"add"),LW(1,1),
44652                  Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(0,1),
44653                  Var("Rn",F4),Var("Rt",F4),
44654                  EX(Var("imm32",F32),LN 7,LN 4,F4),LW(15,4),
44655                  EX(Var("imm32",F32),LN 3,LN 0,F4)]),
44656            Call("BadCode",CTy"MachineCode",LS"StoreDual"))),
44657       (Call
44658          ("StoreDual",CTy"Store",
44659           TP[bVar"add",bVar"index",bVar"wback",Var("Rt",F4),
44660              Var("Rt2",F4),Var("Rn",F4),
44661              Call("register_form2",CTy"offset2",Var("Rm",F4))]),
44662        ITE(EQ(Bop(Add,Var("Rt",F4),LW(1,4)),Var("Rt2",F4)),
44663            Call
44664              ("ARM",CTy"MachineCode",
44665               CC[Var("c",F4),LW(0,3),Mop(Cast F1,bVar"index"),
44666                  Mop(Cast F1,bVar"add"),LW(0,1),
44667                  Mop(Cast F1,Bop(And,bVar"index",bVar"wback")),LW(0,1),
44668                  Var("Rn",F4),Var("Rt",F4),LW(15,8),Var("Rm",F4)]),
44669            Call("BadCode",CTy"MachineCode",LS"StoreDual"))),
44670       (Call
44671          ("StoreExclusive",CTy"Store",
44672           TP[Var("Rd",F4),Var("Rt",F4),Var("Rn",F4),Var("imm32",F32)]),
44673        ITE(EQ(Var("imm32",F32),LW(0,32)),
44674            Call
44675              ("ARM",CTy"MachineCode",
44676               CC[Var("c",F4),LW(24,8),Var("Rn",F4),Var("Rd",F4),
44677                  LW(249,8),Var("Rt",F4)]),
44678            Call("BadCode",CTy"MachineCode",LS"StoreExclusive"))),
44679       (Call
44680          ("StoreExclusiveByte",CTy"Store",
44681           TP[Var("Rd",F4),Var("Rt",F4),Var("Rn",F4)]),
44682        Call
44683          ("ARM",CTy"MachineCode",
44684           CC[Var("c",F4),LW(28,8),Var("Rn",F4),Var("Rd",F4),LW(249,8),
44685              Var("Rt",F4)])),
44686       (Call
44687          ("StoreExclusiveHalf",CTy"Store",
44688           TP[Var("Rd",F4),Var("Rt",F4),Var("Rn",F4)]),
44689        Call
44690          ("ARM",CTy"MachineCode",
44691           CC[Var("c",F4),LW(30,8),Var("Rn",F4),Var("Rd",F4),LW(249,8),
44692              Var("Rt",F4)])),
44693       (Call
44694          ("StoreExclusiveDoubleword",CTy"Store",
44695           TP[Var("Rd",F4),Var("Rt",F4),Var("Rt2",F4),Var("Rn",F4)]),
44696        ITE(EQ(Bop(Add,Var("Rt",F4),LW(1,4)),Var("Rt2",F4)),
44697            Call
44698              ("ARM",CTy"MachineCode",
44699               CC[Var("c",F4),LW(26,8),Var("Rn",F4),Var("Rd",F4),
44700                  LW(249,8),Var("Rt",F4)]),
44701            Call("BadCode",CTy"MachineCode",LS"StoreExclusiveDoubleword")))]))
44702;
44703val encode_def = Def
44704  ("encode",TP[Var("c",F4),Var("ast",CTy"instruction")],
44705   CS(Var("ast",CTy"instruction"),
44706      [(Call("Branch",CTy"instruction",Var("b",CTy"Branch")),
44707        Call
44708          ("e_branch",CTy"MachineCode",
44709           TP[Var("c",F4),Var("b",CTy"Branch")])),
44710       (Call("Data",CTy"instruction",Var("d",CTy"Data")),
44711        Call("e_data",CTy"MachineCode",TP[Var("c",F4),Var("d",CTy"Data")])),
44712       (Call("Load",CTy"instruction",Var("l",CTy"Load")),
44713        Call("e_load",CTy"MachineCode",TP[Var("c",F4),Var("l",CTy"Load")])),
44714       (Call("Store",CTy"instruction",Var("s",CTy"Store")),
44715        Call
44716          ("e_store",CTy"MachineCode",TP[Var("c",F4),Var("s",CTy"Store")])),
44717       (Call("Multiply",CTy"instruction",Var("m",CTy"Multiply")),
44718        Call
44719          ("e_multiply",CTy"MachineCode",
44720           TP[Var("c",F4),Var("m",CTy"Multiply")])),
44721       (Call("Media",CTy"instruction",Var("m",CTy"Media")),
44722        Call
44723          ("e_media",CTy"MachineCode",TP[Var("c",F4),Var("m",CTy"Media")])),
44724       (Call("SIMD",CTy"instruction",Var("m",CTy"SIMD")),
44725        Call("e_simd",CTy"MachineCode",TP[Var("c",F4),Var("m",CTy"SIMD")])),
44726       (Call("System",CTy"instruction",Var("s",CTy"System")),
44727        Call
44728          ("e_system",CTy"MachineCode",
44729           TP[Var("c",F4),Var("s",CTy"System")])),
44730       (Call("Hint",CTy"instruction",Var("h",CTy"Hint")),
44731        Call("e_hint",CTy"MachineCode",TP[Var("c",F4),Var("h",CTy"Hint")])),
44732       (Call("VFP",CTy"instruction",Var("v",CTy"VFP")),
44733        Call("e_vfp",CTy"MachineCode",TP[Var("c",F4),Var("v",CTy"VFP")])),
44734       (Call
44735          ("IfThen",CTy"instruction",
44736           TP[Var("firstcond",F4),Var("mask",F4)]),
44737        Call("BadCode",CTy"MachineCode",LS"IfThen")),
44738       (Call
44739          ("Divide",CTy"instruction",
44740           TP[bVar"unsigned",Var("Rd",F4),Var("Rn",F4),Var("Rm",F4)]),
44741        Call("BadCode",CTy"MachineCode",LS"Divide")),
44742       (Const("ClearExclusive",CTy"instruction"),
44743        ITE(EQ(Var("c",F4),LW(14,4)),
44744            Call("ARM",CTy"MachineCode",LW(4118802463,32)),
44745            Call("BadCode",CTy"MachineCode",LS"ClearExclusive"))),
44746       (Call
44747          ("Swap",CTy"instruction",
44748           TP[bVar"byte",Var("Rt",F4),Var("Rt2",F4),Var("Rn",F4)]),
44749        Call
44750          ("ARM",CTy"MachineCode",
44751           CC[Var("c",F4),LW(2,5),Mop(Cast F1,bVar"byte"),LW(0,2),
44752              Var("Rn",F4),Var("Rt",F4),LW(9,8),Var("Rt2",F4)])),
44753       (Call("Undefined",CTy"instruction",Var("imm32",F32)),
44754        Call
44755          ("ARM",CTy"MachineCode",
44756           CC[LW(3711,12),EX(Var("imm32",F32),LN 15,LN 4,FTy 12),LW(15,4),
44757              EX(Var("imm32",F32),LN 3,LN 0,F4)])),
44758       (Const("NoOperation",CTy"instruction"),
44759        Call("ARM",CTy"MachineCode",CC[Var("c",F4),LW(52490240,28)]))]))
44760;
44761val SetPassCondition_def = Def
44762  ("SetPassCondition",Var("c",F4),
44763   Close
44764     (qVar"state",
44765      CS(Var("c",F4),
44766         [(LW(0,4),
44767           Rupd
44768             ("CPSR",
44769              TP[qVar"state",
44770                 Rupd("Z",TP[Dest("CPSR",CTy"PSR",qVar"state"),LT])])),
44771          (LW(1,4),
44772           Rupd
44773             ("CPSR",
44774              TP[qVar"state",
44775                 Rupd("Z",TP[Dest("CPSR",CTy"PSR",qVar"state"),LF])])),
44776          (LW(2,4),
44777           Rupd
44778             ("CPSR",
44779              TP[qVar"state",
44780                 Rupd("C",TP[Dest("CPSR",CTy"PSR",qVar"state"),LT])])),
44781          (LW(3,4),
44782           Rupd
44783             ("CPSR",
44784              TP[qVar"state",
44785                 Rupd("C",TP[Dest("CPSR",CTy"PSR",qVar"state"),LF])])),
44786          (LW(4,4),
44787           Rupd
44788             ("CPSR",
44789              TP[qVar"state",
44790                 Rupd("N",TP[Dest("CPSR",CTy"PSR",qVar"state"),LT])])),
44791          (LW(5,4),
44792           Rupd
44793             ("CPSR",
44794              TP[qVar"state",
44795                 Rupd("N",TP[Dest("CPSR",CTy"PSR",qVar"state"),LF])])),
44796          (LW(6,4),
44797           Rupd
44798             ("CPSR",
44799              TP[qVar"state",
44800                 Rupd("V",TP[Dest("CPSR",CTy"PSR",qVar"state"),LT])])),
44801          (LW(7,4),
44802           Rupd
44803             ("CPSR",
44804              TP[qVar"state",
44805                 Rupd("V",TP[Dest("CPSR",CTy"PSR",qVar"state"),LF])])),
44806          (LW(8,4),
44807           Let(qVar"s",
44808               Rupd
44809                 ("CPSR",
44810                  TP[qVar"state",
44811                     Rupd("C",TP[Dest("CPSR",CTy"PSR",qVar"state"),LT])]),
44812               Rupd
44813                 ("CPSR",
44814                  TP[qVar"s",
44815                     Rupd("Z",TP[Dest("CPSR",CTy"PSR",qVar"s"),LF])]))),
44816          (LW(9,4),
44817           Rupd
44818             ("CPSR",
44819              TP[qVar"state",
44820                 Rupd("C",TP[Dest("CPSR",CTy"PSR",qVar"state"),LF])])),
44821          (LW(10,4),
44822           Let(qVar"s",
44823               Rupd
44824                 ("CPSR",
44825                  TP[qVar"state",
44826                     Rupd("N",TP[Dest("CPSR",CTy"PSR",qVar"state"),LF])]),
44827               Rupd
44828                 ("CPSR",
44829                  TP[qVar"s",
44830                     Rupd("V",TP[Dest("CPSR",CTy"PSR",qVar"s"),LF])]))),
44831          (LW(11,4),
44832           Let(qVar"s",
44833               Rupd
44834                 ("CPSR",
44835                  TP[qVar"state",
44836                     Rupd("N",TP[Dest("CPSR",CTy"PSR",qVar"state"),LF])]),
44837               Rupd
44838                 ("CPSR",
44839                  TP[qVar"s",
44840                     Rupd("V",TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]))),
44841          (LW(12,4),
44842           Let(qVar"s",
44843               Rupd
44844                 ("CPSR",
44845                  TP[qVar"state",
44846                     Rupd("N",TP[Dest("CPSR",CTy"PSR",qVar"state"),LF])]),
44847               Let(qVar"s",
44848                   Rupd
44849                     ("CPSR",
44850                      TP[qVar"s",
44851                         Rupd("V",TP[Dest("CPSR",CTy"PSR",qVar"s"),LF])]),
44852                   Rupd
44853                     ("CPSR",
44854                      TP[qVar"s",
44855                         Rupd("Z",TP[Dest("CPSR",CTy"PSR",qVar"s"),LF])])))),
44856          (LW(13,4),
44857           Let(qVar"s",
44858               Rupd
44859                 ("CPSR",
44860                  TP[qVar"state",
44861                     Rupd("N",TP[Dest("CPSR",CTy"PSR",qVar"state"),LF])]),
44862               Rupd
44863                 ("CPSR",
44864                  TP[qVar"s",
44865                     Rupd("V",TP[Dest("CPSR",CTy"PSR",qVar"s"),LT])]))),
44866          (AVar F4,qVar"state")])))
44867
44868val () = Import.finish 0